在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 1699|回复: 2

嵌入式应用程序设计的基本知识

[复制链接]
发表于 2007-5-24 08:10:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
嵌入式应用程序设计的基本知识OHY 2006-11-13一、嵌入式系统中的存储映射    在ARM体系结构中,系统复位后将跳转到地址0x00x处执行,该处存放的是复位异常中断的中断向量。对于嵌入式系统来说,在系统复位时RAM中是不存在代码和数据的。因此在系统复位时,地址0x00处应为ROM,即系统复位后应该首先从ROM开始执行。这时,根据系统在其后运行过程中地址0x00处存储器的类型,有下面两种情况。1、地址0x00处为ROM   这里说的地址0x00为ROM,是指在系统运行过程中,地址0x00为ROM。对于嵌入式系统来说,在系统复位时地址0x00处总为ROM。这种情况非常简单,在地址0x00存存放着复位异常中断向量,根据此中断向量,程序跳转到相应的位置开始进行系统初始化等操作。   这种情况有种缺点,通常相对于RAM来说,ROM的数据宽度较小,速度较慢,这会使系统响应异常中断的速度较慢。而且如果异常中断向量表放在ROM中,则中断向量表内容不能修改。 2、地址0x00处为RAM   同样,这里说的地址是指系统运行时地址为0x00,而嵌入式系统在系统复位时的地址0x00处总为ROM。因此,对于运行时地址处0x00为RAM的系统,为了保证系统复位后从ROM中开始执行,在系统复位时,系统中的映射机构将ROM映射到地址0x00处,然后在程序运行最初几条指令中,系统中的存储机构进行地址重映射(remap)重新将RAM映射到地址0x00处。   相对于ROM来说,RAM的数据宽度较大,速度较快,这会使系统响应异常中断的速度更快。而且如果异常中断向量表放在RAM中,程序在运行中可以修改中断向量表内容,使系统更为灵活。   如果系统正常运行过程中,地址0x00处为RAM,则在系统复位时需要执行下面操作序列。1、系统复位时,ROM被映射到地址0x00处,程序从这里获得复位异常中断向量。2、执行复位异常中断向量。如:LDR  PC,=0x0f0000043、设置地址重映射寄存器REMAP=1,重新将RAM映射到地址0x00开始的空间。4、完成其他的初始化代码。 二、系统初始化   系统的初始化部分包括两个级别的操作:   系统运行环境初始化。   应用程序初始化。A、系统运行环境初始化   对于嵌入式应用系统和具有操作系统支持的应用系统来说,相同运行环境初始化部分的工作时不同的。对于有操作系统支持的应用系统来说,在操作系统启动时将会初始化系统的工作环境。操作系统在加载应用程序后,将控制权转交到应用程序的main()函数。然后,C运行时库的_main()初始化应用程序。而对于嵌入式应用系统来说,由于没有操作系统的支持,存放在ROM的代码必须进行所有的初始化工作。   系统运行环境的初始化工作主要包括一下的内容:1、设置初始入口点。   初始入口点是映象文件运行时的入口点,每个映像文件只有一个唯一的初始入口点,它保存在ELF头文件中。如果映像文件是被操作系统加载的,操作系统正是通过跳转到该初始入口点处执行来加载该映像文件的。初始入口点必须满足下面两个条件:   a、初始入口点必须位于映像文件的可执行区域。   b、包含初始入口点的可执行域不能被覆盖,它的加载时地址和运行时地址必须是相同的。(这种域称为固定域root region)2、设置中断向量表   如果系统运行时,地址0x00处为ROM,则相同的异常中断向量表是固定的,程序在运行过程中不能修改异常中断向量表。   如果系统运行时,地址0x00处为RAM,则系统初始化时必须重建异常中断向量表。3、初始化存储系统4、初始化数据栈指针5、初始化关键的IO设备   指那些必须在使能IRQ和IFQ之前进行初始化的IO设备。6、设置中断昔日需要的RAM变量7、使能异常中断   通过清楚CPSR寄存器的中断禁止位实现。8、切换处理器模式   直到目前为止,系统还处于特权模式。如果下面要运行的应用程序是在用户模式下运行,就需要将处理器切换到用户模式。9、切换程序状态   所有的RAM内核都是从ARM状态开始执行的。 B、应用程序初始化1、将已经初始化的数据搬运到可写的数据区。   在嵌入式系统中,已经初始化的数据在映像文件运行之前通常保存在ROM中,在程序运行过程中这些数据可能需要被修改。因而,在映像文件运行之前需要将这些数据搬运到可写的数据区。这部分数据就是映像文件中的RW属性的数据。2、在可写存储区建立ZI属性的可写数据区。   通常在映像文件运行之前,也就是保存在ROM时,映像文件中没有包含ZI属性的数据。在运行映像文件时,在系统的可写的数据区建立ZI属性的数据区。   如果应用程序中包含了函数main(),编译器在编译该函数时,将引言符号_main。这样,连接器在连接时将包含C运行时库中的相应内容。_main可以完成这部分应用程序的初始化。   如果应用程序中没有包含函数main(),应用程序中需要包括进行这部分应用程序的初始化
发表于 2009-7-4 09:12:18 | 显示全部楼层
谢谢,写的很好啊
发表于 2009-7-8 17:16:27 | 显示全部楼层
厉害啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-28 04:28 , Processed in 0.031790 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表