共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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 |