我的位置:首页 >> 浮选机

使用ARM标准C库进行嵌入式应用程序开发丁基橡胶

发布时间:2022-09-20 12:37:24 来源:力昕机械网

使用ARM标准C库进行嵌入式应用程序开发 随着对高处理能力、实时多任务、超低功耗等方面需求的增长,高端嵌入式处理器已经进入了国内开发人员的视野,并在国内得到了普遍的重视和应用。ARM是目前嵌入式领域应用最广泛的RISC微处理器结构,凭借低成本、低功耗、高性能等优点占据了嵌入式系统应用领域的领先地位。ADS是ARM公司推出的ARM集成开发环境,提供了对C和C++的支持,是目前开发ARM的主要工具。本文针对日益缩短的嵌入式开发周期,结合ARM系统开发调试经验,对使用ARM标准库进行应用程序开发作了比较系统的分析。

1 ARM标准库介绍

ADS提供了ANSI C和C++标准库,本文仅讨论ANSI C库,该库包含下面几个部分:

◇IS0 C库标准所定义的函数;
◇在semlhosted环境下用来实现C库函数与目标相关的函数;
◇C和C++编译器要使用的heIper函数。

该库提供的诸如文件输入输出之类的设备,使用了标准的ARM semihosted执行环境(semihosting是针对ARM目标机的一种机制,它能够根据应用程序代码的输入/输出请求,与运行有调度功能的主机通信,这种技术允许主机为通常没有输入和输出功能的目标硬件提供主机资源)。ARMulator、Angel和Multi-lCE都支持这个环境,可以使用ADs中提供的开发工具开发应用程序,然后在ARMulator或者是开发板上运行和调试该程序。如果要使应用系统独立于这个环境,则必须重新实现C库中依赖于这个环境的相关函数,根据用户系统的运行环境对C库进行适当的裁减。

使用ANSI标准C库进行程序开发,不仅可以提高开发效率而且可以增强程序的可移植性。在程序中使用库函数,必须先建立一个库函数可以执行的环境,这些工作都由库中的函数完成。当应用程序链接了C库中的函数时,C库中的函数将完成:

◇创建C程序所需的执行环境(建立栈,如果需要创建一个堆,初始化程序使用的部分库);
◇调用main()函数开始执行C程序;
◇支持程序使用的Is0定义的函数;
◇捕获运行时的错误和信号,如果需要,根据错误终止执行或程序退出。

2 裁减ARM标准C函数库

标准库中包含了部分依赖于ARM semihosted执行环境的函数,这部分函数的函数名中包含有单个或两个下划线“-”,需要重新实现这部分函数。如果在程序中定义这些函数,则编译器就会使用新定义的函数,这个过程称为库函数的裁减。一般情况下,只需要重新定义很少的几个函数就可以使用C库。

ARM应用系统开始执行用户应用程序,必须先将应用程序加载到执行域,建立应用程序的执行环境。使用C库时,这些繁琐的工作就大部分由c函数来完成了。汇编程序完成系统初始化后,跳转到C程序的人口_main()(注意:不是main(),当C程序中定义了main()主函数时,编译器就会生成_main代码)。由_main()引导库函数完成C执行环境的初始化,具体过程如下:

◇将非启动代码的RO和RW执行域代码从加载域地址复制到执行域地址;
◇将ZI域清零;
◇跳转到_rt_entry。

调用_main()将大大简化汇编启动代码的编写,汇编代码仅需完成系统硬件的初始化,而没有必要将代码从加载域地址复制到执行域地址,以及ZI域清零等工作。特别是当使用分布式加载时_main()的作用就更加明显了。但是_main()并没有建立C库运行必须的环境,这项工作由_rt_entry()完成,主要调用过程为:

◇调用_rt_stackheap_init()建立堆和栈;
◇调用_rt_lib_init()初始化引用的库函数;如果需要,建立main()函数的参数argc和argv等;
◇调用main()函数,执行应用程序,可以应用库函数;
◇用main()函数的返回值作参数调用exit()。

_rt_entry并不是C函数,它是用ARM C库编程的起始点。_rt_entry不能用C语言宴现,因为这时候堆栈还没有建立,堆栈由_ rt_stackheap_init()来建立。

上面简单介绍了C程序使用库函数时的调用过程,由_rt—stackheap_init()建立C库使用的内存模型--堆和栈。因为ARM库是建立在semihosted执行环境的,它实现的内存模型是基于这个环境的,所以必须修改这个内存模型建立机制。表1列出了需要重新实现的函数,实现了这些函数,应用程序就可以脱离宿主机环境独立运行了。其中,必须重新实现的是_user initial_stackheap(),因为默认的实现是基于semihosted执行环境的,该函数被_n_stackheap_init()调用创建内存模型,其他两个函数没有默认的实现。









实现该函数,必须满足下面的条件:

◇使用不超过96字节的栈空间;
◇除了R12(ip)外不要污染其他寄存器;
◇将堆基址、栈基址、堆边界和栈边界分别存在RO~R3作为返回参数;饮水设备
◇堆必须保持8个字节对齐。

实现例程如下:



为了提高应用程序开发效率和可移植性,希望在目标系统上使用ARM库提供的标准输人输出库函数。

