版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构引引 言言1 arm1 arm规范库引见规范库引见2 2 裁减裁减armarm规范规范C C函数库函数库结语结语. 千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构 随着对高处置才干、实时多义务、超低功耗等方面需求的增长,高端嵌入式处置器曾经进入了国内开发人员的视野,并在国内得到了普遍的注重和运用。arm是目前嵌入式领域运用最广泛的RISC微处置器
2、构造,凭仗低本钱、低功耗、高性能等优点占据了嵌入式系统运用领域的领先位置。ADS是ARM公司推出的arm集成开发环境,提供了对C和C+的支持,是目前开发ARM的主要工具。本文针对日益缩短的嵌入式开发周期,结合ARM系统开发调试阅历,对运用arm规范库进展运用程序开发作了比较系统的分析。. 千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构 ADS提供了ANSI C和C+规范库,本文仅讨论ANSI C库,该库包含下面几个部分: IS0 C库规范所定义的函数; 在semlhosted环境下用来实现C库
3、函数与目的相关的函数; C和C+编译器要运用的heIper函数。 该库提供的诸如文件输入输出之类的设备,运用了规范的ARM semihosted执行环境(semihosting是针对ARM目的机的一种机制,它可以根据运用程序代码的输入/输出恳求,与运转有调度功能的主机通讯,这种技术允许主机为通常没有输入和输出功能的目的硬件提供主机资源)。ARMulator、Angel和Multi-lCE都支持这个环境,可以运用ADs中提供的开发工具开发运用程序,然后在armulator或者是开发板上运转和调试该程序。假设要使运用系统独立于这个环境,那么必需重新实现C库中依赖于这个环境的相关函数,根据用户系统的
4、运转环境对C库进展适当的裁减。. 千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构 运用ANSI规范C库进展程序开发,不仅可以提高开发效率而且可以加强程序的可移植性。在程序中运用库函数,必需先建立一个库函数可以执行的环境,这些任务都由库中的函数完成。当运用程序链接了C库中的函数时,C库中的函数将完成: 创建C程序所需的执行环境(建立栈,假设需求创建一个堆,初始化程序运用的部分库); 调用main()函数开场执行C程序; 支持程序运用的Is0定义的函数; 捕获运转时的错误和信号,假设需求,根据错误
5、终止执行或程序退出。. 千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构 规范库中包含了部分依赖于规范库中包含了部分依赖于arm semihostedarm semihosted执行环执行环境的函数,这部分函数的函数名中包含有单个或两个下境的函数,这部分函数的函数名中包含有单个或两个下划线划线“-“-,需求重新实现这部分函数。假设在程序中定,需求重新实现这部分函数。假设在程序中定义这些函数,那么编译器就会运用新定义的函数,这个义这些函数,那么编译器就会运用新定义的函数,这个过程称为库函数的裁减。
6、普通情况下,只需求重新定义过程称为库函数的裁减。普通情况下,只需求重新定义很少的几个函数就可以运用很少的几个函数就可以运用C C库。库。 arm arm运用系统开场执行用户运用程序,必需先将运运用系统开场执行用户运用程序,必需先将运用程序加载到执行域,建立运用程序的执行环境。运用用程序加载到执行域,建立运用程序的执行环境。运用C C库时,这些繁琐的任务就大部分由库时,这些繁琐的任务就大部分由c c函数来完成了。函数来完成了。汇编程序完成系统初始化后,跳转到汇编程序完成系统初始化后,跳转到C C程序的人口程序的人口_main()(_main()(留意:不是留意:不是main()main(),当,
7、当C C程序中定义了程序中定义了main()main()主函数时,编译器就会生成主函数时,编译器就会生成_main_main代码代码) )。由。由_main()_main()引引导库函数完成导库函数完成C C执行环境的初始化,详细过程如下:执行环境的初始化,详细过程如下:. 千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构 将非启动代码的RO和RW执行域代码从加载域地址复制到执行域地址; 将ZI域清零; 跳转到_rt_entry。 调用_main()将大大简化汇编启动代码的编写,汇编代码仅需完成
8、系统硬件的初始化,而没有必要将代码从加载域地址复制到执行域地址,以及ZI域清零等任务。特别是当运用分布式加载时_main()的作用就更加明显了。但是_main()并没有建立C库运转必需的环境,这项任务由_rt_entry()完成,主要调用过程为: 调用_rt_stackheap_init()建立堆和栈; 调用_rt_lib_init()初始化援用的库函数;假设需求,建立main()函数的参数argc和argv等; 调用main()函数,执行运用程序,可以运用库函数; 用main()函数的前往值作参数调用exit()。.
9、千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构 _rt_entry并不是C函数,它是用arm C库编程的起始点。_rt_entry不能用C言语宴现,由于这时候堆栈还没有建立,堆栈由 rt_stackheap_init()来建立。 上面简单引见了C程序运用库函数时的调用过程,由_rtstackheap_init()建立C库运用的内存模型堆和栈。由于arm库是建立在semihosted执行环境的,它实现的内存模型是基于这个环境的,所以必需修正这个内存模型建立机制。表1列出了需求重新实现的函数,实现了这些函数,运用程序就可以脱离宿主机环境独立运转了。其中,必需重新实现的是
10、user initialstackheap(),由于默许的实现是基于semihosted执行环境的,该函数被nstackheapinit()调用创建内存模型,其他两个函数没有默许的实现。. 千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构. 千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构. 千锋嵌入式学院千锋嵌入式学院 最
11、专业的嵌入式培训机构最专业的嵌入式培训机构 实现该函数,必需满足下面的条件: 运用不超越96字节的栈空间; 除了R12(ip)外不要污染其他存放器; 将堆基址、栈基址、堆边境和栈边境分别存在ROR3作为前往参数; 堆必需坚持8个字节对齐。 实现例程如下:. 千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构 为了提高运用程序开发效率和可移植性,希望在目的系统上运用arm库提供的规范输人输出库函数。 高层输入输出函数是不依赖于目的系统环境的,但是高层输入输出函数必需调用依赖于目的系统的底层函数,才干
12、实现运用系统的输入输出。根据目的系统硬件环境重新定义这些底层函数,就可以运用库提供的规范inputoutput库函数了。下面以裁减arm规范库提供的printf系列输出函数为例来作阐明。 规范I/O库中最常用的是printf系列函数,包括_printf()、printf()、_fprintf()、fprintf()、vprintf()和vfprintf()。一切这些函数非透明地运用_FILE,并且仅依赖于fputc()和ferror()两个函数。函数_printf()和_fprintf()与printf()和fprintf()的区别仅在于前两个函数不能格式化浮点值。只需定义了本人的_FILE版
13、本和fputc()、ferror()函数,外加定义一个具有FILE类型的_stdout变量,就可以不作任何修正地运用printf系列、fwrite()、fputs()和puts()函数了。. 千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构 下面给出了详细实现的模板,可以根据实践需求修正。 #include struct_FILE int handle; /*用户需求的任何代码(假设运用文件仅是为了调试运用prinft在规范输出端输出信息,那么不需求任何文件处置代码)*/; FlLE_stdout;/*FILE在stdio.h中定义为:typedef struct_ FILE FILE;*/ int fputc(int ch,FILE*f). 千锋嵌入式学院千锋嵌入式学院 最专业的嵌入式培训机构最专业的嵌入式培训机构 /*用户实现的fpute代码。输出一个字符,可以根据需
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 前台的辞职报告模板合集七篇
- 迎新年晚会意义策划
- 2023一年级数学上册 八 认识钟表(小明的一天)教学实录 北师大版
- 2024-2025学年新教材高中化学 第五章 化工生产中的重要非金属元素 1.3 硫酸根离子检验、硫和含硫化合物的相互转化教学实录 新人教版必修2
- 2024秋八年级道德与法治上册 第一单元 成长的空间 第一课 相亲相爱一家人(他们这样做的原因)教学思路 人民版
- 2024年某城市地铁线路建设及运营管理长期租赁合同
- 实际正常和标准成本法ActualNormalandStandardCosting
- 广州市来穗人员服务管理局来穗人员积分制服务管理信息系统
- 2022天宫课堂第三课观后感10篇范文
- 2023二年级数学下册 7 万以内数的认识第8课时 近似数教学实录 新人教版
- 急性失血性休克液体复苏专家共识
- GB/T 3917.1-2009纺织品织物撕破性能第1部分:冲击摆锤法撕破强力的测定
- GB/T 35694-2017光伏发电站安全规程
- GB/T 19418-2003钢的弧焊接头缺陷质量分级指南
- 高中语文文言文断句课件
- 义务教育历史课程标准(2022年版)【重新整理版】
- 2023届新高考二卷语文点对点攻关训练专题:文学类文本阅读
- 2023-计算机考研408真题及答案
- 福建省宁德市各县区乡镇行政村村庄村名明细及行政区划代码
- 垃圾焚烧锅炉系统安装方案
- 应急物资台账新参考模板范本
评论
0/150
提交评论