嵌入式爱好者

查看: 4466|回复: 1

程序无法进入主函数

[复制链接]

4

主题

10

帖子

21

积分

扫一扫,手机访问本帖
发表于 2012-8-3 21:06:58 | 显示全部楼层 |阅读模式
硬件平台:FL2440
PC机: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、增加子函数后,程序无法进入主函数,如何解决?


希望高手们,能帮我解答一下。。。。谢谢
回复

使用道具 举报

4

主题

10

帖子

21

积分

 楼主| 发表于 2012-8-4 15:13:09 | 显示全部楼层
自己解决了,,,,,
解决方法:将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)呢?不添这个反而是对的,想想无果,,,,希望高手们给以解答!!!谢谢
点评回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-12-26 02:20

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表