7542|17

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助编程 [复制链接]


    请问高手:
    1.在定义了下边的变量后,怎么找到其中任意一个变量的数据页(需要赋值时,假设变量很多)?只有找到第一个变量的数据页,再查到偏移量来算吗?有没有别的方法?
         .bss N_KP,1               ;速度调节比例系数
         .bss N_KI,1                ;速度调节积分系数
         .bss N_KC,1               ;速度调节积分饱和修正系数
         .bss I_KP,1                ;电流调节比例系数
         .bss I_KI,1                ;电流调节积分系数
         .bss I_KC,1                ;电流调节积分饱和修正系数
         .bss I_REF,1               ;电流参考值
         .bss N_REF,1               ;速度参考值
         .bss DIRECTION,1          ;速度方向标志
         .bss STACK,6              ;软堆栈初始地址
         .bss I_EK,1                ;电流偏差
         .bss I_RK,1                ;电流第K次积分调节累计
         .bss I_U,1                 ;电流调节输出
         .bss I_ELPI,1              ;电流极限偏差
         .bss TMP,1                ;临时变量
         .bss ENCODEROLD,1       ;前一次编码器读数
         .bss ENCINCR,1            ;编码增量
         .bss SPEEDTMP,1           ;编码脉冲累计
         .bss SPEEDSTEP,1          ;速度调节计数器
         .bss KSPEED,1              ;编码脉冲-速度转换系数
         .bss N,1                    ;速度反馈量
         .bss N_EK,1                 ;速度偏差
         .bss N_RK,1                 ;速度第K次积分调节累计
         .bss N_U,1                  ;速度调节输出
         .bss N_ELPI,1               ;速度极限偏差
         .bss I_MIN,1                ;电流最小值
         .bss I_MAX,1               ;电流最大值
2.上边的定义中,第一个变量N_KP数据页是不是0?
3.程序中需要设置一些寄存器,怎么找到它们的数据页?
4.我看到有的程序有如下赋值:
  SPLK      #I_KP,I_KP            ;给电流比例系数赋值,Q12格式
  此时I_KP中是什么值?

谢谢

最新回复

   我觉得只要这些变量都在同一个页面,那几条指令执行结果都相同。定义时注意一点,是可以保证它们在同一页的。  详情 回复 发表于 2007-7-31 01:12
点赞 关注

回复
举报

87

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
       定义了变量,到底在哪一页,是  Linker 时(根据  cmd 文件)决定的,写代码时还不清楚它到底在哪页。页和偏移量汇编器和连接器(Linker) 配合会替你计算,不必操心。如定义了:

      .bss N_KP,1
则两条指令:
   LDPK   N_KP
     ZALS   N_KP
就把 N_KP 的值读到 ACL  中了。
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
可是,对变量赋值需要知道变量的数据页啊, 不都是“LDP  #数据页;”吗?
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 

看看你的CMD,贴上来看看

MEMORY
{
     PAGE 0:  /* PROGRAM MEMORY */
        VECS: origin=0h, length=0040h  /* PROGRAM */  
        
        PROG: origin=0044h, length=7FFFh /* 32K On-chip flash memory */
        
     PAGE 1: /* DATA MEMORY */
        
        BLK_B2: origin=60h, length=20h /* Block B2 */
        BLK_B0: origin=200h, length=100h /* Block B0, On-chip DARAM if CNF=0 */
        BLK_B1: origin=300h , length=100h /* Block B1 */
        SARAM_D: origin=0800H , length=0800H /* 2K SARAM in data space */
        PERIPH: origin=7000h , length=1000h /* Peripheral register space */
        EX2_DM: origin=8000h , length=8000h /* External data RAM */
     
}
SECTIONS
{
     .vectors: {} > VECS PAGE 0          /* INTERRUPT VECTOR TABLE */   
     .pvecs:   {} > PROG PAGE 0
     .text: {} > PROG PAGE 0               /* CODE */
              
     .data: {} > PROG PAGE 0            /* INITIALIZATION DATA TABLES */  
     
     .bss: {} > BLK_B1 PAGE 1   
     .context: {} > BLK_B2 PAGE 1
}
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
  定义了变量之后,在访问(读或写)变量时,程序中直接写变量名,页码,偏移量等是由汇编器,连接器等系统软件为你计算的。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
