论坛中摘取的,关于Nor flash一些问题点
2015-10-14 11:15
169 查看
程序一般默认分下面几个段,代码段(默认名称一般为.text或.code),只读数据段(默认名称一般.ro),有初始化值的读写数据段(默认名称一般.rw), 无初始化值的读写数据段(默认名称一般为.zi),还有堆栈段。当然你还可以定义自定义的段,自定义的段需指明是什么类型的段,是只读段,还是读写段。
代码段当然就是代码了,一般这个是只读的,因为如果可以允许随意修改代码段的机器代码,会造成无法预知的后果,因此这个段可以映射在norflash中。
只读数据段一般是恒常量,恒常量么,当然是只读的,所以这个也可以映射在norflash中。
.rw段一般包括有初始化值的全局变量,这个由于是变量,当然不能映射在norflash中了。
.zi段一般包括不带初始化值的全局变量,这个也是变量,当然也不能映射在norflash中。
堆栈段同样是读写段,不能映射在norflash中。
上述各段的放置位置是由链接器链接时由链接脚本决定的,如果你没有设置自己的链接脚本,编译器会按默认的链接规则分布上述各段,如果你指定了链接脚本,会按你自己定义的链接脚本的链接顺序来链接为可执行程序。
一般当链接地址指向RAM中时,默认的链接顺序是这样的, 从低地址向高地址,首先是代码段,然后是只读段,然后是RW段和ZI段,再上面一般是堆,最上面是堆栈段,堆栈段是向下增长的。
如果链接地址设置在FLASH中时,默认的链接顺序一般是,代码段和只读段放在FLASH中,其他段放在RAM中。
如果自己定义链接脚本,虽然可以讲RW段和ZI段放在FLASH里编译过去,但程序写RW段和ZI段是不会成功的,因此程序执行也不会是正确的。
代码段当然就是代码了,一般这个是只读的,因为如果可以允许随意修改代码段的机器代码,会造成无法预知的后果,因此这个段可以映射在norflash中。
只读数据段一般是恒常量,恒常量么,当然是只读的,所以这个也可以映射在norflash中。
.rw段一般包括有初始化值的全局变量,这个由于是变量,当然不能映射在norflash中了。
.zi段一般包括不带初始化值的全局变量,这个也是变量,当然也不能映射在norflash中。
堆栈段同样是读写段,不能映射在norflash中。
上述各段的放置位置是由链接器链接时由链接脚本决定的,如果你没有设置自己的链接脚本,编译器会按默认的链接规则分布上述各段,如果你指定了链接脚本,会按你自己定义的链接脚本的链接顺序来链接为可执行程序。
一般当链接地址指向RAM中时,默认的链接顺序是这样的, 从低地址向高地址,首先是代码段,然后是只读段,然后是RW段和ZI段,再上面一般是堆,最上面是堆栈段,堆栈段是向下增长的。
如果链接地址设置在FLASH中时,默认的链接顺序一般是,代码段和只读段放在FLASH中,其他段放在RAM中。
如果自己定义链接脚本,虽然可以讲RW段和ZI段放在FLASH里编译过去,但程序写RW段和ZI段是不会成功的,因此程序执行也不会是正确的。
相关文章推荐
- Citrix的ICA协议介绍与对比
- 容器vector 的用法
- 解决eclipse+tomcat7的中文乱码的一个方法
- LeakCanary:简单粗暴的内存泄漏检测工具
- 转-用Eclipse 开发Dynamic Web Project应用程序
- Java编程机试:获取某一字符串中(只要字母),每一个字母出现的次数输出格式为a(x)b(y)c(z).....m(n)
- PHP图像处理--不超过给定大小的等比例的缩放
- 需要解决的问题ionic nvbar 和 view的分离
- 【leetcode】73. Set Matrix Zeroes
- Linux入门(一):50个最常用的指令
- 事件总结
- Android实现跑马灯效果的方法
- iOS中读取照片库
- outline轮廓线在不同CSS样式下的表现
- js追加元素,以及元素位置
- Linux 下网络性能优化方法简析
- Web性能优化系列
- jmeter测试TCP服务器/模拟发送TCP请求 设置16进制发送(转)
- 使用intellij的svn时提示出错: Can't use Subversion command line client: svn.Errors found while svn working co
- 制作iOS推送-Step by step