软件开发通常很困难,但是对于嵌入式系统来说,却处于全新的难度。固件开发人员需要对硬件开发有充分的了解,并了解嵌入式处理器的内部工作原理。在今天的文章中,我将分享工具和技巧,这些工具和技巧可用于实现高效率并消除使固件开发变得乏味的某些事情。
嵌入式软件开发通过与“普通”软件开发相似的开发过程。无论采用哪种开发/管理模型,嵌入式软件开发通常都涉及以下步骤:
- 开发产品需求
- 系统设计与算法开发
- 编码
- 测试中
我们将研究这些阶段带来的一些困难以及一些可以提高效率和生产率的工具。
1.开发产品需求
产品规格通常是在考虑电路板设计师的情况下完成的。它通常包含的很少信息可以帮助固件开发,因此,嵌入式软件开发人员最终会发现有缺陷的250页(平均)文档,该文档无法用作参考,并且如果不仔细考虑,很容易导致设计上的疏忽。 ,如果不是整个项目失败,就会导致项目时间框架的延长。这些文档很少包含有关寄存器或其位字段的信息除其他外,这会耗费固件开发人员几个小时的时间,因为他们要搜索文档以识别诸如哪个寄存器属于哪个组以及哪个位字段属于哪个寄存器之类的内容。以下是可用来确保开发更有用的项目规范文档的一些技巧。
寄存器说明的使用
如上所述,固件开发人员需要了解项目中所有控制元素(CPU,MCU等)的所有寄存器,存储器等的复杂性,以便能够有效地控制系统的所有部分。为了做到这一点,固件开发人员可以确保规格说明文件对寄存器以及存储器映射进行正确的描述。可以为控制元素中的所有寄存器分配一个独特的名称,使它们易于在整个文档中识别,并且它们都可以热链接,从而导致它们指向文档中的列表,其中列出了名称,位置,块和地址每个寄存器。
任务说明
可以使规范文档对嵌入式软件开发人员有用的另一种方式是,描述每个块应该做什么以及应该如何做。同样在此阶段,应该在每个块下制定错误处理计划。本质上,这看起来像固件开发人员所说的; “当我到达这里时,我要做的就是做到这一点,确保不会发生。”这有助于指导开发人员的工作,甚至在设计开始识别潜在的错误和错误之前就帮助评估项目,从而节省了宝贵的时间和金钱。
还有其他因素,包括文档结构,使用易于阅读的字体(即使疲倦也可以使开发人员使用),图表和图片(可能的话),这些都可以在此阶段之后提高固件团队的效率。
2.系统设计与算法开发
这个阶段涉及伪代码,流程图,状态机以及固件设计所涉及的所有内容的开发。在此阶段,可以使用很多工具来帮助组织思想,探索项目周围的旧版/先前编写的软件以及开发自己的流程图,状态机等。下面讨论其中一些工具。
个人信息管理
在产品开发的这些阶段,开发人员在从网络链接到公式等收集项目资源的过程中往往会花很多时间。跟踪此信息以便日后使用的最佳方法之一是通过使用PIM。 (产品信息管理)工具。有很多PIM,但我会提到一些具有一些出色功能的PIM。
1. Evernote
Evernote可帮助您记录可在任何平台上使用的记录,以便您可以在公共汽车回家中检查在PC上所做的记录。注释组织良好,可以完全搜索,因此您将始终找到所需的内容。
2. TrunkNote
Trunk note是一个类似Wiki的笔记应用程序。它将Wiki的所有组织功能带到笔记中。它是基于手机的应用程序,但可以通过WIFI轻松与PC同步。
其他类型的PIM,例如Tiddlywiki等。它们中的每一个都具有一些功能,可能使其对特定个人更具吸引力,并可能需要进行一些采样才能最终确定。
了解旧版代码
在设计阶段非常有用的另一组工具是用于了解遗留代码的工具。在所设计的产品是先前产品的改进版本的情况下,开发人员可能会发现,复习已经完成的工作对于为这个新项目获得一些想法甚至一些代码很有用。这可能是一条漫长的路,特别是如果您不属于构建以前的软件的团队的一员。有很多软件可以帮助您从已经编写的代码中构建树,创建文档和流程图。
1.氧气
Doxygen是一个非常强大的工具,可以帮助您从源代码创建文档。它的主要设计目的是与C ++一起使用,但也与C,Python和其他一些语言一起使用。它具有提取任何代码的代码结构的能力,提供自动生成的依赖关系图和继承图以帮助可视化代码。
2. Graphviz
根据他们的网站,graphviz帮助将结构信息呈现为抽象图和网络图。它可以与Doxygen一起使用,以更好地了解其产生的图形。
3.记录
Srecord是处理固件映像和在不同文件格式之间转换的强大工具。它可用于计算和执行字节块上的CRC和校验和,更正由于错误的工具链而创建的错误文件,以及过滤或移动文件的某些部分。有关其使用的更多信息,请参见其SourceForge页面。
属于此类别的其他一些工具包括 CrystalRev 和 Hexplorer 等。
开发算法
所有研究和记笔记都汇聚到了算法的开发过程中,这些算法分解为项目的伪代码和流程图。存在一些用于开发流程图的工具,尽管其中大多数工具并不是固件开发所独有的,但它们提供了有用且重要的功能,这些功能可以轻松完成工作,并有助于在整个产品开发周期中维护图表。以下是一些用于流程图的最佳工具。
1. QFSM
QFSM是用于设计和模拟有限状态机的图形工具。它具有仿真设计的能力,使其比该组中的其他大多数软件都要好。在为FPGA和类似目标硬件设计状态机时,它特别有用。
2.清醒图表
清醒图表可以说是目前最好,最灵活的流程图软件。它基于Web,并具有团队功能,使您可以在多个设备之间工作并与队友实时协作。
3. Microsoft Visio
Visio是目前最好的图形工具之一。它具有来自不同字段的对象数组,可以轻松描述任何内容。但是,它没有增强团队之间协作的功能,只能在安装了Windows的Windows机器上使用。
4. Google幻灯片
当今世界产品开发中的关键之一是使用工具,这些工具使团队无论身在何处都能有效地进行协作,而这正是Google幻灯片带给团队的。它可以用于开发各种流程图,从软件流程图到组织图和思维导图。它基于云,并且可以在几乎所有流行的浏览器中使用。
与往常一样,还存在其他几种用于创建流程图和进行一般算法开发的工具,每个工具都有其自身的优缺点。
3.嵌入式固件的编码
到目前为止,所有提到的内容都在这里提出。SDK和IDE的世界,现阶段工具的选择取决于目标设备和设备中内置的功能,因此,在讨论中,我将排除流行的SDK和IDE(例如MPLAB等),并坚持使用在本质上更互补的工具。
1. QT(GUI开发)
显示器(无论是否互动)是当今最流行的向用户提供反馈的媒介,而QT的SDK是目前最好的平台之一,对于嵌入式领域的任何人来说都不陌生。它提供了“拖放”功能,可以轻松地为嵌入式设备开发复杂的基于GUI的应用程序,而与目标平台或整个项目开发所使用的编程语言无关。它基本上消除了与使用代码创建用户界面相关联的压力。
2.(快速原型制作)
嵌入式软件开发中最大的瓶颈之一是,在开发软件时,通常无法使用硬件来测试移动中的事物。通常情况下,固件开发人员会被迫等待整个过程,直到硬件准备就绪或几乎不做任何事情。这增加了交货时间,并且不会为硬件工程师和固件开发人员之间的同步提供空间,而该同步会提高产品的质量。为了帮助解决此问题,VaST的人员创建了一个电子系统级虚拟原型平台,该平台可用于创建虚拟硬件原型。 在硬件就绪之前,可以在其上执行嵌入式软件以确定系统性能。
3. Doxygen(文档)
编写任何代码最重要的部分之一就是文档,而最流行的工具之一就是Doxygen。除了用于了解旧版软件的用途之外,Doxygen还具有从代码中自动提取注释并创建包含该注释的文档的功能。Doxygen结构以图形方式包括文件,并为代码中使用的每个函数,变量和宏创建引用。通过将Doxygen与graphviz结合使用,流程图和数据流程图也可以嵌入文档中。
4. GIT(版本控制系统)
很难相信有人会在没有某种版本控制系统的情况下开发任何类型的软件,但是以防万一,这是一个非常糟糕的主意,它可能导致错误,从而浪费您的时间和金钱。Git在所有版本控制工具中脱颖而出的原因有很多。它是开源的,快速,高效的,并且大多是本地的。除了Git之外,诸如Subversion之类的工具也值得一提。
测试嵌入式固件
测试是任何事物开发过程中的重要组成部分。当由于固件错误而召回设备时,企业会损失数千美元,因此这是开发过程中应非常重视的一部分。它通常与编码和第一套用于代码测试的工具并驾齐驱,很可能是该项目使用的IDE或SDK中的调试器。测试采用不同的形式,并且在不同的阶段执行,因此,它涉及多种工具。测试工具从固件开发到设计验证,再到静态分析和运行时测试工具。以下是一些我认为非常有用的工具。
1.水晶REV
Crystal revs是研究代码的工具。它可用于从C / C ++代码生成流程图,这使其成为查看您自己的代码并查看初步设计是否已实现的好工具。借助crystal rev,您将能够快速看到设计与实现之间的差异。它具有从代码生成流程图,数据和调用流的功能,也使其成为分析旧代码有用的工具。
2. PC-皮棉
PC-lint是最古老的固件测试工具之一。它能够分析软件以识别错误,安全漏洞,并确保代码符合行业标准。类似的工具包括polyspace,以及LRDA,Eggplant和Tessy。
3. Wireshark
在构建网络设备时,这很方便。它实际上是一个数据包嗅探器,可以帮助查看设备正在传输的数据。这可能有助于保护设备。
4.虚拟串行端口驱动程序
Eltima软件的VSPD是我最近也被朋友介绍的一种工具。在进行设备驱动程序和其他与端口相关的开发时,它非常方便。虚拟串行com端口使您能够在没有目标设备的情况下测试com端口的行为。您可以创建无限数量的端口,这些端口能够模拟真实com端口的所有设置。该软件还具有串行端口拆分,Com端口合并,使用捆绑式com端口连接等其他出色功能。
就是这样,感谢您抽出宝贵的时间阅读。虽然不可能列出所有工具,但我希望您发现其中一些有用的工具。