小弟是ARM的新手。。按照书上的例子写了几个例子,但都出现一样的错误。
错误描述:
make通过后运行,运行完自己写的程序后出现错误提示:未定义的指令.如下:
Processor ARM7TDMI raised an exception.
Cause: Undefined instruction
这个实例项目只包含两个文件:一个是汇编用于初始化,一个是C语言。。
编译器是使用ADS1.2的,PC没接任何外部设备
汇编文件的源码:
IMPORT |Image$$RO$$Limit|
IMPORT |Image$$RW$$Base|
IMPORT |Image$$ZI$$Base|
IMPORT |Image$$ZI$$Limit|
IMPORT Main
AREA Start,CODE,READONLY
ENTRY
CODE32
Reset LDR SP,=0x40003f00
LDR R0,=|Image$$RO$$Limit|
LDR R1,=|Image$$RW$$Base|
LDR R3,=|Image$$ZI$$Base|
CMP R0,R1
BEQ LOOP1
LOOP0 CMP R1,R3
LDRCC R2,[R0],#4
STRCC R2,[R1],#4
BCC LOOP0
LOOP1 LDR R1,=|Image$$ZI$$Limit|
MOV R2,#0
LOOP2 CMP R3,R1
STRCC R2,[R3],#4
BCC LOOP2
B Main
MOV R2,#0
END
C文件的源码:
#define uint8 unsigned char
#define uint32 unsigned int
#define dd unsigned int
#define N 100
uint32 sum;
void Main(void)
{
uint32 i;dd da;
sum=0;
for(i=0;i <=N;i++)
{
sum+=i;
}
//while(1);
//da=1;
return;
}
main() 不应当返回
它应该是一个循环 void Main(void) { uint32 i;dd
da; sum=0; for(i=0;i <=N;i++) { sum+=i; } while(1);
/* 停在这里好了 */
//da=1; //return; /* 不应跑到这里 */ }
谢谢Great_Bug
我刚学ARM,是新手。。我一直都写计算机软件的,所以不太了解其中的原由
不知能否给小弟解释一下为什么要死循环呢??还是没有死循环出现的那个错误怎么解决呢???
呵呵,楼主看来是从软件转来的,你原来设计软件都是开发工具给你做了默认的循环程序,比如vc的winmain,如果没有循环,程序结束后,程序计数器只会接着往下运行,程序之外的是无定义指令,自然会出错。
通常,在嵌入式产品中,你的程序总是做一个或多个循环,或者在等待用户的输入, 或者在等待和处理传感器或通信模块的数据,等等,用户关闭了电源才停止运行,
这和在Windows下写程序是大不相同的。 |