自己要写一条指令把DP  设置为所需要的页码,至于这个页码时多少,汇编和连接器会为你计算。例如:

     LDPK   N_KP  /* 将变量N_KP 的页码赋予DP,
               /*值是多少?现在我也不知道,让系统去计算吧。
     ZALS   N_KP  /* 有了页码,这里再用偏移量,就能访问N_KP了。

  自己试着写几小段代码,汇编,连接,生成运行文件后LOADER进目标机,再用 Disassem 看看结果,就全明白了。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
老兄:我用的是TMS320LF2407A,你说的 LDPK 和ZALS   两条指令我怎么没见过?
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

8
 
       我用的也是LF2407A,才可以和你讨论这些细节问题。这两条指令,见(比如说)清华大学出版社:\"TMS320LF/LC20系列DSP指令和开发工具\" p261,p273.
   DSP 的指令系统实在也是太折磨人了,同一件事可以用几条指令来做,同一条指令有不同写法。慢慢折腾吧。所以我以为编程尽可能用 C, 实在不得而已,个别地方才用汇编。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

9
 
是啊,编个switch得比较、跳转n次
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

10
 
对了,老兄,我贴的附件里的程序,在每次对变量操作都要找到它的数据页的(LDP)
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

11
 

TMS320LF/LC20系列DSP指令和开发工具

      LDPK 指令,可以包含到增强型指令 LDP 中,ZALS 可以包含到增强型指令 LACC 中,这些参见 TI 公司文档   SPRU 018D TMS320C Assemble Language Tools Users Guide  p5-5 到 p5-33.。
     清华出版社的这本书, ISBN 7-302-09026-2, 2005年1月第一版,其中第六章  指令集总结,就是TI公司上述文档 第五章的译文。
  其实可以自己写一段代码:
     .bss    N_KP,1
        .text
  LDPK   N_KP
  ZALS   N_KP
         .end
  汇编一下。让CCS  来识别。
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

12
 
     幻影的问题我刚才在开发板上做了,下面两种写法等效,都能得到所期望的结果:
                   .bss        N_P,1,1
        .text
        LDP        #N_P
        LACL        N_P
        ;
        LDPK        N_P
        ZALS        N_P
        .end
但是却不能写:
            LDP            N_P
       这样写,系统就从当前页的偏移量为 N_P 的地方取出数值来,当作新页码放到DP.风马牛不相及,全乱套了。
    说了半天,就一句话:页码,汇编和连接器会为你计算的,编程的人用不着手工计算。当然指令格式不能写错。
    大碗茶兄的问题是什么呀?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

13
 
to mlwang_km:感谢啊!
1.你的意思是下边的程序就可以将变量N_P值读入累加器?
      .bss        N_P,1,1
        .text
        LDP        #N_P
        LACL        N_P

那样的话可以不用人为计算N_P的数据页。
2.还有LDP       #WDCR>>7
         SPLK      #68H, WDCR
这也是有人用过的,也是对的,好像变量只需LDP  #变量;而寄存器则LDP #寄存器>>7;是不是啊?

3.再有我的附件里有
SPLK      #I_KP,I_KP
这样的语句,请问这样的附值是什么意思?I_KP中得到什么值?

谢谢
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

14
 
1,2 都没问题.但是为何 #WDCR >>7 而 #D_P 却不能右移?我想是二者的定义方式不同。
  3。看起来很奇怪,莫非是将一个变量(数据存储区的一个字)的地址存入它自身?从上下文看这样有意义吗?实在弄不懂只好动用 DEBUG 了。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

15
 
DEBUG 的结果确实是:把一个变量的地址存入它自身。这好像有点莫名其妙,不知想达到什么目的。
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

16
 
#8000H,溢出了吧?最大的正数是7FFFh。我想这与符号扩展之类问题有关,没仔细推敲过。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

17
 
高手:定义完下边的变量,那么LDP  # N_KP和LDP  # N_KI、LDP  # N_KC是不是完成相同的操作?
               .bss N_KP,1               ;速度调节比例系数
         .bss N_KI,1                ;速度调节积分系数
         .bss N_KC,1               ;速度调节积分饱和修正系数
         .bss I_KP,1                ;电流调节比例系数
         .bss I_KI,1                ;电流调节积分系数
         .bss I_KC,1                ;电流调节积分饱和修正系数
         .bss I_REF,1               ;电流参考值
         .bss N_REF,1               ;速度参考值
         .bss DIRECTION,1          ;速度方向标志
         .bss STACK,6              ;软堆栈初始地址
         .bss I_EK,1                ;电流偏差
         .bss I_RK,1                ;电流第K次积分调节累计
         .bss I_U,1                 ;电流调节输出
         .bss I_ELPI,1              ;电流极限偏差
         .bss TMP,1                ;临时变量
         .bss ENCODEROLD,1       ;前一次编码器读数
         .bss ENCINCR,1            ;编码增量
         .bss SPEEDTMP,1           ;编码脉冲累计
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

18
 
   我觉得只要这些变量都在同一个页面,那几条指令执行结果都相同。定义时注意一点,是可以保证它们在同一页的。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表