这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于ARM程序运行的问题

共6条 1/1 1 跳转至

关于ARM程序运行的问题

菜鸟
2006-07-28 07:30:44     打赏
本人是菜鸟,现在正在学习三星的44B0X,以后flash的速度较慢,一般商用的程序都会在ram中运行,ARM复位后肯定是从0地址开始执行代码,所以0地址应该是flash,启动初始化应该在flash中执行,之后将应用程序拷贝到ram中,然后到ram中执行,请问各位网友,这样的程序结构:启动代码在flash中,运行代码在ram中,如何进行编译设置?如何烧写flash呢?
或者是不是分开写2个程序来实现,一个是启动时用,负责启动初始化等工作,编译时直接指定在flash区;另一个是应用程序部分,编译时指定在ram区。不过这样中断就比较麻烦了,也不知对不对?
或者大家有更好的程序结构的设计吗?
本人很迷惑,还请大家多多指教!



关键词: 关于     程序     行的     问题    

菜鸟
2006-09-08 18:43:00     打赏
2楼

我也很迷惑!

期望得到高手的解答!!!


菜鸟
2006-09-09 03:39:00     打赏
3楼

可以这样的理解。链接得到的地址必然是运行的地址execute address,而加载是flash的地址。ARM reset的时候从0x0000开始执行,一般ARM都有寄存器对flash和ram进行映射的机制。也就是说通过改变某个寄存器,某些地址例如0x0000代表是flash,地址0x0800代表是ram。那么当程序在flash运行到一定地址你可以改变改寄存器的值,从而再使得0x0000代表是RAM,地址0x0800代表是flash。好这样的话程序马上就进入ram中执行。当然在此之前你最好将中断向量表拷贝到地址0x0800上,这样当执行remap的时候,中断向量表就在ram中。不知道解释可对?


菜鸟
2006-09-09 03:49:00     打赏
4楼

一般说来程序正在执行的地址是 pc -8,那么这样的话,当发生映射的时候。程序执行0x00X处指令,pc-4正在译码,pC在取指令。那么发生映射后,pc-4地址是0x00X那么就代表是RAM的地址。有一点我不是很清除,pc取的指令地址是怎样算?是否我们执行程序按照rom或者ram上的地址step by step的执行?也就是说指令前后次序在代码的次序和在bin image一样?


菜鸟
2006-09-09 05:24:00     打赏
5楼

最好先理解MEMROY MAP,另外在了解程序结构:运行地址,装载地址等概念。

不同的芯片有差别,但基本的思路是:板子上电,程序从FLASH里面开始执行,FLASH里的程序完成初始化,同时把程序拷贝到RAM/SDRAM里面去,如果支持REMAP,完成REMAP,同时跳转到RAM/SDRAM里去执行。

LZ说的说是一种方法,把程序分成2个部分来实现。处理好中断向量表就可以了。具体怎么实现,需要结合具体的芯片。44B0我不熟悉,但好像44B0支持一种特殊的中断处理方式,具体的请看手册。

powl说的基本上是正确的。


菜鸟
2006-09-09 05:26:00     打赏
6楼

http://bbs.eepw.com.cn/dispbbs.asp?boardID=20&ID=27980&page=1

可以看看上面的链接的文章,应该有一定的参考作用。


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]