打印

arm裸机程序 局部变量的地址是如何定义的?

[复制链接]
1815|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jankalon|  楼主 | 2013-1-2 19:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我最近在看mini2440test源码,发现,播放音乐的那段程序,是先将wav文件直接存储在内存某一个已经定义好的地址(使用define),然后读取这个地址的内存,然后进行播放。
这个有一个问题,如果存储的地址,存放着其他函数使用的内容的时候(例如函数的静态变量,局部变量等),这样子会互相冲突的时候怎么办?
由此,我在思考,arm的裸机程序,那些局部变量在开始申请的时候,栈的地址是如何定义的?
小弟刚学arm,很多不懂,请大家多多指教
沙发
xinzha| | 2013-1-3 14:43 | 只看该作者
静态变量由编译器指定在bss段,局部变量没有常驻空间,在栈中甚至直接在寄存器中,用完抛弃。

使用特权

评论回复
板凳
dongzai1| | 2013-1-3 23:43 | 只看该作者
这东西搞不清楚啊

使用特权

评论回复
地板
jlass| | 2013-1-4 12:58 | 只看该作者
编译器会把你写的C语言翻译成汇编的,此类问题属于汇编的范畴,等你了解汇编语言之后自然就懂了。

使用特权

评论回复
5
江陵龙少| | 2013-1-4 19:29 | 只看该作者
xinzha 发表于 2013-1-3 14:43
静态变量由编译器指定在bss段,局部变量没有常驻空间,在栈中甚至直接在寄存器中,用完抛弃。 ...

说得好,学习了,那什么叫bss段?

使用特权

评论回复
6
ymind| | 2013-1-4 19:52 | 只看该作者
bss是未初始化数据段。
裸机程序的话,建议先学习link script,这样栈底指针的初始化就有的放矢了。

使用特权

评论回复
7
明月小厨| | 2013-1-5 02:48 | 只看该作者
你问的问题不简单;局部变量放在哪呢?有可能是堆栈;
也有可能不是,我也搞不清楚;我前些天还在想,是不是可能申请一块内存用来存放大数组(如果定义为数组的话仿真的时候速度很慢,很烦),如果是这样存的地方肯定不是堆栈区;

使用特权

评论回复
8
woshic23| | 2013-1-8 17:10 | 只看该作者
问题描述不够详细,ARM的局部变量一般是放在栈里

使用特权

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

本版积分规则

0

主题

0

帖子

1

粉丝