文档详情

第4章基于Realview开发环境的嵌入式软件开发..doc

发布:2017-01-17约2.98万字共40页下载文档
文本预览下载声明
基于Realview 开发环境的嵌入式软件开发 4.1 Realview编译器的缺省行为 多数嵌入式应用程序最初都是在原型环境下开发的。无论什么样的原型环境的资源与最终产品环境都是有差异的。因此,考虑如何将嵌入式应用程序从其所依赖的开发工具或调试环境中移植到在目标硬件上独立运行是非常重要的。 开始编写嵌入式应用程序时,开发者可能并不清楚目标硬件的具体规格。如,目标系统使用了什么样的外围设备、存储器映射情况甚至不能确定处理器的型号。 为在了解这些详细信息前能够继续软件的开发,RVCT 工具提供了很多默认的操作,使用户能编译和调试与目标系统无关的应用程序代码。下面详细介绍介绍这些编译选项,只有深入了解这些编译选项设置,才能使开发更顺利的进行。 4.1.1 Semihosting 1. Semihosting简介 在 RVCT C 库中,对某些 ISO C 功能的支持由主机调试环境提供。提供该功能的机制被称为Semihosting。大多数的ARM调试系统都支持Semihosting机制,如ReslView Debugger AXD等。 调试系统提供这种机制是非常有用的,因为用于开发使用的硬件系统经常没有最终系统的所有输入和输出设备。在这种情况下,Semihosting可让主机代替目标系统提供这些设备的功能。举例来说,此机制可以用于启用 C 库中的函数(例如,printf()和 scanf())使用主机的屏幕和键盘,而不使用目标系统的屏幕和键盘。 半主机由一组已定义的 SWI 操作来实现。应用程序调用相应的 SWI,然后由调试代理程序(Debug Agent)处理 SWI 异常。调试代理程序完成系统与主机之间的通讯。 图4.1显示了Semihosting机制的处理过程。 图4.1 Semihosting机制的处理过程。 在很多情况下,Seimhosting SWI 由库函数内的代码调用。应用程序也可以直接调用。有关支持 ARM C 库中Seimhosting的详细信息,请参阅ARM相关文档。 2. Semihosting软件接口 ARM 和 Thumb SWI 指令包含一个软中断号,该中断号可以被应用程序使用。此编号可以由系统中的 SWI 处理程序进行解码。有关 SWI 处理程序的详细信息,请参阅本书中ARM异常处理一节。 Semihosting使用固定的中断号调用相应的处理程序。用于Jemihosting的 SWI 是: ? 0x123456 (在 ARM 状态下); ? 0xAB (在 Thumb 状态下)。 值得注意的是,用户在编写自己的中断处理程序时,避免使用Semihosting已经使用的中断向量号。 调试代理通过SWI 的中断向量号识别该软中断是目标系统提出的Semihosting请求。具体是何种Semihosting请求(如是键盘输入请求或屏幕显示请求)通过向寄存器r0传递不同的参数进行区分。所有其它参数通过一个数据块进行传递。该数据块的地址通过寄存器r1传递给中断处理程序。软中断的处理结果放在r0中返回,也可以通过显式的返回值,或传递数据块的指针带回程序的处理结果。即使未返回结果,也假定r0是被使用的。 用r0传递的可用Semihosting操作编号分配如下: ? 0x00-0x31 这些编号由 ARM公司使用; ? 0x32-0xFF 这些编号由 ARM公司保留,以备将来使用; ? 0x100-0x1FF 这些编号保留给用户应用程序。 ? 0x200-0xFFFFFFFF 这些编号未定义。当前未使用并且不推荐使用这些编号。 在以下部分中,操作名称之后的括号中的编号是调用Semihosting操作时放入r0的值。例如,SYS_OPEN(0x01)。 如果从汇编语言代码中调用 SWI,最好使用semihost.h中定义的操作名称。可以用 EQU 伪操作定义操作名称。例如: SYS_OPEN EQU 0x01 SYS_CLOSE EQU 0x02 3. Semihosting需求函数 Semihosting需要的函数列表如表4.1所示。如果使用默认的Semihosting功能,用户不需要编写任何其它代码。也可以重新实现部分的输入/输出函数,使这些函数和标准Semihosting混合使用。 表4.1 Semihosting函数列表 函数名称 描述 SYS_OPEN (0x01) 打开文件 SYS_CLOSE(0x02) 关闭使用SYS_OPEN打开的文件 SYS_WRITEC (0x03) 向控制台输出字符 SYS_WRITE0 (0x04) 将空终止的字符串写入控制台 SYS_WRITE (0x05) 写入主机上的文件 SYS_READ (0x06) 将文件内容
显示全部
相似文档