ADS12进行嵌入式软件开发上.pdf
文本预览下载声明
使用 ADS1.2 进行嵌入式软件开发 ( 上)
关键词:嵌入式软件, ARM ADS, C 库函数 , 存储器
嵌入式应用程序通常都是在样机环境下调试与开发的, 这种环境与最终产品之间并不完全相
同。因此,在系统调试阶段就考虑应用程序在最终目标硬件中的运行情况是非常重要的。
本文旨在讨论如何将一个开发 / 调试环境下的嵌入式应用程序转移到最终独立运行的目标系
统中去, 并提到了 ARM ADS1.2 开发工具包的一些功能特性及其在这个过程中所起到的作用。
使用 ADS开发嵌入式程序时,需要着重考虑以下几个问题:
1. 与硬件相关的 C 语言库函数的使用;
2. 某些 C 语言库函数使用了调试环境中的资源, 要把这些使用的资源重定向到目标系统中的
硬件上来;
3. 可执行映象文件的存储器映射必须根据目标硬件的存储器分布进行裁剪;
4. 在主程序执行前, 嵌入式应用程序必须先完成系统的初始化。 一个完整的初始化包括用户
的启动执行代码和 ADS中 C 库函数的初始化过程。
图 1 Semihosting 的实现举例
图 2 C 语言库函数结构
第 1 页,共 7 页 文档来源于互联网 |若有侵权联系必删
图 3 缺省的存储器映射
图 4 连接器布局规则
缺省的工程项目设置
刚开始一个嵌入式应用软件开发时, ADS用户可能并不完全清楚目标硬件的一些参数指 标。
比如有关外设、存储器地址分布,甚至处理器类型等一些细节,可能还没有最终确定。为了
在所有这些细节全部就绪前就能进行软件开发, ADS 工具有一套程 序构建和调试的缺省设
置。了解这套缺省的工程项目设置方法,对于掌握最终的移植步骤非常有好处。
ADS1.2C 语言函数库
Semihosting
在 ADS的 C语言函数库中,某些 ANSIC 的功能是由主机的调试环境来提供的,这套机制有
一个专门术语叫 Semihosting 。Semihosting 通过一组软件中断 (SWI) 指令 来实现。如图 1
所示, 当一个 Semihosting 软中断被执行时, 调试系统先识别这个 SWI 请求, 然后挂起正在
运行的程序,调用 Semihosting 的服务,完成后再恢复原来的程序执行。因此,主机执行
的任务对于程序来说是透明的。
C 语言库函数结构
从概念上来讲,C 语言库函数可以被分成两部分,一是 ANSIC 语言规范本身的一部分,一是
只受某一特定 ANSIC 层次支持的函数,如图 2 所示。
其 中一些 ANSIC 的功能是由主机调试环境调用驱动程序级的函数完成的。例如, ADS 的库
函数 printf() 把输出信息输出到调试器的控制台窗口,这个功 能通过调用 __sys_write()
实现, __sys_write() 执行了一个把字符串输出到主机控制台的 Semihosting 软中断服务程
序。
缺省的存储器映射
第 2 页,共 7 页 文档来源于互联网 |若有侵权联系必删
如果用户在程序编译时没有指定映象的存储器映射分布, ADS将为生成的目标代码和数据分
配一个缺省的存储器映射图,
显示全部