[ARM入门] ARM的C文件里主函数不能调用其他函数

[复制链接]
2313|10
 楼主| 枢机主教 发表于 2013-12-19 23:40 | 显示全部楼层 |阅读模式
s3c6410的一个裸机程序(OK6410的板子),两个源文件,一个汇编写的启动文件,一个C语言写的文件,汇编初始化完开发板后调用C文件里的主函数。本来只是点个灯,这是没问题的,可是我在主函数外写了一个延时函数,并且在主函数内调用延时函数想来实现灯的闪烁的时候,编译都过了,已下载到了开发板里,就是启动后没效果,如果把延时函数的函数体直接加到主函数内部就没有问题,请问这是为什么?
rocdove 发表于 2013-12-20 00:46 | 显示全部楼层
函数栈有吗?
dengxingling8 发表于 2013-12-20 09:06 | 显示全部楼层
楼主你好,我现在也学习到那里了,我连灯都点不亮,可以把你点亮灯的程序和makefile发给我么?我发现我可以调用其他函数,但是,函数里面设计到while循环时候就使用不了了,可以加我qq么?求指点和讨论476089797
 楼主| 枢机主教 发表于 2013-12-20 13:02 | 显示全部楼层
rocdove 发表于 2013-12-20 00:46
函数栈有吗?

嗯,我在汇编源文件里面初始化sp为0x5fffffff,是板子上SDRAM的最高地址,然后将程序下载到0x50000000这个地址,这是SDRAM的起始地址(这个应该没有问题吧),然后用Uboot的里面的一个功能执行0x50000000这个地址的程序。这是怎么回事?
 楼主| 枢机主教 发表于 2013-12-20 13:04 | 显示全部楼层
dengxingling8 发表于 2013-12-20 09:06
楼主你好,我现在也学习到那里了,我连灯都点不亮,可以把你点亮灯的程序和makefile发给我么?我发现我可以 ...

嗯,我的QQ是1397771967。最近在忙期末考试。所以没敢多玩这个。
xinzha 发表于 2013-12-20 14:01 | 显示全部楼层
sp为0x5fffffff对于arm来说是个必死的节奏啊,你设成0x5ffffffc试试,另外你得保证你有256M以上的内存才行。
dengxingling8 发表于 2013-12-20 15:21 | 显示全部楼层
xinzha 发表于 2013-12-20 14:01
sp为0x5fffffff对于arm来说是个必死的节奏啊,你设成0x5ffffffc试试,另外你得保证你有256M以上的内存才行 ...

是不是 说还要留三个字的什么东西啊
xinzha 发表于 2013-12-20 15:57 | 显示全部楼层
不是保留三个字,而是地址不对齐,如果没有使能cp15里面的地址不对齐的支持,函数调用时的出栈入栈要么是不准确的,要么会引起死机。
 楼主| 枢机主教 发表于 2013-12-20 19:07 | 显示全部楼层
本帖最后由 枢机主教 于 2013-12-20 19:13 编辑
xinzha 发表于 2013-12-20 14:01
sp为0x5fffffff对于arm来说是个必死的节奏啊,你设成0x5ffffffc试试,另外你得保证你有256M以上的内存才行 ...

我去试一下。这是为什么呢,板子的内存就是256M。哦,我好像明白了,ARM指令有4字节对齐,是这样吗?
rocdove 发表于 2013-12-20 22:19 | 显示全部楼层
xinzha 发表于 2013-12-20 15:57
不是保留三个字,而是地址不对齐,如果没有使能cp15里面的地址不对齐的支持,函数调用时的出栈入栈要么是不 ...

有道理
 楼主| 枢机主教 发表于 2013-12-20 23:00 | 显示全部楼层
xinzha 发表于 2013-12-20 14:01
sp为0x5fffffff对于arm来说是个必死的节奏啊,你设成0x5ffffffc试试,另外你得保证你有256M以上的内存才行 ...

非常感谢,问题解决了,的确是栈地址设置有问题。太感谢了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

55

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部