嵌入式软件开发简介-宋海平-马晓平.pptVIP

嵌入式软件开发简介-宋海平-马晓平.ppt

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编程注意事项 在函数的开始部分,最好进行边界检查 在函数中,应该预测到程序出错的条件,并设置恰当的错误处理通路。 在调用函数memset()进行内存块初始化时,最好用sizeof()来指定需初始化的内存块的大小,而不要用常量。 绝对不能使用memcpy()函数来对内存块进行初始化,这样不能用所希望的值来初始化,如: memcpy(a,0x0,sizeof(a)); 编程注意事项 必须执行NULL指针检查,并给出相应的异常处理 尽量不要编很耗时的循环,这样会阻止其他事件的及时处理,从而导致系统复位 在调用函数后,应对返回值进行检查,对成功或失败情况均应作相应的处理 由于REX是多任务的基于优先级的实时操作系统,当一个任务要调用其他任务的函数时,应尽量通过设信号或发命令的方式进行调用,而不要直接调用以避免出现互斥问题 在使用malloc动态分配内存时,使用完后必须用free函数进行释放,否则会导致内存泄漏 OVER 嵌入式软件开发简介 中国海洋大学 2011/12 宋海平 马晓平 嵌入式软件开发简介 嵌入式系统的特点 嵌入式系统设计的生命周期 执行环境 独特的软件技术 ADS编译器相关知识 编程注意事项 嵌入式系统特点 嵌入式系统一般用于特定的任务 嵌入式系统通常及其关注成本 嵌入式系统有实时约束 嵌入式系统一般用实时操作系统(RTOS) 嵌入式系统大多有功耗约束 嵌入式系统的系统资源有限 嵌入式系统通常在ROM中存放所有目标代码 嵌入式系统设计生命周期 产品定义(需求分析) 开发计划的制定 软件设计(概要设计和详细设计) 编码及单元测试 硬件和软件集成 系统测试 产品发布 维护和升级 执行环境 内存结构 系统启动 中断响应周期 栈帧 执行环境 内存结构 一般微处理器的内存映像如下图: 系统空间 代码空间 ROM数据空间 I/O空间 RAM数据空间 堆 栈 图1 处理器的内存映像 内存结构 系统空间为存放异常向量表的内存空间。处理器用异常向量标识出在系统遇到中断或其他异常(比如被零除、溢出错误、内存操作出错或指令错误)时将运行哪段代码,进行相应的处理。 在系统空间之上的代码空间存放着指令。一般要把系统和代码空间存放在同一ROM物理设备中。 在代码空间之上,ROM数据空间存放常量数值,比如错误信息和其他字符串。 栈用来保存当前运行状态和所有暂停运行的进程的上下文。因此,栈包含所有局部变量以及函数和中断的返回地址。只有提供了栈空间,程序才能进行中断服务或调用函数。栈一般位于内存的高端,即栈从上向下增长。 内存结构 所有静态分配的读/写变量都放在自由内存(RAM数据空间)中。全局变量是静态分配变量最常见的形式,C语言中的“static”型变量也放在这里。任何拥有全局生存期的可修改变量都存放在自由内存中。 所有动态分配(使用new或malloc())的对象和变量都放在堆中。许多嵌入式系统并没有使用堆。 最后的内存组成部分是映射到内存的外部设备寄存器(如键盘、显示屏、耳机、光感应器、充电器)。这些设备的状态放在I/O空间区域。 系统启动 系统启动有两个阶段:硬件阶段和软件阶段。 硬件阶段:一旦复位线有效(装电池或按“电源”键),处理器就进入到硬件阶段。此阶段的主要职责是使CPU开始运行程序或运行一些要把CPU控制权转交给程序的代码,程序的最初几行代码定义了如何启动软件。 软件阶段:此阶段的职责是初始化核心元件和内存的关键结构(用来建立完整的运行时环境)。 系统启动的具体过程与处理器的类型有关。 系统启动过程举例(Arm微处理器) 从程序的初始入口点处开始运行,这里用ENTRY伪操作标识程序入口点; 调用复位异常处理中断(如boot_reset_handler)函数; 对存储器和外围控制硬件进行初始化; 执行ROM和RAM有效性校验和测试,如验证ROM中是否包含一个有效的应用映像; 将已初始化的数据( ROM 中)拷贝到可写的数据区( RAM 中),并将剩下的RAM 空间初始化为0; 初始化数据栈指针 调用main()函数开始运行主程序 中断响应周期 定义:当CPU接收到中断信号,他就把正在做的事情放在一边,执行处理此中断的指令,然后回到先前的任务。 当某个设备发出中断信号给CPU,CPU将: 把下一条指令(返回地址)的地址压入栈中 从异常向量表加载ISR(中断服务程序)地址到程序计数器中 禁止中断 恢复运行正常的取指周期,此时取出的是ISR指令 栈帧(StackFrame) 定义:分配给一个函数的所有栈空间(参数、返回地址和局部变量)称为栈帧 栈被用来存放所有的函数局部变量和参数,函数调用的处理流程如下: 把所有参数压栈 调用函数 为所有局部变量在栈中分配存储空间 执行函数 释放分配给局部变量的栈空间 从函数返回 释放参数

文档评论(0)

peace0308 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档