ARM处理器系统初始化编程注意事项
来源:互联网 发布:网络工作领导小组会 编辑:程序博客网 时间:2024/06/08 11:30
ARM处理器系统初始化编程注意事项
本文摘自王洪辉老师的《嵌入式系统Linux内核开发实战指南(ARM平台)》一书
在上述系统初始化过程中有以下两点需要注意,如果处理不好就可能出现程序跑飞的情况。
1)如果需要将程序从flash搬移到DRAM中运行
在现代嵌入式系统中,由于DRAM的速度比flash的速度快很多,所以除了极少数对性能要求不高但对成本要求很高的系统把程序放在flash中并一直在flash中运行外,大部分嵌入式系统都是将程序从flash芯片搬到DRAM芯片中运行,这样就会存在一个问题,因为我们编译链接程序都是将程序链接到程序最后运行的场所DRAM中的地址上,但是系统启动时只能从flash中读取指令,所以从系统启动读取的第一条指令到进入到DRAM运行前的程序代码是与地址无关的,如果要跳转到某个标号处运行,必须是基于pc的,不能是绝对跳转指令,因为此时程序存放的位置与其所链接到的位置不同,如果使用跳转指令,程序将跑飞。
2)如果要求程序在MMU使能状态下运行,即系统工作在虚拟地址模式
MMU使得系统能够更好地管理内存,因为MMU可以将同一段物理内存映射到多段虚拟地址空间上,而且可以将物理上不连续的内存映射到连续的虚拟内存空间(减少内存碎片),另外MMU还可以控制虚拟内存区段的缓冲特性和访问权限,所以MMU可以提高内存的使用效率,使程序仿佛能够使用比实际物理内存容量多得多的内存空间,提高系统性能,同时也增加了系统的安全性,所以在带有MMU功能的处理器系统中,一般都应该使能MMU,充分利用其功能。这样一来也会导致一个和上面相同的问题,因为在使用MMU的系统中,各种物理存储空间的实际物理地址与对应的虚拟地址设置得各不相同,包括flash和DRAM的物理地址与虚拟地址。系统启动时MMU被禁止,系统运行在实模式即物理地址模式,但程序却被编译链接到了虚拟地址上,这样在使能MMU之前,存放在flash或DRAM中的程序的实际地址(物理地址)与其链接到的地址是不相同的,所以从系统启动到MMU使能之间的程序代码也应该是与地址无关的,如果要跳转到某个标号处运行,必须是基于pc的,不能是绝对跳转指令,否则程序也将跑飞。
- ARM处理器系统初始化编程注意事项
- ARM处理器系统初始化编程注意事项
- ARM处理器系统初始化过程
- ARM处理器系统初始化过程
- arm处理器编程模型
- ARM编程注意事项总结
- Intel系统编程指南第八章——8.4 多处理器(MP)初始化
- ARM处理器中断处理的编程实现
- ARM处理器中断处理的编程实现
- ARM嵌入式系统初始化过程
- ARM嵌入式系统初始化过程
- ARM嵌入式系统初始化过程
- ARM嵌入式系统初始化过程
- ARM嵌入式系统初始化过程
- ARM处理器
- ARM处理器
- ARM(处理器)
- ARM处理器
- HQL查询语句怎么写????
- Tomcat shtml ssi
- 美哉!完美幻灯片,一个原创者的诞生
- Windows系统文件夹全面大揭密
- 使用JDK1.4开发Struts2
- ARM处理器系统初始化编程注意事项
- 处理表重复记录(查询和删除)[整理人:中国风(Roy)]
- directshow+wince6.0+pxa310+双camera
- FLEX实践: 组件传递事件的处理
- 做软件的月工资到底多少?今天看了自己都失掉了不少勇气啊
- WinXP显示桌面功能的实现
- java反编译
- 同事对评审的常见误区
- C#委托2个简单例子