读书人

ADS调试有关问题集

发布时间: 2012-11-23 00:03:43 作者: rapoo

ADS调试问题集

继续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.

读书人网 >软件开发

热点推荐