关于ARM NORFLASH启动问题!!!

wfcdream 2012-10-21 12:19:51
我们都知道arm平台可以设置norflash启动,而由于norflsh本身的性能,cpu可以直接寻址,所以,norflash启动时,cpu可以直接片上运行,不需要拷贝代码,那么我现在有一个问题:

当嵌入式平台从NORFLASH直接启动时,也就是说它不需要拷贝代码到内存,直接norflash中运行,假设norflah启动代码中有数据,而代码本身在启动过程中会改变某些数据,是否每次启动后,norflash中数据就会产生改变呢?换句话说 就是nor启动过程中 是否cpu可以像在ram中运行那样直接写norflash?

打个比方,如果norflash启动代码中有一小段 数据段,而代码段在运行时可能改变数据段中数据,本身如果是nandflash启动,启动代码会拷贝到内存ram中运行,不管如何改变,最终下次启动还是重新需要从nand拷贝,所以数据不会有任何变化,但是如果从nor启动,那cpu是直接寻址norflash,片上直接运行,就是把norflash当ram来用,那改变了数据,岂不是下次启动就不能用了??

求高手指点!!

...全文
1127 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
greatriver007 2013-03-24
  • 打赏
  • 举报
回复
谢谢 我也有同样的困惑 学习了
ebdlive 2012-10-22
  • 打赏
  • 举报
回复
data段的数据一般是不会定向到norflash空间的,当然你说的这种情况也有,把数据存在norflash,写入的时候并不能向ram那样擦写,norflash也是需要块擦除后才能写入的,可以考虑保存配置文件啥的或是函数入口地址什么的,经常改变的数据就不要放在这了,毕竟norflash也是有擦除次数限制的
zhenghn2010 2012-10-22
  • 打赏
  • 举报
回复
你已经把问题想清楚了, nor flash可以像内存一样直接读出,但写是不能这样的,要通过命令擦除写入。
所以,你要把你的code和只读数据放入flash,要改变的只能放在ram里
falloutmx 2012-10-22
  • 打赏
  • 举报
回复
改变数据了为什么不能用?
woshi_ziyu 2012-10-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
程序一般默认分下面几个段,代码段(默认名称一般为.text或.code),只读数据段(默认名称一般.ro),有初始化值的读写数据段(默认名称一般.rw), 无初始化值的读写数据段(默认名称一般为.zi),还有堆栈段。当然你还可以定义自定义的段,自定义的段需指明是什么类型的段,是只读段,还是读写段。

代码段当然就是代码了,一般这个是只读的,因为如果可以允许随意修改代码段的机器代码,会造成无法预……
[/Quote]
讲的很详细 值得看一下
youzi722 2012-10-22
  • 打赏
  • 举报
回复
程序一般默认分下面几个段,代码段(默认名称一般为.text或.code),只读数据段(默认名称一般.ro),有初始化值的读写数据段(默认名称一般.rw), 无初始化值的读写数据段(默认名称一般为.zi),还有堆栈段。当然你还可以定义自定义的段,自定义的段需指明是什么类型的段,是只读段,还是读写段。

代码段当然就是代码了,一般这个是只读的,因为如果可以允许随意修改代码段的机器代码,会造成无法预知的后果,因此这个段可以映射在norflash中。

只读数据段一般是恒常量,恒常量么,当然是只读的,所以这个也可以映射在norflash中。

.rw段一般包括有初始化值的全局变量,这个由于是变量,当然不能映射在norflash中了。

.zi段一般包括不带初始化值的全局变量,这个也是变量,当然也不能映射在norflash中。

堆栈段同样是读写段,不能映射在norflash中。

上述各段的放置位置是由链接器链接时由链接脚本决定的,如果你没有设置自己的链接脚本,编译器会按默认的链接规则分布上述各段,如果你指定了链接脚本,会按你自己定义的链接脚本的链接顺序来链接为可执行程序。

一般当链接地址指向RAM中时,默认的链接顺序是这样的, 从低地址向高地址,首先是代码段,然后是只读段,然后是RW段和ZI段,再上面一般是堆,最上面是堆栈段,堆栈段是向下增长的。

如果链接地址设置在FLASH中时,默认的链接顺序一般是,代码段和只读段放在FLASH中,其他段放在RAM中。

如果自己定义链接脚本,虽然可以讲RW段和ZI段放在FLASH里编译过去,但程序写RW段和ZI段是不会成功的,因此程序执行也不会是正确的。

21,616

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