共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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
| TCS3472S传感器及其色彩检测被打赏¥19元 | |
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |
| AG32VH407下光照强度传感器BH1750及其检测被打赏¥22元 | |
| AT32VH407下使用温湿度传感器DHT22进行检测被打赏¥20元 | |
| DIY一个婴儿澡盆温度计被打赏¥34元 | |
| 【FreeRtos】FreeRtos+MPU region 配置规则被打赏¥23元 | |
| 【分享开发笔记,赚取电动螺丝刀】三分钟快速上手驱动墨水屏(ArduinoIDE)被打赏¥28元 | |
我要赚赏金
