Eclipse开源运动已成为软件行业的主要因素,这在很大程度上是因为它为嵌入式开发工程师提供了免费的综合集成开发环境(IDE),并能够利用大量免费或廉价的外接式生产力工具。
得益于Eclipse框架的广泛规定,有可能以符合开源哲学的价格创建针对嵌入式优化的Eclipse IDE。
通过将Eclipse,GNU C / C ++工具链和以主机为目标的调试探针组合在一个完整的,集成的且受商业支持的软件包中,Express Logic提供了BenchX,BenchX是一种增强的,嵌入式优化的,基于Eclipse的IDE,可以将其进行开发。每个开发人员席位仅需许可$ 1,000。
如下图1所示,此IDE在一个完整的,集成的,受商业支持的软件包中结合了嵌入式优化的Eclipse IDE,GNU C / C ++编译器和工具链以及一个主机目标调试探针。
图1.将Eclipse与GNU和主机调试探针相结合
为了简化Eclipse / CDT中的多个透视图,一个“嵌入式透视图”提供了与嵌入式系统开发相关的所有必要视图窗口。这大大降低了将Eclipse用于嵌入式系统的复杂性。
BenchX透视
图BenchX透视图提供对创建,编辑,组装,编译,链接,定位,执行和调试嵌入式应用程序所需的所有视图和工具的访问。下面的图2显示了BenchX Embedded透视图。
图2. Eclipse for Bemch X透视图
在此示例中,简化了Eclipse构建过程,以反映嵌入式开发的需求和嵌入式开发人员的偏好。许多未在嵌入式开发中使用的构建按钮,菜单,对话框和其他选项已被消除,取消激活(“变灰”)或降级为较低级别的菜单,以防止它们使嵌入式的更典型的使用模式复杂化IDE。
另外,Eclipse调试器接口已被修改,使其更适合嵌入式开发,在调试开发中的程序时,通常将建立远程目标连接。下面的图3显示了运行中的调试器。
图3.运行中的Eclipse调试器
Express Logic还修改了Eclipse调试器GUI,以删除嵌入式开发中未使用的菜单,按钮和选项。由此产生的用户体验类似于专为嵌入式使用而设计的专有IDE。
BenchX工具除了修改调试器GUI之外,还包括对嵌入式开发至关重要的功能,即“ RTOS内核意识”。在企业界没有真正的对手,因此Eclipse没有能力协助开发人员查看感兴趣的RTOS内核对象就不足为奇了。
与企业工作相反,嵌入式开发要求开发人员经常监视RTOS内核对象(例如线程,信号量和队列)的状态,以查看应用程序如何使用它们以及该使用是否符合预期。
即使进行了许多更改以使其更适合于嵌入式开发,因为它仍然严格遵守Eclipse接口标准,所以可以通过添加Eclipse插件工具组件(例如编译器,文本编辑器和static)来增强此IDE。分析工具。
用户可以充分利用上千个Eclipse插件来提高开发效率。因此,BenchX提供了一个简单而又完全模块化的基础,这得益于其Eclipse传统,可以进行升级和扩展。
构建和调试嵌入式应用程序
在了解其Eclipse的起源和所添加的嵌入式扩展之后,让我们看一下开发人员如何使用基于嵌入式Eclipse的基于IDE的IDE(例如BenchX)来组合一个简单的应用程序。
最初,用户将使用“工作区启动器”对话框。Eclipse“工作区”只是一个子目录,其中包含与许多项目相关的文件。选择“ hello_world.c”文件并将其内容显示在“ hello_world.c”源代码窗口中,在该窗口中进行所有源代码编辑。
此时,Simple_Hello_World工作空间已打开并准备构建程序。在BenchX Perspective中,只需选择“ Build Project”按钮即可完成,如下图4所示。
图4.开始一个项目
选择“ Build Project”按钮,将生成“ hello_world_demo”项目中的程序集和C文件。除非开发人员在构建之前选择了自定义设置,否则将使用默认的编译器和链接器设置。
这种一键式项目构建在嵌入式开发中很常见,并且在每次迭代(涉及对程序进行代码更改)后都重复进行。因此,单击一次使其尽可能简单很重要。
此时,将构建标准的hello world演示并创建一个可执行文件,以供运行和调试。
运行和调试可执行映像
要执行程序,必须将其连接到目标。目标连接指定可执行映像的下载,执行和调试位置。
目标连接主要有两种类型:模拟器和硬件探针。“模拟器”连接用于在基于主机的软件模拟器上执行和调试映像。“硬件探针”连接有助于通过指定的JTAG探针连接的板上的可执行映像的执行和调试。
BenchX包含一个硬件调试探针,并允许选择此选项。最终,尽管通常将模拟器用于初始调试活动,但必须将嵌入式应用程序下载到目标上并在目标上运行。将调试探针添加到Eclipse之后,开发人员就可以使用两个执行环境选项。
下面的图5显示了“ QEMU Platform Simulator”(GNU工具链中的一个平台模拟器)的选择以及相应的选项。或者,用户可以选择“ Macraigor usbWiggler”(BenchX随附的硬件调试探针)及其相应选项。对于大多数连接,对话框下部有一组标准的“调试选项”,包括:
–平台初始化脚本
–仅连接–仅
加载程序符号
–验证下载的映像
–停在“主要”位置
图5:选择平台模拟器断点
“平台初始化脚本”选项选择探针用于准备给定目标以下载和执行程序的文件。在实际尝试运行任何应用程序代码之前,“仅连接”选项用于启动主板。
“仅加载程序符号”对于调试带有硬件断点的基于Flash的程序很有用。“验证下载的图像”会读回下载的图像,以确保下载成功。
最后,“ Stop in main”选项导致将自动断点插入到程序的“ main” C函数中。这使开发人员可以在执行之前设置其他断点。
使用BenchX,如果在“调试器”选项卡下选择了“在主站点中停止”选项,则会自动在“主”中放置一个断点。双击源窗口的左边距可以设置和清除其他断点。
当程序到达断点时,它将暂停并更新所有相关的寄存器和数据视图。下面的图6显示了演示程序中“ thread_0_counter ++”处的断点设置。
图6.设置一个断点
查看程序元素
一旦程序遇到断点,便存在查看目标程序的功能,包括查看源代码,反汇编,局部/全局变量,寄存器,内存和RTOS内核对象的视图。
通过在BenchX透视图右上角的视图窗口中选择“变量”选项卡,可以查看变量。选择“变量”时,默认情况下将显示局部变量及其内容。请注意,其值已更改的变量以红色显示,如下图7所示。
图7.选择和更改变量
注册查看。目标处理器寄存器也可以查看,程序执行期间寄存器值的变化也以红色显示。
ThreadX意识
虽然Eclipse不支持RTOS,但是嵌入式开发人员通常使用RTOS并需要内核意识支持。这意味着用户可以在调试器窗口中轻松查看其嵌入式应用程序中的RTOS内核对象,并获取有关目标应用程序中使用的每个内核资源的详细信息。
用户可以访问大量RTOS内核对象,包括线程,信号量,互斥体,队列,计时器,块和字节内存池以及事件标志组。IDE也可以用于完全不使用RTOS的嵌入式系统。
使用BenchX,与使用ThreadX执行应用程序有关的所有信息都可以轻松获得。ThreadX对象是通过“中间右侧”视图窗口中的可见选项卡或透视图左下角的“快速视图”按钮选择的,如下图8所示。
图8.使用“快速视图”选择对象
线程查看。 “线程”视图提供了ThreadX应用程序中所有线程的概述。概述包括每个线程的计划计数,优先级,抢占阈值,时间片和当前状态。下面的图9显示了一个示例“线程”视图。
图9.所有线程的概述
结论
BenchX支持基于ARM,ColdFire,PowerPC和MIPS架构的应用程序开发。对于每种受支持的平台和体系结构,BenchX都包含完整的GNU C / C ++交叉编译工具链,模拟器和库,它们托管在Windows上以本机运行,而无需Cygwin(运行GNU时通常需要Windows托管的Unix仿真环境)。BenchX源代码级调试器与Macraigor JTAG usbWiggler集成在一起,用于所有受支持的体系结构
Eclipse为非常适合嵌入式开发工程师的IDE提供了出色的基础。当与BenchX中的硬件调试探针集成在一起时,Eclipse可以为嵌入式系统提供功能强大且可扩展的开发平台。