打印

一个c程序真的是从0地址开始执行的吗?

[复制链接]
1968|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
780653337378|  楼主 | 2011-11-19 11:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问一个比较弱智的问题,编写一个c程序,编译链接后,会将初始化数据定位在ram中,但是程序烧写的时候只能烧写在rom中,ram中的数据掉电丢失,问一下这样不就会矛盾吗,程序是如何初始化的,是在编译链接初始化的,还是在上电之后、程序运行之前初始化的,一个c程序真的是从0地址开始执行的吗?

相关帖子

沙发
airwill| | 2011-11-19 15:47 | 只看该作者
一个c程序真的是从0地址开始执行的吗? 不见得.
虽然编译器会确定这个地址, 但其实这不是编译器决定的, 而是处理器决定的.
简单地说: 处理器复位后, pc 指针指向哪里, 编译器会把复位向量定在哪里.

使用特权

评论回复
板凳
lishutong| | 2011-11-19 21:44 | 只看该作者
Cortex-m3就不是从0地址处开始执行的,只不过在0地址起始处存储了堆栈地址和第一条指令的地址。
RAM中的数据是由程序初始化的,原始的非0数据存储在ROM中,程序将他复制到RAM,然后初始化为0的数据由由程序进行填充。

使用特权

评论回复
地板
ycz9999| | 2011-11-20 13:21 | 只看该作者
MIPS架构的也不是从0开始运行的

使用特权

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

本版积分规则

0

主题

17

帖子

1

粉丝