硬件工程师应记住的10大软件技巧

发布者:云自南国来最新更新时间:2023-02-03 来源: zhihu关键字:硬件工程师  控制程序 手机看文章 扫描二维码
随时随地手机看文章

嵌入式系统设计不仅需要了解硬件,还需了解软件是如何影响硬件并与硬件进行交互的。设计硬件所需的范式可能与设计软件完全相反。当从硬件设计转向包含软件的设计时,硬件工程师应牢记以下十个技巧。

技巧#1:流程图第一,实现第二

当工程师首次迈入软件开发领域时,会有一种强烈的诱惑力促使他们立刻投入工作并开始写代码。这种做法就好比在电路逻辑图还未完成前就试图设计印刷电路板(PCB)。在着手开发软件时,抑制一上来就想写代码的冲动至关重要,应首先用流程图制定一个软件架构图。这样的方法会使开发人员对应用所需的不同部分与组件形成一个概念,就像电路逻辑图可以告诉工程师需要哪些硬件元件一样。这样可确保程序整体建立在良好的组织和深思熟虑之上,减少程序调试时间,从长期看,这样做还可以节省时间、省去麻烦。

技巧#2:使用状态机控制程序流程

状态机是20世纪最伟大的软件发明之一。一个应用程序往往可被分为多个状态机,每个状态机都控制该应用程序的特定部分。这些状态机都拥有自己的内部状态和状态转换,从中可看出软件如何与各种激励相互作用。用状态机来设计软件,可简化软件的开发,使之模块化、可维护,并易于理解,相关文章请移步此处:谈谈单片机编程思想——状态机。现在已经有多种资源来演示状态机理论和算法。

技巧#3:避免使用全局变量

在函数式编程的年代,函数要先于形式,程序员的唯一目标是尽可能地让程序按预期方式快速运行,而不用考虑程序结构或可重用性。这种编程范式会毫无顾虑地使用全局性变量,程序中的任何函数都可能修改它。其结果就造成了变量被破坏的几率增加或变量被误用。在新推荐的面向对象的范式中,应在最小的范围内定义变量并封装它们,以防止其他函数的误用或破坏。因此,建议限制使用全局变量的数量。在C语言中可用外部关键字标识这些变量。

技巧#4:充分利用模块化特性

无论问哪一名工程师,项目的哪部分最有可能延迟交付并超出预算,答案都是软件。软件往往是复杂的,且难以开发和维护,尤其是当整个应用都存在于单个文件或松散关联的多个文件中时。为了改善可维护性、可重用性及复杂性,强烈建议程序员充分利用现代编程语言的模块化特性,将常用功能分解成模块。以这样的方式分解代码,程序员就能着手建立函数与特性库,然后在一个接一个的应用中重用它们,从而通过连续测试而改善代码质量,同时也减少了开发时间,降低了开发成本。

技巧#5:保持中断服务例程的简单性

中断服务例程用来中断处理器对当前代码的执行,而去处理刚刚触发中断的外围设备。无论何时执行中断,都需要一定的开销,用于保存当前程序的状态并运行中断,然后将处理器回归原程序状态。现代处理器要比多年前的处理器快得多,但仍需要考虑此花销。一般情况下,程序员都想把中断运行时间降至最低,以避免干扰主代码。这意味着中断应该短而简单。中断中不应调用函数。此外,如果中断变得过于复杂或耗时,那么就应该只在必要时利用中断做最少量的工作,例如,将数据载入缓冲区并设置一个标志,然后让主代码处理输入的数据。这样做可保证大多数处理器的时间用于运行应用,而不是处理中断。

技巧#6:使用处理器示例代码进行测试

设计硬件时,构建原型测试电路总是有益的,这样可确保工程师对电路有正确的理解,然后再做电路板布局。这在设计软件时也同样适用。硅片制造商通常都有示例代码,可用来测试微处理器的各个部分,这样工程师们就可判定该部分的工作情况。此方法使人们明确知道应该如何设计软件体系架构,以及可能碰到的任何问题。在设计初期了解可能存在的障碍,比在产品交付前的最后几小时才发现它们要好得多。这是预先测试一段代码的好方法,但需提醒的是,制造商代码往往不是模块化的,要经过彻底的修改才可用于实际应用。随着技术的进步,也许某一天芯片供应商会提供可用于生产的代码。

技巧#7:限制功能复杂度

工程学中有一个旧词叫“KISS”——保持简单和直接。无论在处理何种复杂的工作时,最简单的方法就是把它分解为更小、更简单、更易处理的任务。随着工作或功能变得越来越复杂,人们要准确无误地记录所有的细节也变得更困难。在写一个函数时,其复杂度在当时看似适中,然而还必须考虑到,6个月后当工程师进行维护时,还需要查看代码。测量函数复杂度(如循环复杂度)的方法很多,现在已经有工具可以自动计算某个函数的循环复杂度。由经验可知,函数的循环复杂度保持在10以下是最理想的。

