现在的位置: 首页 > 综合 > 正文

ADS调试问题集

2013年08月27日 ⁄ 综合 ⁄ 共 1532字 ⁄ 字号 评论关闭

继续coding...

    建立工程,编辑源文件,把文件加入工程,设置工程属性、编译与链接选项,make!

 

1、典型错误

 

 Error    : A1163E: Unknown opcode

解决方案:

         Error    : A1163E: Unknown opcode

         vector.s line 14

         14 00000020   Reset_Addr DCD Reset_Handler

认真检查了代码的编辑,确实没错。也对Reset_Addr DCD Reset_Handler这条伪操作语句前面的Tab符号 。可参见错误3

 

2、大小写错误

 

首先要先搞懂ADS的基本设置。ADS的armassembler/compiler/linker很重要。

看看这条代码:

    MCR        P15, 0, R1, C1, C0, 0

有错不?非常简单的写协处理器CP15寄存器1的指令,语法和拼写完全没错误!要是ADS对你报错了,你疯不?它还真报错了!

    Error   :A1151E: Bad register name symbol

    boot.s line 107

    还好我心理承受能力强,在我疯之前找出了这个用肉眼看不到的错误:将P15,C1,C0全部用小写字母表示就对了!

    MCR        p15, 0, R1, c1, c0, 0    ;correct now

   

3、汇编代码的TAB键与空格

 

  一些伪操作语句前面不要TAB,而又有一些伪操作(directive)前还必须要Tab符号或空格~!不信?

把AREA还有与之配套的END语句顶格写试试?!ADS跟你报错没商量~!EXPORT/IMPORT前面也一样必须有Tab符号或空格!

嵌入式汇编时常用的IMPORT。IMPORT,AREA,END等前面须空格;

 

4、注释

    

注释是以;开头,而不是@开头

 

5、标记

 

标记顶格写不要空格,且后面不要冒号(:)

 

例:

IMPORT main

 AREA Init,CODE,READONLY

 ENTRY

_start

            ldr     r0, =0x53000000    

            mov     r1, #0x0                    

            str   r1, [r0]             

           

            ldr     sp, =1024*4        

                                       

            bl      main               

halt_loop

            b       halt_loop;

           

 END

 

 

 

补充:

汇编语言和c语言之间的相互调用,分以下四中情况讨论:

1,在c语言中调用汇编的子程序fun1:在汇编文件中声明fun1可以供外部使用,即EXPORT fun1.在c语言文件中声明引用外部函数fun1即exttern fun1()可以像调用c函数一样方便地调用fun1。如果需要参数传递,则c语言的参数从左到右依次传给了r0,r1,r2,r3.如果超过四个参数,就要使用堆栈传递。

2,在汇编中调用c语言的子程序fun2:在汇编文件中声明fun2是从外部调用的文件,即IMPORT fun2 ,执行调用的语句是bl fun2 。如果有参数传递,按照1所说规则对应。13581929725

3,在c语言中引用汇编的变量a,在汇编文件中声明a可以供外部使用,即EXPORT a,在c文件中声明extern int a.

4,在汇编中引用c语言的变量b,在汇编文件中声明引用了变量b ,即IMPORT b.

 

抱歉!评论已关闭.