程序无法进入主函数
硬件平台:FL2440PC机:Windows xp
开发环境:ADS1.2编译器,AXD调试器,H-JTAG,DNW终端
连接线:Wiggler JTAG调试线,RS232串口,USB下载线
目前在进行裸机实验,
1、先编写一个汇编程序init.s,如下
AREA |DATA|,CODE,READONLY
ENTRY
ldr r13, =0x1000
IMPORT ledmain
b ledmain
END
2、然后写一个比较简单的点亮led的c语言程序ledmain.c
#define GPBCON (*(volatile unsigned long *) 0x56000010)
#define GPBDAT (*(volatile unsigned long *) 0x56000014)
int ledmain(void)//主函数
{
GPBCON = (1<<(5*2));//将led0配置为输出
GPBDAT &= ~(1<<5);//将GPBDAT第5位设置为低电平,即点亮led
return 0;
}
3、然后通过ads1.2、axd进行编译调试成功,并且fl2440的led0被点亮
问题描述:当我在ledmain.c程序中加入一个延迟子函数delay,但是程序不能直接进入主函数中
自己解决方法:
1、看ads1.2编译器的配置,没有问题,是按照资料中的配置要求进行配置,但是编译时一直出现一个warning,如下:
warning : L6319W: Ignoring -first command. Cannot find section init.o(init)
但是前面只有一个int ledmain(void)函数时,程序正确运行,led0被成功点亮
注:ads1.2的DebugRel Setting中的ARM Linker,Layout,Object/Symbol加入init.o,Section中加入init
2、axd的目标芯片设置为s3c2440中芯片ARM920T,相关配置应该也没有问题
3、我把子函数去掉,将相关延迟内容放在ledmain主函数中,led0成功被点亮
两个问题:
1、那个warning:L6319W如何解决?
2、增加子函数后,程序无法进入主函数,如何解决?
希望高手们,能帮我解答一下。。。。谢谢 自己解决了,,,,,
解决方法:将ads1.2的DebugRel Setting中的ARM Linker,Layout,Object/Symbol加入的init.o和Section中加入的init去除,,,,,不加任何东西(或者将section中的init去除),,,,然后运行无warning,,,,开发板上的流水灯也跑起来了,,,,,
原因:应该就是因为那个warning造成的,导致程序无法从程序入口开始,init.s无法启动跳转ledmain的作用,然后直接从c语言中开始运行,,,,
问题:虽然问题是解决了,但是没有加延迟子函数delay之前又为什么可以呢?开始也一直是有warning存在的,然后我用同样的方法将前面做的实验试了一遍,都ok的,,,,,,
那为什么实验手册中还有网上,要我们在section中添加init(Init)呢?不添这个反而是对的,想想无果,,,,希望高手们给以解答!!!谢谢
页:
[1]