嵌入式开发系统小技巧_第1页
嵌入式开发系统小技巧_第2页
嵌入式开发系统小技巧_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式开发系统小技巧嵌入式开发系统小技巧汇总 技巧 1: 用值填充 ROM软件开发人员往往都是非常乐观的一群人, 只要让他们的代码忠 实地 长时间地运行就可以了,仅此而己。微控制器跳出应用程序空 间并在非 预想的代码空间中执行这种情况似乎是相当少有的。然而 , 这种情况发生 的时机并不比缓存溢出或错误指针失去引用少。它确 实会发生! 发生这种 情况后的系统行为将是不确定的,因为默认情况 下内存空间都是 OxFF, 或者由于内存区通常没有写过,其中的值可 能只有上帝才知道。不过有相当完备的 linker 或 IDE 技巧可以用来帮助识别这样的 事件 并从中恢复系统。技巧就是使用FILL命令对未用

2、ROM填充的位模式。 要填充未使用的内存,有很多不同的可能组合可以使用 , 但如果是想建立 更加可靠的系统,最明显的选择是在这些位置放置 ISRfaulthandlero 如果系统岀了某些过失,处理器开始执行程序空 间以外的代码,就会触 发 ISR, 并在决定校正行动之前提供储存处 理器、存放器和系统状态的机 会。技巧 2:检査应用程序的 CRC对嵌入式工程师来说一个很大的好处是, 我们的 IDE 和工具链可 以自 动产生应用程序或内存空间校验和 (Checksum), 从而根据这个 校验和验 证应用程序是否完好。有趣的是,在许多这些案例中,只 有在将程序代 码加载到设备时,才会用到校验和。然

3、而,如果CRC或校验和保持在内存中,那么验证应用程序在启动时(或甚至对长时间运行的系统定期验证 ),是否仍然完好是确保 意外之事 不会发生的极好途径。现在一个编程过的应用程序发生改 变的概率是很 小的,但考虑每年交付的数十亿个微控制器以及可能 恶劣的工作环境, 应用程序崩溃的时机并不是零。更有可能的是, 系统中的一个缺陷可能导致某一扇区发生闪存写入或闪存擦除,从 而破坏应用程序的完整性。技巧3:在启动时执行RAM佥査为了建立一个更加可靠和扎实的系统, 确保系统硬件正常工作非 常重 要。毕竟硬件会发生故障幸运的是软件永远不会发生故障,软 件只会 做代码要它做的事,不管是正确的还是错误的。在启动时

4、验证RAM勺内部或外部没有问题,是确保硬件可以如预期般运作的一 个好方法。有许多不同的方法可用于执行 RAM佥查,但常用的方法是写入一 个己 知的模式,然后等上一小段时间再回读。结果应该是所读就是 所写。真 相是,在大多数情况下 RAM佥查是通过的,这也是我们想 要的结果。但 也有极小的可能性佥查不通过,这时就为系统标示出 硬件问题提供了极 好的时机。技巧 4: 使用堆栈监视器对许多的'嵌入式开发者而言,堆栈似乎是一股相当神秘的力量。 当 奇怪的事情开始发生,工程师终于被难倒了,他们开始思考,也 许堆栈 中发生了什么事。结果是盲目地调整堆栈的大小和位置等等。 但该错误 往往是与堆栈无关

5、的,但怎能如此确定?毕竟,有多少工程 师真的实际 执行过最坏情况下的堆栈大小分析?堆栈大小是在编译时就静态分配好的, 但堆栈是以动态的方式使 用的 随着代码的执行,应用程序需要的变量、返回的地址和其它 信息被不断 存储在堆栈中。这种机制导致堆栈在其分配的内存中不 断增长。然而, 这种增长有时会超出编译时确定的容量极限,导致 堆栈破坏相邻内存区 域的数据。绝对确保堆栈正常工作的一种方法是实现堆栈监视器, 将它作为 系统 “保健代码的一局部有多少工程师会这样做 ?。堆栈监视器 会在堆 栈和“其它内存区域之间创立一个缓冲区域,并填充己知 的位模式。 然后监视器会不断的监视图案是否有任何变化。如果该

