- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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库函数的移植和重定向 嵌入式系统基础 再见 嵌入式系统基础 嵌入式系统基础
您可能关注的文档
- 闽南地区民间雕刻艺术 第一节 多元文化的兼容品质 一、多元文化的兼容品质.pptx
- 品牌规划 第三单元 品牌的视觉识别与规划设计 课件:品牌标志设计的基本原则 .ppt
- 名师大师信息子库 知识点1:国外名师大师信息1 IT精英:Marc Andreessen.pptx
- 模拟电子技术基础 模拟电子技术基础 项目四 机器人巡线传感模块2.ppt
- 模拟公司创业实训 实训:做一份团队组建方案 KC020A081实训:做一份团队组建方案.pptx
- 纳税实务 一般纳税人应纳税额的计算 4-4-1增值税——一般纳税人应纳税额的计算.ppt
- 内科学 第二单元 第二章 心力衰竭 第二章 心力衰竭.ppt
- 平法识图与钢筋算量 2.7.2柱箍筋计算 2.7.2柱箍筋计算.ppt
- 农产品贮藏加工技术 粮食仓储技术 粮食仓储技术.ppt
- 农产品贮藏加工技术 通风库贮藏 通风库贮藏.ppt
- 桥梁工程试验与检测 知识点2:桥梁动载试验 7-3-2:桥梁动载试验.pptx
- 桥梁上部施工技术(新) 斜拉桥拉索施工 3 斜拉桥拉索施工.ppt
- 轻钢与围护结构工程施工 轻钢门式刚架柱脚锚栓埋设 轻钢门式刚架柱脚锚栓埋设.pptx
- 其它 审计技能竞赛 2018全国高职院校审计技能试用平台实训操作.ppt
- 轻质隔墙装饰施工 项目二、轻钢龙骨纸面石膏板装饰施工 项目2、轻钢龙骨纸面石膏板--合理选材(一)--轻钢龙骨.ppt
- 清洁生产与循环经济 循环经济上实施的层面及基本模式 3.1.2循环经济实施的层面及基本模式.pptx
- 热带钢轧制 X-射线厚度监控 X-射线厚度监控.pptx
- 热带钢轧制 板坯宽度侧压设备 板坯宽度侧压设备.pptx
- 热带钢轧制 层流冷却和卷取区的自动化过程 层流冷却和卷取区的自动化过程.pptx
- 企业安全生产标准化管理 安全生产标准化的建设流程 安全生产标准化建设程序(6~8).pptx
最近下载
- 年度经营工作计划1500字.docx VIP
- 光伏发电项目质量保证措施.docx VIP
- 长江大学2017年第一学期-计算机基础试卷.doc VIP
- 丰富的图形世界(单元测试 培优卷)2023-2024学年七年级数学上册基础知识专项突破讲与练(北师大版).pdf VIP
- 建筑施工安全技术规范.pdf
- 双十一品牌推广方案(5篇).docx VIP
- IEC 62619-2022 中文版完整版.docx
- 220kV变电站电气一次部分设计设计.doc VIP
- ASME B16.47-2017 大口径钢制法兰 (NPS 26-NPS 60)(中文).docx
- 高校校园快递新模式探讨_以江南大学为例.pdf VIP
原创力文档


文档评论(0)