打印
[ARM入门]

ARM的C文件里主函数不能调用其他函数

[复制链接]
1949|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这个地址的程序。这是怎么回事?

使用特权

评论回复
5
枢机主教|  楼主 | 2013-12-20 13:04 | 只看该作者
dengxingling8 发表于 2013-12-20 09:06
楼主你好,我现在也学习到那里了,我连灯都点不亮,可以把你点亮灯的程序和makefile发给我么?我发现我可以 ...

嗯,我的QQ是1397771967。最近在忙期末考试。所以没敢多玩这个。

使用特权

评论回复
6
xinzha| | 2013-12-20 14:01 | 只看该作者
sp为0x5fffffff对于arm来说是个必死的节奏啊,你设成0x5ffffffc试试,另外你得保证你有256M以上的内存才行。

使用特权

评论回复
7
dengxingling8| | 2013-12-20 15:21 | 只看该作者
xinzha 发表于 2013-12-20 14:01
sp为0x5fffffff对于arm来说是个必死的节奏啊,你设成0x5ffffffc试试,另外你得保证你有256M以上的内存才行 ...

是不是 说还要留三个字的什么东西啊

使用特权

评论回复
8
xinzha| | 2013-12-20 15:57 | 只看该作者
不是保留三个字,而是地址不对齐,如果没有使能cp15里面的地址不对齐的支持,函数调用时的出栈入栈要么是不准确的,要么会引起死机。

使用特权

评论回复
9
枢机主教|  楼主 | 2013-12-20 19:07 | 只看该作者
本帖最后由 枢机主教 于 2013-12-20 19:13 编辑
xinzha 发表于 2013-12-20 14:01
sp为0x5fffffff对于arm来说是个必死的节奏啊,你设成0x5ffffffc试试,另外你得保证你有256M以上的内存才行 ...

我去试一下。这是为什么呢,板子的内存就是256M。哦,我好像明白了,ARM指令有4字节对齐,是这样吗?

使用特权

评论回复
10
rocdove| | 2013-12-20 22:19 | 只看该作者
xinzha 发表于 2013-12-20 15:57
不是保留三个字,而是地址不对齐,如果没有使能cp15里面的地址不对齐的支持,函数调用时的出栈入栈要么是不 ...

有道理

使用特权

评论回复
11
枢机主教|  楼主 | 2013-12-20 23:00 | 只看该作者
xinzha 发表于 2013-12-20 14:01
sp为0x5fffffff对于arm来说是个必死的节奏啊,你设成0x5ffffffc试试,另外你得保证你有256M以上的内存才行 ...

非常感谢,问题解决了,的确是栈地址设置有问题。太感谢了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

55

帖子

4

粉丝