嵌入式开发:硬件工程师的 10 个软件技巧

来源:乐鱼平台下载  作者:乐鱼平台官网  2022-08-18 05:07:02

  嵌入式系统设计通常不仅需要了解硬件,还需要了解软件如何影响硬件并与之交互。设计硬件需要一定的工程范例,这可能与设计软件截然相反。在嵌入式开发中,当从硬件设计过渡到软件设计时,硬件工程师在开始开发软件时应该记住十个软件技巧。  技巧1——首先是流程图,其次是实现当一个工程师第一次踏入软件开发的领域时,有一种强烈的诱惑让他立即投入并开始编写代码。这种思维模式相当于在原理图完成之前就试图设计PCB。坐下来开发软件时,忽略开始编写代码的冲动,而是使用流程图来开发软件的架构图,这一点至关重要。这将使开发人员了解应用程序所需的不同部件和组件,就像原理图告诉工程师需要什么硬件组件一样。通过这样做,整个程序将有更好的机会被很好地组织和思考,从长远来看,这将通过减少调试时间来节省时间和头痛。  技巧2——使用状态机来控制程序流程20世纪最伟大的软件发明之一就是状态机。一个应用程序通常可以分解成多个状态机,每个状态机控制应用程序的一个特定组件。这些状态机中的每一个都有自己的内部状态和状态转换,决定了软件如何对各种激励做出反应。使用状态机设计软件将使模块化、可维护和易于理解的软件开发变得容易。存在大量展示状态机理论和算法的资源。  技巧3——避免使用全局变量在过去的函数式编程中,函数优先于形式,嵌入式开发人员的唯一目标是让程序尽可能快地按预期运行,而不考虑程序结构或可重用性。这种编程范式不担心使用程序中任何函数都可以修改的全局变量。结果是增加了变量损坏或误用变量的机会。在新推荐的面向对象范例中,变量应该在尽可能小的范围内定义,并被封装以防止其他函数误用或破坏变量。因此,建议您限制使用全局范围的变量的数量。在C语言中,可以通过使用extern关键字来标识这些变量。  技巧4——利用模块化的优势如果你问任何一个工程师,项目中最有可能延迟交付和超出预算的部分,答案将是软件。软件通常很复杂,很难开发和维护,尤其是当整个应用程序驻留在一个文件或多个松散关联的文件中时。为了简化可维护性、可重用性和复杂性,强烈建议利用现代编程语言的模块化,将常见功能分解为模块。通过以这种方式分解代码,程序员可以开始构建函数库和特性库,这些函数库和特性库可以从一个应用程序重用到下一个应用程序,从而通过连续测试提高代码质量,并减少时间和开发成本。  技巧5–保持中断服务例程简单中断服务例程用于从当前正在执行的代码分支中中断处理器,以便处理中断刚刚被触发的外设。每当执行中断时,都需要一定量的开销来保存当前程序状态,运行中断,然后将处理器返回到原始程序状态。现代处理器比几年前快得多,但仍需要考虑这种开销。一般来说,为了不干扰主代码分支,嵌入式开发人员希望尽量减少中断时间。这意味着中断应该短而简单。不应从中断中调用函数。此外,如果中断开始变得太复杂或花费太多时间,则应该使用该中断来完成当时所需的最少任务,例如将数据加载到缓冲区并设置一个标志,然后允许主分支处理传入的数据。这样做可以确保处理器的大部分周期都用于运行应用程序,而不仅仅是处理中断。  技巧6——使用处理器示例代码试验外设在设计硬件时,构建原型测试电路总是有帮助的,这样可以确保工程师在布局电路板之前对电路的理解是正确的。写软件也可以这样。硅制造商通常有示例代码,可以用来测试微处理器的部件,以便工程师可以了解部件的工作原理。这允许洞察软件架构应该如何组织以及可能遇到的任何潜在问题。在设计过程的早期识别潜在的障碍,而不是在发货前的最后几个小时才发现。这是预先测试代码片段的好方法,但是要注意,制造商代码通常不是模块化的,在实际应用中不需要大量修改就可以轻松使用。随着时间的推移,这种情况一直在改变,也许有一天会从芯片提供商那里得到生产就绪的代码。  技巧7——当处理任何复杂的任务时,最简单的方法是把它分成更小更简单的任务,这样更容易处理。随着任务或功能变得越来越复杂,人类越来越难跟踪所有细节而不出错。当一个函数被写出来的时候,它的复杂性在当时看起来是合适的,但是当它需要在六个月后被维护的时候,工程师将会如何看待它应该被考虑。有很多方法可以测量函数的复杂度,比如圈复杂度。有一些工具可以自动计算函数的圈复杂度。一般经验表明,圈复杂度低于10的函数是理想的。  技巧8——使用源代码库并提交经常犯错是人类的一部分,当人类编写代码时,他们不会奇迹般地改变。这就是嵌入式开发人员使用源代码库至关重要的原因。源代码库允许开发人员签入一个好的代码版本,并描述对代码库做了哪些更改。这使得开发人员不仅可以恢复或回到旧版本的代码,还可以比较以前版本的变化。如果开发人员做了一堆改变,然后破坏了系统,回到一个好的代码版本只是一个点击!请记住,如果代码没有被频繁地提交,那么存储库将不会像预期的那样工作。如果进行了不可逆转的更改,等待两周提交代码然后返回将会损失大量的工作和时间!  技巧9——彻底记录代码在软件开发的激烈竞争中,很容易只关注代码的编写和调试,而忽略记录。文档经常成为项目任务的结尾,因为当有压力时,它是开发人员最不想做的事情。然而,重要的是当代码在你的脑海中还清晰的时候,记录下来,这样将来的开发人员或者你自己就可以阅读注释并理解代码是如何工作的。  技巧10——使用敏捷开发过程当进行任何类型的工程设计时,总是建议定义并遵循某种过程,其结果是一致的质量、成本和按时交付。嵌入式开发人员已经成功地使用敏捷开发过程来开发高质量的软件。该流程允许开发具有优先级的需求。最高优先级的任务首先在一个被称为迭代的预定时间段内执行。该过程的美妙之处在于它允许软件开发过程是流动的,允许需求和任务根据客户的结果和需求随着每次迭代而适应和改变。

  嵌入式系统设计通常不仅需要了解硬件,还需要了解软件如何影响硬件并与之交互。设计硬件需要一定的工程范例,这可能与设计软件截然相反。在嵌入式开发中,当从硬件设计过渡到软件设计时,硬件工程师在开始开发软件时应该记住十个软件技巧。

  技巧1——首先是流程图,其次是实现当一个工程师第一次踏入软件开发的领域时,有一种强烈的诱惑让他立即投入并开始编写代码。这种思维模式相当于在原理图完成之前就试图设计PCB。坐下来开发软件时,忽略开始编写代码的冲动,而是使用流程图来开发软件的架构图,这一点至关重要。这将使开发人员了解应用程序所需的不同部件和组件,就像原理图告诉工程师需要什么硬件组件一样。通过这样做,整个程序将有更好的机会被很好地组织和思考,从长远来看,这将通过减少调试时间来节省时间和头痛。

  技巧2——使用状态机来控制程序流程20世纪最伟大的软件发明之一就是状态机。一个应用程序通常可以分解成多个状态机,每个状态机控制应用程序的一个特定组件。这些状态机中的每一个都有自己的内部状态和状态转换,决定了软件如何对各种激励做出反应。使用状态机设计软件将使模块化、可维护和易于理解的软件开发变得容易。存在大量展示状态机理论和算法的资源。

  技巧3——避免使用全局变量在过去的函数式编程中,函数优先于形式,嵌入式开发人员的唯一目标是让程序尽可能快地按预期运行,而不考虑程序结构或可重用性。这种编程范式不担心使用程序中任何函数都可以修改的全局变量。结果是增加了变量损坏或误用变量的机会。在新推荐的面向对象范例中,变量应该在尽可能小的范围内定义,并被封装以防止其他函数误用或破坏变量。因此,建议您限制使用全局范围的变量的数量。在C语言中,可以通过使用extern关键字来标识这些变量。

  技巧4——利用模块化的优势如果你问任何一个工程师,项目中最有可能延迟交付和超出预算的部分,答案将是软件。软件通常很复杂,很难开发和维护,尤其是当整个应用程序驻留在一个文件或多个松散关联的文件中时。为了简化可维护性、可重用性和复杂性,强烈建议利用现代编程语言的模块化,将常见功能分解为模块。通过以这种方式分解代码,程序员可以开始构建函数库和特性库,这些函数库和特性库可以从一个应用程序重用到下一个应用程序,从而通过连续测试提高代码质量,并减少时间和开发成本。

  技巧5–保持中断服务例程简单中断服务例程用于从当前正在执行的代码分支中中断处理器,以便处理中断刚刚被触发的外设。每当执行中断时,都需要一定量的开销来保存当前程序状态,运行中断,然后将处理器返回到原始程序状态。现代处理器比几年前快得多,但仍需要考虑这种开销。一般来说,为了不干扰主代码分支,嵌入式开发人员希望尽量减少中断时间。这意味着中断应该短而简单。不应从中断中调用函数。此外,如果中断开始变得太复杂或花费太多时间,则应该使用该中断来完成当时所需的最少任务,例如将数据加载到缓冲区并设置一个标志,然后允许主分支处理传入的数据。这样做可以确保处理器的大部分周期都用于运行应用程序,而不仅仅是处理中断。

  技巧6——使用处理器示例代码试验外设在设计硬件时,构建原型测试电路总是有帮助的,这样可以确保工程师在布局电路板之前对电路的理解是正确的。写软件也可以这样。硅制造商通常有示例代码,可以用来测试微处理器的部件,以便工程师可以了解部件的工作原理。这允许洞察软件架构应该如何组织以及可能遇到的任何潜在问题。在设计过程的早期识别潜在的障碍,而不是在发货前的最后几个小时才发现。这是预先测试代码片段的好方法,但是要注意,制造商代码通常不是模块化的,在实际应用中不需要大量修改就可以轻松使用。随着时间的推移,这种情况一直在改变,也许有一天会从芯片提供商那里得到生产就绪的代码。

  技巧7——当处理任何复杂的任务时,最简单的方法是把它分成更小更简单的任务,这样更容易处理。随着任务或功能变得越来越复杂,人类越来越难跟踪所有细节而不出错。当一个函数被写出来的时候,它的复杂性在当时看起来是合适的,但是当它需要在六个月后被维护的时候,工程师将会如何看待它应该被考虑。有很多方法可以测量函数的复杂度,比如圈复杂度。有一些工具可以自动计算函数的圈复杂度。一般经验表明,圈复杂度低于10的函数是理想的。

  技巧8——使用源代码库并提交经常犯错是人类的一部分,当人类编写代码时,他们不会奇迹般地改变。这就是嵌入式开发人员使用源代码库至关重要的原因。源代码库允许开发人员签入一个好的代码版本,并描述对代码库做了哪些更改。这使得开发人员不仅可以恢复或回到旧版本的代码,还可以比较以前版本的变化。如果开发人员做了一堆改变,然后破坏了系统,回到一个好的代码版本只是一个点击!请记住,如果代码没有被频繁地提交,那么存储库将不会像预期的那样工作。如果进行了不可逆转的更改,等待两周提交代码然后返回将会损失大量的工作和时间!

  技巧9——彻底记录代码在软件开发的激烈竞争中,很容易只关注代码的编写和调试,而忽略记录。文档经常成为项目任务的结尾,因为当有压力时,它是开发人员最不想做的事情。然而,重要的是当代码在你的脑海中还清晰的时候,记录下来,这样将来的开发人员或者你自己就可以阅读注释并理解代码是如何工作的。

  技巧10——使用敏捷开发过程当进行任何类型的工程设计时,总是建议定义并遵循某种过程,其结果是一致的质量、成本和按时交付。嵌入式开发人员已经成功地使用敏捷开发过程来开发高质量的软件。该流程允许开发具有优先级的需求。最高优先级的任务首先在一个被称为迭代的预定时间段内执行。该过程的美妙之处在于它允许软件开发过程是流动的,允许需求和任务根据客户的结果和需求随着每次迭代而适应和改变。

云平台软件中心

关于我们

联系我们

  • 地址:深圳市宝安区福永凤凰富源街213号旭达工业园A栋7层 7A
  • 133 4757 3623
  • 0755-8529 6639
  • aosien2012@163.com
  • http://www.paiweiju.com/