6、位模式发生了改 变,那就意味着堆栈增长得太大了,即将要把系统 推向黑暗地狱 ! 此时监 视器可以记录事件的发生、系统状态以及任何 其它有用的数据,供日后 用于问题的诊断。大多数实时操作系统(RTOS或实现了内存保护单元(MPU的微控制器 系统中都提供有堆栈监视器。可怕的是,这些功能默认都是关 闭状态, 或者经常被开发人员有意关闭。在网络上快速搜寻一下可 以发现,很多 人建议关闭实时操作系统中的堆栈监视器以节省 56字 节的闪存空间。等 等,这可是得不偿失的做法!技巧 5:使用 MPU在过去,是很难在一个小而廉价的微控制器中找到内存保护单元 (MPC) 的,但这种情况己经开始改变。现在从高端到低

7、端的微控制器 都己经有 MPU而这些MPI为嵌入式软件开发人员提供了一个可以大幅提高其固件(firmware) 鲁棒性 (robustness) 的时机。MPLB逐渐与操作系统耦合,以便建立内存空间,其中的处理都 分开, 或任务可执行其代码,而不用担忧被 stompedono 倘假设真有 事情发生, 不受控制的处理会被取消,也会执行其他的保护措施。 请留意带有这种 组件的微控制器,如果有,请多加利用它的这种特 性。技巧 6:建立一个强大的看门狗系统你经常会发现的一种总是最受喜爱的看门狗 (watchdog) 实现是, 在 看门狗被启用之处 (这是一个很好的开始 ) ,但也是可以用周期性 定时器

8、 将该看门狗清零之处 ; 定时器的启用是完全与程序中岀现的任 何情况隔离 的。使用看门狗的目的是协助确保如果出现错误,看门 狗不会被清零, 即当工作暂停,系统会被迫去执行硬件重设定 (hardwarereset), 以便恢 复。使用与系统活动独立的定时器可以让 看门狗保持清零,即使系统已 失效。对应用任务如何整合到看门狗系统中, 嵌入式开发人员需要仔细 考虑 和设计。例如,有种技术可能可以让每个在一定时期内运行的 任务标示 它们可以成功地完成其任务。在此事件中,看门狗不被清 零,强制被复 位。还有一些比拟先进的技术,像是使用外部看门狗 处理器,它可用来 监视主处理器如何表现,反之亦然。对一个可

9、靠的系统而言,建立一个强大的看门狗系统是很重要的。 由 于有太多的技术,难以在这几个段落中完全涵盖,但针对此一议 题,笔 者未来还会发表相关的文章。技巧 7: 防止易失存储器分配不习惯在资源有限环境下工作的工程师, 可能会试图使用其编程 语言 的特性,这种语言让他们可以使用易失存储器分配。毕竟,这 是一种常 在计算器系统中使用的技术,在计算器系统中,只有在有 必要时,内存 才会被分配。例如,以 C 开发时,工程师可能倾向于 使用 malloc 来分配 在堆 (heap) ±的空间。有一个操作会执行,一旦 完成,可以使用仕乂将 被分配的内存返回,以便堆的使用。在资源受限的系统,这可能是一场灾难 ! 使用易失存储器分配的 其中 一个问题是,错误或不当的技术可能会导致内存泄漏或内存碎 片。如果 出现这些问题时,大多数的嵌入式系统并没有资源或知识 来监视堆或妥 善地处理它。而当它们发生时,如果应用程序提出对 空间的要求,但却 没有所请求的空间可以使用,会发生什么事呢?使用易失存储器分配所产生的问题是很复杂的, 要妥善处理这些 问题, 可以说是一个噩梦 ! 一种替代的方法是,直接以静态的方式,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论