共6条
1/1 1 跳转至页
关于ARM程序运行的问题
本人是菜鸟,现在正在学习三星的44B0X,以后flash的速度较慢,一般商用的程序都会在ram中运行,ARM复位后肯定是从0地址开始执行代码,所以0地址应该是flash,启动初始化应该在flash中执行,之后将应用程序拷贝到ram中,然后到ram中执行,请问各位网友,这样的程序结构:启动代码在flash中,运行代码在ram中,如何进行编译设置?如何烧写flash呢?
或者是不是分开写2个程序来实现,一个是启动时用,负责启动初始化等工作,编译时直接指定在flash区;另一个是应用程序部分,编译时指定在ram区。不过这样中断就比较麻烦了,也不知对不对?
或者大家有更好的程序结构的设计吗?
本人很迷惑,还请大家多多指教!
或者是不是分开写2个程序来实现,一个是启动时用,负责启动初始化等工作,编译时直接指定在flash区;另一个是应用程序部分,编译时指定在ram区。不过这样中断就比较麻烦了,也不知对不对?
或者大家有更好的程序结构的设计吗?
本人很迷惑,还请大家多多指教!
关键词: 关于 程序 行的 问题
可以这样的理解。链接得到的地址必然是运行的地址execute address,而加载是flash的地址。ARM reset的时候从0x0000开始执行,一般ARM都有寄存器对flash和ram进行映射的机制。也就是说通过改变某个寄存器,某些地址例如0x0000代表是flash,地址0x0800代表是ram。那么当程序在flash运行到一定地址你可以改变改寄存器的值,从而再使得0x0000代表是RAM,地址0x0800代表是flash。好这样的话程序马上就进入ram中执行。当然在此之前你最好将中断向量表拷贝到地址0x0800上,这样当执行remap的时候,中断向量表就在ram中。不知道解释可对?
最好先理解MEMROY MAP,另外在了解程序结构:运行地址,装载地址等概念。
不同的芯片有差别,但基本的思路是:板子上电,程序从FLASH里面开始执行,FLASH里的程序完成初始化,同时把程序拷贝到RAM/SDRAM里面去,如果支持REMAP,完成REMAP,同时跳转到RAM/SDRAM里去执行。
LZ说的说是一种方法,把程序分成2个部分来实现。处理好中断向量表就可以了。具体怎么实现,需要结合具体的芯片。44B0我不熟悉,但好像44B0支持一种特殊的中断处理方式,具体的请看手册。
powl说的基本上是正确的。
http://bbs.eepw.com.cn/dispbbs.asp?boardID=20&ID=27980&page=1
可以看看上面的链接的文章,应该有一定的参考作用。
共6条
1/1 1 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| OK1126B-S开发板下以导航按键控制云台/机械臂姿态调整被打赏¥29元 | |
| 【树莓派5】便携热成像仪被打赏¥36元 | |
| 【树莓派5】环境监测仪被打赏¥35元 | |
| OK1126B-S开发板下多时段语音提示型电子时钟被打赏¥27元 | |
| OK1126B-S开发板下函数构建及步进电机驱动控制被打赏¥25元 | |
| 【S32K3XX】LPI2C 参数配置说明被打赏¥20元 | |
| OK1126B-S开发板的脚本编程及应用设计被打赏¥27元 | |
| 5v升压8.4v两节锂电池充电芯片,针对同步和异步的IC测试被打赏¥35元 | |
| 【S32K3XX】S32DS LPI2C 配置失败问题解决被打赏¥22元 | |
| 【S32K3XX】FLASH 的 DID 保护机制被打赏¥19元 | |
我要赚赏金
