1.编译后结果 Error[67]: Public 'Binary2BCD' did not appear in label field
解决方法,是把Binary2BCD不要放到NAME这一行,个人理解是因为在使用NAME后边的标号时,此标号还没有创建、没有被记录在案
2.在IAR的汇编中立即数的表示方式为 MOV.W #0XFF R4, 也可以不用0x, 但是后尾必须加h,当最高位是A-F时,前边要加0.以下三种方式均正确
MOV.W #0xFF, R4
MOV.W #0FFh, R4
MOV.W #99h, R4
以下两种方式均回在编译时出错
MOV.W #FFh , R4
Error[50]: Undefined symbol:'FFh'
MOV.W #0FF R4
Error[6]: Bad constant
以下这种方式,虽然编译不报错,但是编译器会认为是十进制
MOV.W #99, R4
不加#会被认为是的存储器地址,被认作间接寻址,认为是地址99内容是地址X,即PC=X(PC)
MOV.W 99, R4
0x和h不能同时使用,否则会编译出错
3.IAR仿真汇编窗口初识
第一列001268,表示存储器地址
第二列CF02,表示操作指令,和操作码、源/目的操作数寻址方式及形式有关
第三列0080,表示源操作数
第四列0057,表示目的操作数
第五列bic.b #0x80, &BCSCTL1,表示汇编指令,
其中BCSCTL1是在.h文件的宏定义。
#define BCSCTL1 (0x0057u)
4.当同一个.s43程序源文价下有两个以上用NAME ENDMOD模块时,只有第一个模块识别引用#include "msp430.h" 中的内容,当第二个模块引用头文件的内容时,会报不识别符号的错误。
编译信息Error[50]: Undefined symbol:'WDTCTL' 。其中P2DIR/WDTCTL都是定义在头文件.h中的符号
5.IAR的英文分号和中文分号长得差不多,否则会报错。并且不能像Keil用鼠标一选中就能看出英文符号还是中文符号,在iar中,选中中英文时,反应一样。
6.Warning[w29]: Parts of segment DATA16_I are initialized (as in module Timer), even though it is of type DATA (and thus not promable) .代码如下
原因是在DATA(I)中也就是RAM中定义了const常量,DC16表示定义16位的const变量。
DATA(I),DATA(Z),DATA(N),都表示在RAM中定义变量,DATA(C)表示在在Flash中定义常数变量。
至此,这个warning可以有两种改正方法。一是把DC16改成DS16,二是把DATA换成DATA(C)。
前者表示在RAM中定义一个变量,后者表示在FLASH中定义一个常量
7.Fatal Error[e72]: Segment DATA_N must be defined in a segment definition option (-Z, -b or -P)
原因是RSEG后没有找到合适的在.xcl中定义的符号,这个DATA_N没有在.xcl中定义,改正如下
8. 关于变址寻址,X(Rn), X是一个地址,既可以是一个整数2(Rn),也可以是一个标号LED_TABLE(Rn), 但是这个LED_TABLE表示的是此处的地址,而不是此处地址含有的内容。Rn是寄存器,并且Rn和X的位置不能互换。也就是说,X是一个固定值,Rn偏移量,偏移的step和操作指令B/W有关
文章评论(0条评论)
登录后参与讨论