想要成为一名合格的嵌入式开发工程师除了需要掌握一定的嵌入式开发基础知识以为还需要开发人员掌握一定的嵌入式实用开发技能,这对于在日后的实际嵌入式开发工作中非常的有帮助,下面学到牛牛就来为大家分享一些实用的嵌入式开发技巧,共大家学习。
1.用已知值填充ROM
软件开发人员通常是一个非常乐观的群体,只要他们的代码能够长期忠实地运行,仅此而已。微控制器跳出应用程序空间并在意外的代码空间中执行似乎非常罕见。然而,发生这种情况的可能性不亚于缓存溢出或错误指针丢失引用。它确实会发生,并且发生后的系统行为将是不确定的,因为默认情况下内存空间是0xFF,或者因为内存区域通常不会被写入,所以值可能只有上帝知道。
然而,有相当完整的链接器或IDE技术可用于帮助识别此类事件并从中恢复系统。诀窍是使用FILL命令填充未使用ROM的已知位模式。为了填充未使用的内存,可以使用许多不同的组合,但如果您想构建更可靠的系统,最明显的选择是在这些位置放置ISR故障处理程序。如果系统中出现一些错误,并且处理器开始在程序空间外执行代码,则将触发ISR,并在决定纠正措施之前提供存储处理器、寄存器和系统状态的机会。
第二。检查应用程序的CRC
嵌入式工程师的一大优势是,我们的IDE和工具链可以自动生成应用程序或内存空间校验和,以根据该校验和验证应用程序的完整性。有趣的是,在许多情况下,校验和仅在程序代码加载到设备中时使用。
然而,如果CRC或校验和保存在内存中,那么验证应用程序在启动时是否完好无损(甚至定期验证长时间运行的系统)是确保不会发生意外情况的极好方法。现在,编程应用程序更改的可能性很小,但考虑到每年交付的数十亿微控制器以及可能的恶劣工作环境,应用程序崩溃的可能性不是零。更可能的是,系统中的缺陷可能会导致扇区中的闪存写入或闪存擦除,从而损坏应用程序的完整性。
第三。启动时执行RAM检查
为了构建一个更可靠、更坚实的系统,确保系统硬件的正常运行非常重要。毕竟,硬件可能会失败。(幸运的是,软件永远不会失败。软件只会做代码想做的事情,无论是正确还是错误)。这是一种很好的方法,可以通过验证启动期间RAM内部或外部没有问题来确保硬件能够按预期运行。
第四。使用堆栈监视器
对于许多嵌入式开发人员来说,堆栈似乎是一股相当神秘的力量。当奇怪的事情开始发生时,工程师们终于感到困惑,他们开始思考堆栈中可能发生了什么。结果是盲目地调整堆栈的大小和位置,等等。但这个错误通常与堆栈无关,但它怎么能如此确定呢?毕竟,有多少工程师实际执行了最坏情况下的堆栈大小分析?
堆栈大小在编译时静态分配,但堆栈是动态使用的。当代码执行时,应用程序所需的变量、返回的地址和其他信息将持续存储在堆栈中。这种机制使堆栈在其分配的内存中不断增长。然而,这种增长有时会超过编译时确定的容量限制,导致堆栈破坏相邻内存区域的数据。
绝对确保堆栈正常工作的一种方法是将堆栈监视器作为系统“健康护理”代码的一部分来实现(有多少工程师这样做?)。堆栈监视器在堆栈和“其他”内存区域之间创建一个缓冲区,并用已知的位模式填充它。然后监视器将持续监视模式是否有任何变化。如果位模式改变,这意味着堆栈增长太大,系统将被推入黑暗地狱!此时,监视器可以记录事件的发生、系统状态和任何其他有用的数据,以便将来诊断问题。
以上内容就是本次学到牛牛对于实用的嵌入式开发技巧讲解的介绍,希望对大家能有所帮助,如果想要了解更多这方面的知识,请持续关注网站内容的更新。