在ads1.2里开发GPIO应用程序
Init.s如下IMPORT main
AREA Init,CODE,READONLY
ENTRY
LDR R0, =0x3FF0000
LDR R1, =0xe7ffff80
STR R1,
LDR SP, =0x3fe1000
BL main
B.
END
main.c如下:
#define IOPMOD (*(volatile unsigned *)0x03FF5000)
#define IOPDATA (*(volatile unsigned *)0x03FF5008)
void Delay(unsigned int);
int main(void)
{
unsigned long LED;
IOPMOD=0xEFFFFFFF;
IOPDATA=0x01;
for(; ;)
{ LED=IOPDATA;
LED=(LED<<1);
IOPDATA=LED;
Delay(10);
if(!(IOPDATA&0x0F))
IOPDATA=0x01;
}
return 0;
}
void Delay(unsigned int x)
{
unsigned int i,j,k;
for(i=0;i<x;i++)
for(j=0;j<0xff;j++)
for(k=0;k<0xff;k++);
}
我在ads1.2里单个文件compile没有错误,使用make 按钮就提示警告:
Image dose not have an entry point.(Not specified or not set due to multiple choses.),每个project都必须有Init.s文件吗?
另外,在CMD.exe里使用armcc,对应用程序的路径有什么要求吗?且使用命令方式编译连接要输很多命令,没有窗口方式来的简单,为什么还有很多人使用命令方式,命令方式有什么好处吗?谢谢!
上面这个程序是拷贝微芯力出的<<arm开发祥解>>第六章的程序。 ads1.2 里面 选择菜单 Edit -> DebugRel Setting -> Linker -> ARM Linker -> Options -> Image entry point, 这里可以设置 entry point , 可以是 symbol ,也可以是绝对地址,例如 0x8000
命令方式的好处在于具有一般通用性,如果你习惯了 linux 下基于 make 的开发,就会体会到基于命令方式的好处。 :P
页:
[1]