如何利用嵌入式集成开发工具,让其更好地服务于设计?
2018-07-11
嵌入式开发过程中会使用到各种工具,包括IDE环境、编译工具、软硬件调试工具、操作系统等。根据项目的需求,往往会选择来自不同厂商的工具进行组合。如果能非常方便地将这些不同厂商的开发环境无缝地配合起来,则可以大大减少不必要的工作,这对于开发人员而言很重要。下面就细数一下嵌入式工程师常用到的开发工具!
始于51单片机的Keil软件
从接触MCS-51单片机开始,很多工程师就会知道Keil软件。在开发单片机时,要使用C语言或者汇编语言,但这两种语言都不能直接输入到单片机,所以需要一个软件,把C语言或者汇编语言编译生成单片机可执行的二进制代码。Keil公司(现在是ARM公司的一个公司)的软件恰好提供这样的功能,并且它还有很多优点,比如工程易于管理、自动加载启动代码,集编辑、编译、仿真一体,调试功能强大等。因此,不管是单片机爱好者,还是经验丰富的工程师,都喜欢使用这些软件。
嵌入式工程师常用的Keil公司旗下的软件开发工具有μVision、RealView、MDK、Keil C51。μVision是一个集成开发环境(IDE),和Eclipse类似。它包括工程管理、源代码编辑、编译设置、下载调试和模拟仿真等功能,有μVision2、μVision3和μVision4、μVision5和μVision6等几个版本,它提供一个环境,让开发者易于操作,但并不提供具体的编译和下载功能,需要软件开发者添加。
RealView是一系列开发工具集合的称呼,包括RVD(RealView Debugger),RVI(RealView ICE),RVT(RealView Trace),RVDS(RealView Development Suite),RV MDK(RealView Microcontroller Development Kit)这些产品。
MDK(Microcontroller Development Kit),即Keil MDK、RealView MDK或者Keil for ARM。ARM公司现在统一使用MDK-ARM,MDK的设备数据库中有很多厂商的芯片,是专为微控制器开发的工具,为满足基于MCU进行嵌入式软件开发的工程师需求而设计,支持ARM7、ARM9、Cortex-M3/M1、Cortex-R0/R4等ARM微控制器内核。
Keil C51是基于μVision的IDE,支持绝大部分51内核微控制器开发工具;Keil C166为基于μVision的 IDE,支持绝大部分XC16x、C16x和ST10等系列微控制器开发工具;Keil C251基于μVision 的IDE,支持绝大部分基于251核的微控制器开发工具。
IAR从独立走向与客户融合
IAR Embedded Workbench是IAR Systems公司开发的一套用于编译和调试嵌入式系统应用程序的开发工具,支持汇编、C和C++语言。它能够提供完整的集成开发环境,包括工程管理器、编辑器、编译链接工具和C-SPY调试器。每个C/C++编译器不仅包含一般全局性的优化,也包含针对特定芯片的低级优化,可以充分利用所选芯片的所有特性,确保较小的代码尺寸。IAR Embedded Workbench能够支持由不同的芯片制造商生产且种类繁多的8位、16位或32位芯片。
近期,IAR公司就与瑞萨电子合作,将IAR C/C++ Complier集成到瑞萨电子e2 studio开发环境中。Renesas Synergy Platform开发工程师可减少应用代码占用的内存空间,提高了代码执行速度,并且能够为Synergy微控制器增加更多功能。除此之外,IAR编译器生成的代码执行速度快,这样就能使MCU较长时间地处于低功耗模式,可延长电池寿命,特别适合物联网设备。IAR Systems与瑞萨合作,用户可直接在e2 studio环境中使用IAR C/C++ Compiler,同时仍可选择继续使用面向Renesas Synergy IDE的专有IAR Embedded Workbench IDE。
意法半导体开发工具为MCU安全保驾护航
意法半导体中国微控制器事业部市场及应用总监曹锦东概括了MCU未来面临的三个方向:更高的性能;更强的通信能力;更高的安全性,因为只要联网就会涉及到安全的问题。 针对安全性问题,ST推出了一款基于Arm Cortex-M33的STM32产品,支持Trust Zone技术。通过Trust Zone可以实现更高的安全性,且不仅是在微控制器里的安全性,而且还可以提供更多的安全性方面的服务。
要保证系统的安全,光靠硬件是不够的,还需要做到系统性的安全分析,分析可能会出现哪些威胁或漏洞。意法半导体提供物联网安全工具箱,实现了可扩展的嵌入式安全功能,如STM32Trust.CodeProtect,保证用户代码安全且完整地写入可信的STM32产品,包括安全安装、安全编程;STM32Trust.DataProtect,保护有价值的数据不被窃取,包括数据保护、关键存储保护;STM32Trust.ExecutionProtect,将应用程序分为可信和不可信两部分,包括代码执行隔离。
助力嵌入式工程师提高效率的工具
(1)SourceInsight
Source Insight是一个面向项目开发的程序编辑器和代码浏览器,拥有内置的对C/C++、C#和Java等程序的分析,能分析源代码并在工作的同时动态维护它自己的符号数据库,并自动显示有用的上下文信息。
Source Insight不仅仅是一个强大的程序编辑器,还能显示reference trees,class inheritance diagrams和call trees。Source Insight提供了最快速的对源代码的导航和任何程序编辑器的源信息,还提供了快速和革新的访问源代码和源信息的能力。
(2)UltraEdit
在嵌入式软件开发中不可避免需要查看一些原始数据,包括不可显示的字符,UltraEdit的HEX显示查看功能能够很好地解决这个问题,同时,对大文件(比如压力测试时的log问题)支持也是远远好于记事本和写字板。
UltraEdit是一套功能强大的文本编辑器,可以编辑文本、十六进制、ASCII 码,完全可以取代记事本,内建英文单词检查、C++ 及 VB 指令突显,可同时编辑多个文件,而且即使开启很大的文件,速度也不会慢。
(3)BeyondCompare
Beyond Compare是一款功能强大的内容对比工具,可以比较的内容有以下这三种:电脑上两个目录的内容;电脑上的目录和FTP地址的内容;两个文本档案的内容(包括 UTF-8、html、Delphi源程序等文本档案)。
Beyond Compare有内建的HTML档案浏览器,还有支援压缩包的功能。这些特别的功能可以让用户作跨媒体之间进行比较,例如:把现时网站的内容与一个储存在光碟上的压缩备份档案作比较。
(4)TortoiseSVN
TortoiseSVN是开源可视化的集中式代码版本管理,是Subversion版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录。文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件服务器,可以将文件恢复到过去的版本,并且可以通过检查历史知道数据做了哪些修改,谁做的修改。这就是为什么许多人将 Subversion 和版本控制系统看作一种“时间机器”。
(5)Wireshark
Wireshark是一款强大的网络协议数据报文分析工具,也是深入学习各种网络协议必不可少的利器。这是一个网络封包分析软件,其撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。网络封包分析软件的功能可想像成“电工技师使用电表来量测电流、电压、电阻”的工作,只是将场景移植到网络上,并将电线替换成网络线。
(6)SSHSecureShellClient
SSH Secure Shell Client是一种强大安全远程登录工具,如果使用虚拟器的方式开发Android等Linux系统,建议使用该工具,避免在图形界面操作Linux系统,减少PC的负载。SSH可以解决口令在网上明文传输的问题,把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。
深层次使用嵌入式开发工具,做高水准开发人员
赛诺微医疗科技(浙江)有限公司电子设计主管唐思超
嵌入式开发工具作为开发环节的核心装备,其使用程度直接决定产品的研发效率。
很多开发人员局限于使用嵌入式开发工具的基本功能,却不懂得如何深层次地使用开发工具以实现高效的开发与调试。例如,许多开发人员在命令行下使用GDB,痛苦地调试嵌入式Linux应用程序,却不知道基于Eclipse可以搭建图形化的源码级调试环境;又如,用大量的时间一遍遍跟踪执行目标代码来定位变量被预期之外的代码修改的问题,殊不知使用数据断点即可定位故障点;再如,为了调试Linux内核,安装了大量开源调试工具,却发现没有几样真正有效。最后不得不在代码中增加大量输出信息,试图使用穷举的方式定位问题,却不知道使用JTAG调试器结合通用的IDE,就可以实现Linux内核的可视化源码级调试。
导致工具使用不够深入的原因包括:一是不少应用级开发人员过于把目光集中在问题解决上,宁愿花大量时间使用开发工具的基本功能进行低效率的开发,却不愿花时间深入研究开发工具所蕴含的高效手段或探究高效的分析方法,实际上,许多开发工具的高级技巧在其文档中都有体现,只是许多技术人员忽略了文档;二是多数开发人员仅仅看到嵌入式开发工具的基本功能,而没有意识到其实现机制更值得深入研究,导致无法深入地使用工具。反观那些系统级开发人员,尤其是涉及操作系统底层开发的高级人员,则能较深刻地理解开发工具的运作机制,并能深入运用。