共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 跳转至页
回复
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |
我要赚赏金打赏帖 |
|
|---|---|
| Chaos-nano:专为低资源单片机设计的轻量级协作式异步操作系统(ATMEGA328P轻量级操作系统)—— 详细介绍被打赏¥16元 | |
| FPGA配置被打赏¥10元 | |
| Chaos-nano协作式异步操作系统:赋能MicrochipAVR8位单片机的革新之路被打赏¥15元 | |
| 基于esp32开发时串口工具的注意点被打赏¥24元 | |
| 基于FireBeetle2ESP32-C5开发板的舵机控制被打赏¥20元 | |
| 【分享开发笔记,赚取电动螺丝刀】MAX78000开发板制作的电子相册被打赏¥32元 | |
| 基于FireBeetle2ESP32-C5开发板的超声波测距及显示被打赏¥21元 | |
| FireBeetle2ESP32-C5上RTC电子时钟的实现被打赏¥25元 | |
| 【分享开发笔记,赚取电动螺丝刀】MAX78000开发板读取SD卡被打赏¥23元 | |
| 【S32K3XX】Standby RAM 重启后数据异常问题调查被打赏¥38元 | |
我要赚赏金
