9个嵌入式硬件转软件小技巧

💡 原文中文,约2700字,阅读约需7分钟。
📝

内容提要

在物联网时代,工程师对嵌入式软件有兴趣。转向嵌入式软件开发需要掌握软件和硬件交互方式,使用流程图制定软件架构,状态机控制程序流程,避免全局变量,模块化,简化中断服务例程,使用处理器示例代码进行外设实验,限制功能复杂度,使用源代码存储库,详细说明代码。

🔎

延伸解读

从硬件思维到软件架构的转换

文章强调硬件工程师转软件时,首先要克服“立即写代码”的冲动,就像设计PCB前必须先完成电路逻辑图一样。先用流程图规划软件架构,能帮助开发者理清应用所需的各个组件及其关系,确保程序建立在良好组织之上,从而减少调试时间。这种思维转换是转向嵌入式软件开发的关键第一步。

状态机与模块化:控制复杂性的核心手段

文章将状态机视为控制程序流程的有效工具,可将应用拆分为多个独立状态机,各自管理内部状态和转换,从而简化开发并提升可维护性。同时,模块化鼓励将常用功能分解为模块,建立可重用的函数库,通过连续测试改善代码质量。两者结合,能有效应对嵌入式软件日益增长的复杂性。

中断服务例程的简单性原则

中断服务例程需要保存和恢复处理器状态,会产生额外开销。文章建议保持中断短小简单,避免在中断中调用函数;若中断变得复杂或耗时,应仅做最少工作(如将数据装入缓冲区并设置标志),让主分支处理后续数据。这样可确保大多数处理器周期用于运行应用,而非处理中断。

利用示例代码与工具提前发现隐患

文章建议使用芯片制造商提供的示例代码进行外设实验,以验证微处理器各部分的工作情况,并洞察软件架构的组织方式及潜在问题。在设计初期识别障碍,比交付前才发现要好。但需注意,制造商代码往往不是模块化的,未经修改不便直接用于实际应用。此外,可利用工具自动计算函数的循环复杂度,经验法则建议保持在10以下。

❓

Q&A

硬件工程师转嵌入式软件开发可行吗?需要掌握哪些关键知识?

完全可行。需要掌握软件与硬件的交互方式,并具备基本的计算机科学和编程技能,深入理解计算机硬件和嵌入式系统架构。

为什么建议先画流程图再写代码?

流程图能帮助形成软件架构的概念,确保程序建立在良好的组织和深思熟虑之上,减少调试时间,长期看可节省时间、省去麻烦。

状态机在嵌入式软件设计中有什么好处?

状态机可将应用程序分为多个控制特定部件的状态机,拥有内部状态和状态转换,能简化软件开发,使之模块化、可维护并易于理解。

为什么应避免使用全局变量?如何限制其使用?

全局变量容易被任何函数修改,增加被破坏或误用的风险。应在最小范围内定义并封装变量,限制全局变量的数量,在C语言中可用extern关键字标识。

如何保持中断服务例程简单?复杂的中断处理应该怎么做?

中断应短而简单,不应调用函数。如果中断过于复杂或耗时,只做最少量的工作,例如将数据装入缓冲区并设置标志,然后让主分支处理数据。

使用处理器示例代码做外设实验有什么好处和局限?

好处是能提前识别潜在问题,了解软件架构的组织方式。局限是制造商代码往往不是模块化的,未经大的修改不方便用于实际应用。

如何控制函数复杂度?循环复杂度建议保持在多少以下?

将复杂任务分解为更小、更简单的任务。经验法则建议函数的循环复杂度保持在10以下。

使用源代码存储库有什么好处?需要注意什么?

可以登记好的代码版本、描述修改,便于复原或追溯旧版本,比较不同版本。需注意频繁提交代码,否则存储库无法达到预期目的。

🏷️

标签

➡️

继续阅读