问题如下:
小弟在ccs的c541 device simulator环境下编了一个串口输出的小程序,编译没报错,但是run起来功能没实现,单步调的时候发现:用*st1=0x0000;的语句赋值给st1时,该寄存器的INTM(全局中断使能)位没有变,依然为复位时的1,看了一下书,书上说该位不能用存储器写的方式设置,于是小弟程序改为嵌入汇编语句:
asm(“RSBX INTM”);让INTM清0以使能全局中断
结果系统编译报错:
-------------------------dsptestprogram.pjt - Debug-------------------------
[dsptestprogram.c] "C:CCStudio_v3.1C5400cgtoolsbincl500" -g -fr"C:/CCStudio_v3.1/MyProjects/dsptestprogram/Debug" -d"_DEBUG" -@"Debug.lkf" "dsptestprogram.c"
"C:DOCUME~1haoyunLOCALS~1TempTI33610", ERROR!at line 165: [E0002]
Invalid mnemonic specification<————错误提示
RSBX INTM
1 Assembly Error, No Assembly Warnings
Errors in Source - Assembler Aborted
>> Compilation failure
[vectors.asm] "C:CCStudio_v3.1C5400cgtoolsbincl500" -g -fr"C:/CCStudio_v3.1/MyProjects/dsptestprogram/Debug" -d"_DEBUG" -@"Debug.lkf" "vectors.asm"
Build Complete,
1 Errors, 0 Warnings, 0 Remarks.
有没有大侠知道是怎么回事吗??小弟实在菜得很~~
ps:小弟在定义芯片寄存器的头文件里只定义了几个程序要用到的寄存器,程序中也只是对要用到的寄存器进行了初始化
解答如下:
问题解决了,在嵌入的汇编语句里的引号与汇编语句之间要存在空格!!!
例如 asm("RSBX INTM") 不行,而asm(" RSBX INTM ")是可以的,这个错误对于菜鸟级的小弟而言,查得好苦啊