嵌入式系统基础 项目五:ARM C语言程序设计基础 标准C库的使用.pptVIP

嵌入式系统基础 项目五:ARM C语言程序设计基础 标准C库的使用.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式系统基础 电子信息工程技术专业教学资源库项目 电子信息工程技术 标准C库的使用 嵌入式系统基础 如果在应用程序中包含了main()函数,就会自动引起对C库的初始化。 当使用标准C库后,它完成如下功能: 建立一个库函数可以执行的环境: 建立栈; 如果需要,建立堆; 初始化程序使用到的库。 运行main()。 提供对ISO C函数的支持。 捕捉和处理运用程序产生的异常. 标准C库的使用 嵌入式系统基础 图中描述了 应用程序使 用标准c库函 数的调用过程。 灰色背影部分 为C库自动完成 的功能。 标准C库的使用 标准C库的使用 嵌入式系统基础 上图调用_main()大大地简化汇编启动代码的编写。 将代码从装载域复制到执行域,以及ZI域清零工作都由C库来完成。当使用分散装载技术来实现复杂的内存映射时, _main()的作用更为重要。 _main()接着调用_rt_entry(),用于建立C库运行必须的环境。 main()函数是用户代码的入口点,这时C库运行必须的环境已经建立,也就可以使用标准C库里的函数,包括输入、输出函数。如printf()函数打印信息。 一个问题: printf()函数缺省的输出设备是调试器的信息输出窗口,调试阶段,使用printf()函数没有问题。在调试完成,程序下载到目标系统,问题就出现,目标系统是脱离调试器独立运行的, printf()哪里找调试器的信息输出窗口呢? 标准C库的使用 嵌入式系统基础 一个方法是:在应用程序里放弃对printf()的使用,自己编写函数把信息输出到LCD或串口。 一个方法是:把printf()的输出设备进行重新定向,把信息输出到LCD或串口。 在缺省情况下,printf()的调用层次。 过重写fputc()函数,把printf()的输出定向到串口。 标准C库的使用 嵌入式系统基础 这时,在最终的产品里可以使用printf()函数,因为通过对fputc()函数的重写,已抛弃调试器,选择串口。 extern void sendchar(unsigned char *ch); { unsigned char tempch = ch; sendchar(tempch); return ch; } printf()函数在调试时,该函数在目标板运行,信息打印到调试器信息窗口上,是如何实现的?是通过半主机(semihostins)机制来实现。在调试的时候,代码在ARM目标板上运行,使用调试主机上的输人/输出设备的机制。把这种机制叫半主机机制,也就是让ARM目标板将输入/输出请求从应用程序传递到调试器主机的一种机制。 半主机机制由一组已定义的SWI操作来实现.用于半主机的软件中断(SWI):ARM状态下为0x123456;Thumb状态下为0xAB。 标准C库的使用 嵌入式系统基础 库函数(如printf())调用相应的SWI(软件中断),然后调试代理程序检查软件中断号,如果是0xl23456或0xAB.则暂停程序的执行,把调试信息打印到调试器的信息台。打印完成后,继续程序的运行,如图所示。 在最终的产品上,程序调用的所有函数,都必须是non-semihost类型的,所以必须全部去掉或重 写这些使用semihost的1ibrary 函数。 为了避免使用半主机机制的 这类函数被链接到应用程序, 在汇编语言中可以使用 IMPORT__use_no_semihosting_swi; 在C语言中使用#pragma import (__use_no_semihosting_swi)来 告诉编译器禁止使用半主机机制的 函数。如果程序里包含semihost类 型的函数,armcc出错误: Error:L6200E:Symbol _semihosting_swi_guard multiply defined。也可以用armlink -verbose命令,检查调用semihost SWI的外部库函数。 标准C库的使用 嵌入式系统基础 标准c库函数的移植和重定向实例主要由三部分组成:系统初始化程序init.s、主程序main.c、重写使用半主机机制的函数。 系统初始化程序init.s 标准c库函数的移植和重定向 嵌入式系统基础 再见 嵌入式系统基础 嵌入式系统基础

您可能关注的文档

文档评论(0)

WanDocx + 关注
实名认证
文档贡献者

大部分文档都有全套资料,如需打包优惠下载,请留言联系。 所有资料均来源于互联网公开下载资源,如有侵权,请联系管理员及时删除。

1亿VIP精品文档

相关文档