学习嵌入式程序需要的软件主要包括编译器、仿真器和调试器。编译器用于将高级语言编写的程序转化为机器码,通常嵌入式程序开发所用的编译器会特别针对具体的平台进行优化,以达到最优的效果;仿真器则用于在开发时模拟硬件环境和测试软件;调试器则是开发过程中不可缺少的工具,用于检查程序中的错误和进行调试。
值得注意的是,虽然嵌入式程序的工作环境差异较大,但一些通用的开发工具具有特异性的开发者必须注意使用条件和使用方法。
在选择编译器时需要考虑到两个方面,其一是编译器所需的工具链,需要与平台进行对应。同时要考虑到编译器本身的性能和所支持的高级语言,一些有名的编译器包括GCC、Keil、IAR等。
此外,本地的编译器也可以作为备选方案,相同的代码可以供PC和设备运行。此类编译器(如g++)能够提供PC上特定的调试特性,同时性能也相当不错。但对于除PC外的环境抓虫,它们可能还是无能为力。
仿真器/模拟器是指将程序在模拟器内部运行而不需要实际的目标板,用于嵌入式系统的代码验证。模拟器的运行效率会比实际嵌入式系统低,但模拟器可方便地进行各种类型的断点、速度、步进等操作,使开发者以更容易的方式进行调试和验证。
常用的开源的仿真器包括QEMU、VirtualBox等;而Keil、IAR等嵌入式软件开发公司也都提供自家的仿真器/模拟器,它们通常和编译器和调试器捆绑在一起,方便用户同时使用。
调试器是用于调试程序中的错误,以及跟踪程序的执行路径的工具。调试器通常提供诸如断点、单步执行、变量监视、堆栈检查等功能,通常也能够很好的与任何编译器兼容。
最常见的调试器是GDB,它的命令行界面和各种增强脚本为开发者提供了强大的功能。其他的调试器(如Keil、IAR等)则提供了相应的图形界面,更加完善的硬件平台支持以及诸如深度调试、多核调试等功能,适合enterprise级别的项目团队使用。