热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

ARM处理器系统初始化编程注意事项

ARM处理器系统初始化编程注意事项本文摘自王洪辉老师的《嵌入式系统Linux内核开发实战指南(ARM平台)》一书在上述系统初始化过程中有以下两点需要注意,如果处理不好就可能出现程序跑飞的情况。1)如

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的,不能是绝对跳转指令,否则程序也将跑飞。


推荐阅读
  • 本文介绍了win7系统休眠功能无法启动和关闭的解决方法,包括在控制面板中启用休眠功能、设置系统休眠的时间、通过命令行定时休眠、手动进入休眠状态等方法。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • PL2303HXD电路图(USB转UART)介绍及应用
    本文介绍了PL2303HXD电路图(USB转UART)的特性和应用,该电路图可以实现RS232和USB信号的转换,方便嵌入到手持设备中。PL2303HXD作为USB/RS232双向转换器,可以将USB数据转换为RS232信息流格式发送给外设,并将RS232外设的数据转换为USB数据格式传送回主机。通过利用USB块传输模式和自动流量控制,PL2303HXD能够实现更高的数据传输吞吐量比传统的UART端口。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
author-avatar
Simon_Diego
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有