单片机程序烧入rom之后怎样执行

单片机程序编译后的.hex文件,烧入rom之后,程序怎样执行起来的?1、hex文件是包含了代码、数据吧?并由编译器(还是链接器)统一分配rom地址?2、程序中的全局变量、... 单片机程序编译后的.hex文件,烧入rom之后,程序怎样执行起来的?

1、hex文件是包含了代码、数据吧?并由编译器(还是链接器)统一分配rom地址?
2、程序中的全局变量、常量、局部变量等数据,是否要载入到ram里去并分配地址?是怎么载入ram的,由谁?何时载入?
3、堆栈如何分配?
4、代码始终是从rom的0x0000地址开始依次执行吗?我看到STC的单片机说中断向量表是存放在rom的0x0003开始,每8个bytes分配给一个中断源做ISR空间,那么程序顺序执行到0x0003这一段地址怎么办?
展开
 我来答
德昂当
2015-02-12 · TA获得超过2842个赞
知道大有可为答主
回答量:1074
采纳率:100%
帮助的人:734万
展开全部
1,HEX文件包含了代码数据。是由链接器统一分配ROM地址。
2. 程序中的变量,也是在编译连接时,分配了RAM地址。不存在载入的问题,程序指令对变量的操作,就是对RAM地址的操作,地址值存在在指令中。
3. 堆栈在程序初始化时设置堆栈指针。Keil C 会自动设置好。
4. 一般的51单片机代码是从 0000开始执行,这是它的复位地址。也有别的型号的单片机并不一定从0开始执行。程序从0开始执行,但它执行的第一句往往是一个跳转指令(这个Keil C也是自动写好的),跳到另一块地址去执行,而不会顺序执行到 中断的地址的。
你如果是用汇编写程序,这些都是要你自己去分配的,用C写程序,由编译器来完成这些底层操作。
追问
程序中的变量,也是在编译连接时,分配了RAM地址。——链接器还会分配变量的ram地址?
追答
当然,每个变量名代表的就是一个地址。自然要为它分配地址。
简单如 a=5;
实际指令是 把5送入分配给 a 的地址里。MOV 34H,#5 这是汇编指令(比方分给 a 的地址是 34H)。
不知道a 的地址,这条指令就没法运行,应该说没法编译出来。
lycdl
高粉答主

2015-02-12 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4709万
展开全部
用keilc写程序,上述问题都不用考虑,全由keilc编译时自己处理了,只要按C语言的标准和要求写程序就行。。至于中断向量,也是根据interrupt的定义来自动处理的。
STC单片机,烧入程序后,重新上电就开始执行程序了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式