热度 26
2016-6-24 14:43
1503 次阅读|
0 个评论
1.编译后结果 Error : 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 : Undefined symbol:'FFh' MOV.W #0FF R4 Error : 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 : Undefined symbol:'WDTCTL' 。其中P2DIR/WDTCTL都是定义在头文件.h中的符号 5.IAR的英文分号和中文分号长得差不多,否则会报错。并且不能像Keil用鼠标一选中就能看出英文符号还是中文符号,在iar中,选中中英文时,反应一样。 6.Warning : 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 : 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有关