在上述体系初始化进程中有以下两点需求留意,假如处理欠好就可能呈现程序跑飞的状况。
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处理器体系初始化编程注意事项
在上述系统初始化过程中有以下两点需要注意,如果处理不好就可能出现程序跑飞的情况。1)如果需要将程序从flash搬移到DRAM中运行在现代嵌入…
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/277254.html