无论在处理何种复杂工作时,最简单的方法就是把它分解为更易处理的任务。

技巧#8:使用源代码存储库并频繁提交代码

人都是会犯错误的,写代码时也会犯错。这就是为什么开发人员使用源代码存储库是如此重要。源代码存储库可使开发人员“存入”一个好的代码版本,并描述对该基础代码所做的修改。这不仅使开发人员可以复原或追溯到的旧版代码,还可以比较旧版代码之间的不同。如果开发人员做的一系列修改破坏了系统,只需点击一下即可恢复好代码版本!请谨记,如果不频繁提交代码,存储库就不会达到预期目的。如果做了不可修复的改变,过两周才提交代码再恢复的话,就会造成大量工作和时间的损失!

技巧#9:代码注释

在紧张的软件开发中,开发人员很容易把注意力集中在编写和调试代码上,而忽略做详细的注释。在压力之下,注释工作往往拖到最后,因为开发人员认为这是最后的一件事。然而,趁代码在你脑中记忆犹新时就做注释是至关重要的,这样做可使其他开发人员或以后你自己读懂注释,理解代码是如何工作的。

技巧#10:使用Agile开发流程

无论做何种类型的工程设计,都建议先设定并遵守某种流程,以便质量和成本都保持稳定的并能按时交付。软件开发人员已成功使用Agile开发流程开发高质量软件,这一流程可按任务的优先顺序做开发。优先级别最高的任务在指定的时间内首先完成,这被称为迭代。这种方法的好处是可以使软件开发流程保持顺畅,还可以根据结果和客户的需要,使需求和任务适应每一次迭代并做相应的修改。


关键字:硬件工程师  控制程序 引用地址:硬件工程师应记住的10大软件技巧

上一篇:电压采集采样电路设计
下一篇:MCU时钟相关功能引脚有什么作用

推荐阅读最新更新时间:2024-10-30 10:36

单片机控制程序的设计
本系统中单片机AT89C51负责键盘处理、各工作状态的串行显示,以及配合∏)GA测控和频率的预置,具体包括单片机主程序,预置频率加1子程序,预置频率减1子程序,键扫子程序,测频率子程序,显示子程序等程序,各程序的流程图如图1 ~图6 所示。   图1 单片机主程序流程图   图2 预置频率加1子程序流程图   图3 预置频率减1子程序流程图   图4 键扫子程序流程图   图5 测频率子程序流程图   图6 显示子程序流程图
[单片机]
单片机<font color='red'>控制程序</font>的设计
AD0804单片机控制程序
/*采用AD0804芯片,硬件 电路 :cs片选端接P2.3,WR写数据端写P3.6,RD读数据端接P3.7,锁存端接P2.6脚, 数码管 位选端分别接P3.2 ,P3.3,P3.4,段选端接P1口*/  #include reg52.h //头文件  #define uint unsigned int//宏文件  #define uchar unsigned char//宏文件  uchar num;//变量  void delay3(uint z);//延时定义  void dissy();//延时函数定义  sbit ge=P3^2;//个位定义  sbit shi=P3^3;//十位定义  sbit bai=P3^4;
[单片机]
嵌入式软件设计中查找缺陷的几个技巧
结构测试或白盒测试能有效地发现代码中的逻辑、控制流、计算和数据错误。这项测试要求对软件的内部工作能够一览无遗(因此称为"白盒"或"玻璃盒"),以便了解软件结构的详细情况。它检查每个条件表达式、数学操作、输入和输出。由于需要测试的细节众多,结构测试每次检查一个软件单元,通常为一个函数或类。 代码审查也使用与实现缺陷和潜在问题查找同样复杂的技术。与白盒测试一样,审查通常针对软件的各个单元进行,因为一个有效的审查过程要求的是集中而详尽的检查。 与审查和白盒测试不同,功能测试或黑盒测试假设对软件的实现一无所知,它测试由受控输入所驱动的输出。功能测试由测试人员或开发人员所编写的测试过程组成,它们规定了一组特定程序输入对应的预期程序输出。
[测试测量]
STM8S TM1650芯片控制程序
以下为.h文件: #ifndef __TM1650_I2C_H #define __TM1650_I2C_H #include stm8s.h #include stm8s_gpio.h #include tim1.h #include usart2.h #include iostm8s103f3.h #include intrinsics.h /********************************** TM1650芯片控制20路灯函数 PB7为SCL口 PB6为SDA口 **********************************/ #define SCL_TM1650
[单片机]
STM8S TM1650芯片<font color='red'>控制程序</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved