• 在线客服

首页 > 电子元器件技术指南 > 从硬件到软件:嵌入式系统设计师必备技能指南
关注道合顺公众号,了解第一手芯资讯

从硬件到软件:嵌入式系统设计师必备技能指南

2024-11-06 13:55:33 640

嵌入式系统设计是否真的需要同时精通硬件与软件的交互才能确保项目的成功?当硬件工程师转向软件设计时,有哪些关键的技巧可以帮助他们顺利过渡并提高效率呢?在此,道合顺将探讨十个有助于硬件工程师更好地掌握软件设计原则的技巧,从流程图的设计到使用敏捷开发流程,每一步都旨在帮助工程师构建更加稳健、高效的嵌入式系统。

嵌入式系统的设计

1、流程图第一实现第二

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

2、使用状态机控制程序流程

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

3、避免使用全局变量

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

4、充分利用模块化特性

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

5、保持中断服务例程的简单性

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

6、使用处理器示例代码进行测试

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

7、限制功能复杂度

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

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

8、使用源代码存储库并频繁提交代码

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

9、代码注释

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

10、使用Agile开发流程

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

内容概述

嵌入式系统设计是一个跨学科的挑战,要求工程师不仅具备深厚的硬件知识,还要熟练掌握软件开发的原则和技术。通过对流程图优先、状态机使用、限制全局变量、模块化设计、保持中断服务程序简单、利用处理器示例代码测试、限制功能复杂度、使用源代码存储库、代码注释以及采用敏捷开发流程等十个技巧的学习与实践,硬件工程师可以有效地克服从硬件设计向软件设计转变过程中遇到的各种难题。这些技巧不仅有助于提高软件的质量和可维护性,还能够促进项目的高效管理和按时交付,最终推动嵌入式系统的创新与发展。

*免责声明:本文由道合顺整理自网络。道合顺推送文章仅供读者学习和交流。文章、图片等版权归原作者享有,如有侵权,联系删除。
标签:#嵌入式系统

相关文章

标签

STM32F405RGT6微控制器技术规格PDF数据手册区别对比1660ti和1660s显卡富士康2024年Q2财报STM8S003F3P6电阻摇表测量电阻的正确步骤串通投标火箭军采购禁令西安交通大学ULN2003ADR晶体管电路图处理器Qualcomm(高通)骁龙750g处理器IBM中国研究院TMS320F28335PGFA锂聚合物电池与锂离子电池RTX 3050显卡台积电(tsmc)晶圆代工厂电池芯片原材料第一代骁龙6芯片中国科技50强企业榜单2024年度前50名中国科技企业榜单天玑1000+处理器处理器测评Intel处理器i3i5i7i9处理器怎么选ADC模数转换器DAC数模转换器ADC和DAC的区别2N2222AUB使用指南2024处理器排行榜处理器CPU选购指南NUC029LAN天玑6020处理器象帝先国产GPU芯片厂商英特尔intelTPS2553DBVR替代型号零件使用指南色环电阻的读取方法电阻如何正确读取色环电阻LL4148二极管制造商品牌信息瞬态电压抑制器瞬态电压抑制器符号瞬态电压抑制器用途英伟达电子厂SN75176BDR收发器应用使用指南STM32F103C8T6博通W25Q128JVRC0402JR-070RL电阻器MMA8452QR1加速度计高通骁龙778G处理器气体传感器上海国际传感器展SENSOR CHINA 2024传感器文晔半导体分销商TPS563201DDCR转换器元器件符号大全电气元器件符号大全STM8L051F3P6引脚参数NRF52832-QFAA-RSoC IC特征参数STM32F429IGT6国产CPU厂商龙芯中科FT232R USB UARTTPS74801DRCR线性稳压器大联大MMBT3904LT1G双极晶体管TPS53353DQPRIM03GR信号继电器麒麟芯片骁龙芯片天能电池天聚电池三星逆变器逆变器的作用ATMEGA328P-AUPT100 RTD传感器传感器TPS61021ADSGR开关稳压器STM8S105C6T6MCUPAM8403黎巴嫩对讲机爆炸事件华强北元器件需求激增黎巴嫩对讲机事件对国内的影响MC7815CTGLM339过零检测电路轴承供应商TDA2030H音频放大器ST(意法半导体)TDA7293iPhone 16iPhone 16 Pro手机拆解SG3525ATJA1050T/N,118Vishay(威世科技)半导体交流发电机工作原理作用分类大全L298NLM2576ZC与ZR电线电缆的区别ZC电线电缆ZR电线电缆京东方深天马TLV3501AID线性比较器LM324AD运算放大器浪涌保护器选购指南存储模组库存清理NAND闪存HCNR200HCNR201光耦合器LM311TL494CNOP07CP规格书资料下载TDA2822D放大器LM1875STM32F411CEU6过压过流保护电路PCF8591CC2530ZigbeeAT89C51RC-24AU8Gen2芯片8sGen3芯片8Gen2 和8sGen3芯片对比A4988微步进电机驱动器MC34262富士康SHT30-DIS-B传感器湿度传感器AD7606AD7606-6AD7606-4海康威视LM3886LM3886T引脚功能SS34整流器STM32H750ZBT6华为P70紫光国微LM7805LM2575线性电源开关电源原理图PCB设计TLP521光耦合器BSS123场效应晶体管半导体什么是半导体半导体的作用测绘数据LM386M-1德州仪器联发科X20高通625联发科X20和高通625哪个好处理器对比24C02C骁龙8天玑9000移动处理器处理器测评LM2596什么是嵌入式BSS84,215场效应晶体管LM2904N单相倒顺开关220V接法单相倒顺开关Marvell2024全球芯片市场74HC0474LS04反相器逆变器十大品牌逆变器电子产品需求AT89S52查询电子元器件数据手册网站元器件规格书查询网站查询电子元器件网站电容电容类型电容原理电容常见应用LM2903半导体产业链半导体产品头部品牌半导体代表性公司台积电被盗案A/D转换器A/D转换器类型A/D转换器的优势AT24C02C半导体产业是什么半导体产业的未来会如何发展韦尔股份2024年季度报表半导体2024年前三季度数据报表德州仪器ADS1256IDBR模数转换器固态继电器SSR测试固态继电器的方法CAN总线终端电阻终端电阻选用 120 R 的原因ADXL345ADI(亚德诺)高通骁龙联发科天玑模拟芯片思瑞浦A4950ELJTR-T电机驱动器ALLEGRO(埃戈罗)断路器断路器c和d有什么区别如何选择合适的断路器电磁起重机AD9361BBCZ华为鲲鹏和昇腾区别电磁兼容性(EMC)PCB布局与设计24LC08BMICROCHIP(微芯)同步电机异步电机同步电机和异步电机的区别接地变压器接地变压器的原理及作用SN74HC373引脚图及功能PDF规格书骁龙与天玑哪个好嵌入式系统希荻微诚芯微LM393比较器德州仪器(TI)英飞凌(Infineon)高通骁龙835高通骁龙845高通骁龙835和845差距在哪里MCP60012024电子芯片行业分析电路保护元件常见的电路元件有哪些如何购买电路元件LD1117稳压器高通骁龙888处理器模拟芯片公司ADC0809CCN电子行业宣传渠道如果提升芯片行业流量电子行业推广渠道电子产品推广软文电子营销推广锂电池保护板MOS管的作用BMP280气压传感器中文资料文档BOSCH(博世)MOS管常用的驱动电路2024年度最受欢迎的元器件供应商道合顺元器件是什么半导体是什么元器件和半导体有什么区别L293D电机驱动器功率半导体功率半导体是什么功率半导体行业发展前景如何半导体企业有哪些半导体十大企业品牌ADC0832CCN长电科技华润微芯片封测公司元器件布局元器件布局的基本原则元器件布局的操作指南AT24C256EEPROMMICROCHIP(微芯)芯片手册芯片资料查询查询电子元器件的网站芯片规格书资料下载电子芯片购买网站俄罗斯S-70西方制造零部件芯片资料查询网站PCF8574扩展器元器件供应商LM1117继电器继电器的工作原理继电器的常见类型继电器的作用电子元器件购买网站电子元器件购买平台电子元器件购买网站有哪些MAX3485旺鑫集团电子元器件品牌电子元器件品牌排行榜TPS7A3301模拟芯片是什么模拟芯片有哪些模拟芯片的市场前景数字芯片模拟芯片与数字芯片的区别LAN8720A LAN8720AIDC-DC是什么BUCK变换器伏秒积平衡Boost变换器Buck-Boost变换器电子元器件销售做电子元器件怎么找客户电子元器件怎么开发客户有哪些可以免费入驻的电子元器件商城TLV1117可以免费入驻的电子元器件商城拓展元器件业务的渠道电子元器件活动华为Mate70系列华为Mate X6华为与苹果的对比TDA7388电位器电位器三根线的正确接法比亚迪比亚迪供应商恒流源电路工作原理常见的恒流源电路恒流源电路MAX485CSA+MAXIM(美信)模拟芯片的发展趋势模拟芯片的工作原理模拟芯片的常见类型模拟芯片的应用数字IO模拟IO单片机GPIO的工作模式芯片烧录芯片烧录是什么芯片烧录详细教程CS8416CIRRUS LOGIC(凌云逻辑)数字音频接收器模拟芯片公司排名中国模拟芯片公司前十2024年中国模拟芯片企业排名模拟芯片行业有哪些公司TDA7850功率放大器应用电路图思科去中国化什么是死区如何设置PWM死区时间IR2104驱动器IR2104 与 IRS2104 的区别电容器电机与电容器的关系电容坏了电机还会转吗中国四大协会国产芯片兆欧表的工作原理兆欧表的使用方法兆欧表的使用注意事项直接数字合成器(DDS)AD9833BRMZAD9833BRMZ用于什么产品什么是聚合物锂电池什么是锂电池聚合物锂电池和锂电池有什么区别华为Mate 60的芯片什么是电源纹波电源纹波测试实例DAC0830芯片作用DAC0830中文数据手册电源纹波测量方法纹波噪声的危害和抑制电源纹波调试技巧电源纹波FFT频谱分析MAX7219CWG显示驱动器DCDC转换器DCDC芯片ACS712霍尔效应电流传感器芯片营销渠道芯片企业如何提升知名度有哪些芯片垂直行业平台什么CPU散片如何正确选购CPU散片CPU散片的真伪辨别技巧AD603压控放大器半导体产业链什么是回流焊什么是波峰焊回流焊和波峰焊的区别MAX706ESA+MAX706ESA+替代型号如何简化UPC系统监控电子智能化技术是什么电子智能化技术的作用导线连接器套管是什么导线连接器套管的安装方法导线连接器套管的应用LF353半导体行业有什么特点中小芯片厂商如何提升品牌知名度芯片半导体公司如何提升品牌形象芯片行业有哪些营销渠道TL081IP什么是三进制芯片用三进制的是否更加简单使用三进制的优势及应用三进制和二进制的对比格力芯片SiC芯片工厂DRV8825步进电机芯片原厂活动评选芯片企业提曝光与知名度的活动有哪些芯片是半导体吗芯片与半导体的区别N-MOS工作原理P-MOS工作原理如何选择适合的N-MOS和P-MOSIR2110IR2113IR2110和IR2113的区别比较芯片供应商免费入驻平台有哪些电子元器件平台可以入驻电动机工作原理电动机类型直流电动机与交流电动机的对比继电器是什么线性充电器TP4054TP4054中文资料规格书手机芯片性能排名天梯手机芯片性能排名如何选择手机芯片串联电阻的作用什么是阻抗匹配L7805CV市面上有什么产品用海思的芯片海思芯片的应用智能芯片智能芯片有哪些类型智能芯片的应用汽车芯片汽车芯片企业