- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用 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将为生成的目标代码和数据分
配一个缺省的存储器映射图,
文档评论(0)