如果您不打算购买开发板作为测试平台,您就需要自行设计硬件平台。在本书的第5章中,以目前国内ARM9的主流芯片:Samsung公司的S3C2410为例,详细介绍了该处理器的硬件架构和硬件接口扩展方法。
4.2.2 硬件驱动调试
如果硬件平台是自行设计的,必须首先对硬件进行调试,硬件调试成功是进行操作系统移植和应用程序开发的一个基本前提。
这个过程通常是通过编写一些简单的测试程序直接驱动硬件以验证硬件是否正确,这些程序可以基于操作系统进行编程,也可以不使用操作系统,而且后一种方法来得更加简单,调试也更方便和快捷。
这一类过程通常采用图4-1所示的开发模式,在运行于Windows的ADS 1.2中编写程序并编译,然后通过Multi-ICE下载并调试程序。由于这个过程的编程动作依赖于硬件,采用这种模式可以充分利用在线仿真器的强大的软件调试功能,从而加快排错过程。
4.2.3 操作系统的选择和移植
在单片机系统中,由于受硬件资源的限制,同时应用程序通常比较简单,因此,通常不使用操作系统,直接采用前后台程序控制方式设计软件系统。前台运行一个死循环作为主程序流程,在主程序中设置中断,当中断产生的时候,运行后台中断服务程序,然后返回继续运行主程序。这样的开发方式在ARM开发中同样适用,而且对于一些小型应用完全可以采取这种方式,但是对于复杂应用,如复杂的图形用户界面、网络协议等,采用前后台控制方式进行设计的应用程序设计复杂,而且不便于软件模块的划分和软件升级、维护等。
在这种情况下,操作系统的优势展露无疑。使用操作系统能够充分发挥ARM微处理器的优势。目前绝大多数嵌入式操作系统都能够稳定运行在ARM微处理器上。软件开发中必须首先选择合适的操作系统。下面将简单介绍几种常用的嵌入式操作系统以及它们的基本开发流程。
1、μC/OS-II
μC/OS-II是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。其内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。它可以基于ROM运行(ROMable)、可裁减,具有高度移植性。
从应用的角度来看,μC/OS-II提供了一个实时性非常好的嵌入式内核,在工业控制、数据采集等领域应用广泛。但μC/OS-II内核不支持文件系统、网络协议等功能,而且没有提供统一的硬件驱动程序接口和开发工具链,在复杂应用中需要考虑内核以外功能的实现难易程度。
μC/OS-II内核不支持文件系统,不支持应用程序和驱动程序的加载,因此,在μC/OS-II开发中,内核、驱动程序和应用程序都是集中编译,也就是说,μC/OS-II编译以后的二进制代码中即包含内核代码,也包含驱动程序和应用程序的代码。同时μC/OS-II没有提供统一
ARM嵌入式开发流程和开发工具(含ADS与Multi ICE简介)
的开发工具链,μC/OS-II程序的编译应该采用支持所选处理器的编译器。对于ARM处理器,可以在Windows环境中使用ADS 1.2、ADT IDE中编译μC/OS-II,也可以在Linux环境中使用GNU GCC编译μC/OS-II。因此可以采用图4-1所示的开发模式调试基于μC/OS-II的程序。
2、Linux/uClinux
Linux/uClinux是对于有MMU和没有MMU的处理器的Linux解决方案。Linux内核的完全开放,使得可以自己设计和开发出真正的硬实时系统;对于软实时系统,在Linux中也容易得到实现。
Linux/uClinux提供强大的文件系统、网络功能、GUI等软件模组支持,而且这些功能都是可以裁减的,同时它还提供了标准的驱动程序接口和软件开发接口,便于用户编程和程序维护。
Linux/uClinux自身具备一整套工具链(GNU GCC),包括编译和调试工具,用户可以自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越在嵌入式系统开发中仿真工具(ICE)的障碍。
对于ARM处理器,Linux/uClinux内核、驱动程序以及应用程序的编译都在Linux环境中使用GNU GCC完成。对于内核和驱动程序的调试通常借助于运行于Linux/uClinux之前的bootloader来完成,只有在很少的情况下需要借助在线仿真器完成。对于应用程序的调试则可以完全抛弃在线仿真器,使用GDB完成。在本书的第7章中介绍了bootloader以及Linux/uClinux的相关知识。
3、Windows CE
Windows CE是Windows界面在嵌入式处理器中的实现,它提供了友好的人机交互界面和强大的二次开发功能。Windows CE包括四大基本模块,它们提供了操作系统的关键特性,分别是:内核(Kernel)模块、对象存储(Object Store)模块、GWES(用户、应用程序和操作系统之间的图形用户界面)模块和通信(Communication)模块。
Windows CE拥有完善的软件支持开发工具,Windows CE的核心移植和驱动开发使用专门的操作系统定制工具:Windows CE Platform Builder(简称PB)。而应用程序的开发则有嵌入式开发工具包Embedded Visual Tools,包括Embedded Visual C++(简称EVC)和Embedded Visual Basic(简称EVB)等。同时Embedded Visual Tools下还可以进行部分驱动程序的开发。同时在Windows CE中还提供了用于Windows CE开发的bootloader:EBOOT。
4、vxWorks
VxWorks是专门为实时嵌入式系统设计开发的操作系统内核,为程序员提供了高效的实时多任务调度、中断管理,实时的系统资源以及实时的任务间通信。在各种CPU平台上提供了统一的编程接口和一致的运行特性,尽可能的屏蔽了不同CPU之间的底层差异。应用程序员可以将尽可能多的精力放在应用程序本身,而不必再去关心系统资源的管理。基于VxWorks操作系统的应用程序可以在不同CPU平台上轻松移植。
VxWorks是一种功能强大而且比较复杂的操作系统,包括了进程管理、存储管理、设备管理、文件系统管理、网络协议及系统应用等几个部分。VxWorks只占用了很小的存储空间,并可高度裁减,保证了系统能以较高的效率运行。所以,仅仅依靠人工编程调试,很难发挥它的功能并设计出可靠、高效的嵌入式系统,必须要有与之相适应的开发工具。TornadoII就是为开发VxWorks应用系统提供的集成开发环境,TornadoII中包含的工程管理软件,可以将用户自己的代码与VxWorks的核心有效的组合起来,可以按用户的需要裁剪配置VxWorks内核;vxSim原型仿真器可以让程序员不用目标机的情况下,直接开发系统原型,作出系统评估;功能强大的CrossWind调试器可以提供任务级和系统级的调试模式,可以进行多目标机的联调;优化分析工具可以帮助程序员从多种方式真正地观察、跟踪系统