高层输入输出函数是不依赖于目标系统环境的,但是高层输入输出函数必须调用依赖于目标系统的底层函数,才能实现应用系统的输入输出。依据目标系统硬件环境重新定义这些底层函数,就可以使用库提供的标准input/output库函数了。下面以裁减ARM标准库提供的printf系列输出函数为例来作说明。

标准I/O库中最常用的是printf系列函数,包括_printf()、printf()、_fprintf()、fprintf()、vprintf()和vfprintf()。所有这些函数非透明地使用_FILE,并且仅依赖于fputc()和ferror()两个函数。函数_printf()和_fprintf()与printf()和fprintf()的区别仅在于前两个函数不能格式化浮点值。只要定义了自己的_FILE版本和fputc()、ferror()函数,外加定义一个具有FILE类型的_stdout变量,就可以不作任何修改地使用printf系列、fwrite()、fputs()和puts()函数了。

下面给出了具体实现的模板,可以根据实际需要修改。

#include
struct__FILE
{
int handle;
/*用户需要的任何代码(如果使用文件仅是为了调试使用prin转角缸ft在标准输出端输出信息,则不需要任何文件处理代码)*/
};
FlLE_stdout;/*FILE在stdio.h中定义为:typedef struct_
FILE FILE;*/
int fputc(int ch,FILE*f){
/*用户实现的fpute代码。输出一个字符,可以根据需要实现*/
return ch;
}
int ferror(FILE*f){/*用户实现的ferror代码*/
return EOF;
}

结语

本文分析了ARM标准库的工作机理,给出了裁减C库进行程序开发的关键步骤。实际应用时需要根据具体的硬件环境和应用要求裁减C库,提高代码执行效率。南京专治输卵管堵塞医院是哪家
武汉治疗性病的医院哪个好
西安治疗输卵管堵塞专业的医院
廊坊哪治疗输卵管堵塞最好
相关阅读
食品包装塑料化的忧虑回拨器韩语培训电动工具硅微粉年糕机Trp

食品包装塑料化的忧虑商品成交以后,有的需要包,有的需要扎。如副食品种类繁多,包扎方法也十分讲究,要根据商品的性能,采用不同的包扎方法,做到包扎牢固、美观、节约。常用的有菱角包

04月18日 11:01
工业机器人产业人才缺口怎么补点读机电锤布线产品真空吸笔钻井泵Trp

工业机器人产业人才缺口怎么补工业机器人产业人才缺口怎么补 10:39来源:机器人库//原标题:工业机器人产业人才缺口怎么补目前国内工业机器人应用人才缺口将近10万,而根据工信部发展规划,到

04月18日 06:00
美国蓝多设计公司作品三临沧吸顶灯丁腈橡胶鼠标流延膜TRp

美国蓝多设计公司作品(三)声明:说明国产隔膜所占市场份额不断上升本文来源于络我们济南试金总结了以下几点大家简单了解下版冶金辅料权归原作者所有,仅供大家共同分享学习,如作者认为驱

04月03日 06:09
青岛19台智能酒精检测仪上岗人脸识别记住塑料蝶阀铜川夏威夷果三角阀高低床TRp

青岛19台智能酒精检测仪上岗 人脸识别记住每个驾驶员“酒精检测先刷脸,测试超标系统会自动锁定驾驶员信息,使他不能正常上路运营,”11月9日,19台智能酒精检测仪在山东青岛交运温馨巴士上

04月03日 03:17
13日PP市场延续阴跌走势关注石化动态搬运车万用表微单相机刨边机连接片TRp

13日PP市场延续阴跌走势 关注石化动态隔夜原油期货再次下跌,截至11月12日收盘时,纽约商品交易所2015年12月交货的轻质原油期货价格下跌1.18美元,收于每桶41.75美元,跌幅为2.75%。2015年12月交货的

04月03日 01:44
管理学是设计科学有机农药收录音机切削工具动物玩具防水套管TRp

管理学是设计科学从不同的角度出发,管理是不同的东西,有的说管理就是决策,有的说管理就是服务,不一而足。管理学是什么?也是众说纷纭。从近年来国内的发展趋势看,把管理看成硬科学的

04月02日 22:37
友情链接: 拉力试验机 服装 婚姻律师 家庭常备药 上海专职离婚诉讼律师推荐 上海财产分割 工作服门户 涂完亮甲多久可以沾水 治灰指甲用达克宁还是亮甲 紫皮大蒜治灰指甲是怎么回事 脚趾甲上面白白的是灰指甲吗 亮甲牌复方聚维酮碘搽剂的作用 亮甲和达克宁怎么配合使用 脚指甲变黑是灰指甲吗 脚得了灰指甲一般是什么原因 找医院 伊春肿瘤医院 北京房产分割 阿勒泰性病专科医院哪家好 婚姻律师事务所 黔西治疗癫痫病医院哪家好 上海市离婚律师服务 铁岭治疗牛皮癣专科医院 景德镇不孕不育 工程索赔 Drilling Tools 爱修维修 哈尔滨工作服定做厂家 云南服装定做 Optical cable Warranty Type Product Name 寻医问药 天津哪个医院看男科好 山东看多动症哪个医院好 成都哪里甲状腺医院好 无锡妇产哪家医院好 山东治疗精神科哪家医院好 默青网 Products In China