欢迎来到天天文库
浏览记录
ID:59294038
大小:513.50 KB
页数:49页
时间:2020-09-20
《嵌入式软件开发ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、嵌入式软件开发嵌入式开发过程“PC软件”独立的嵌入式应用当程序员开始开发一个基于ARM应用的时候,你可以使用ARM的ADS编写类似于“HELLOWORLD”的程序,使用ARMulator或者在评估板上来调试,但当你把他移植到独立的嵌入式应用设备中时,下面这些问题就成为我们首要考虑的:硬件环境中所使用的C库函数目标板上的存储器资源应用程序的初始化议程PC软件的构造定制标准C库函数到目标板定制IMAGE的存储器映射到目标板复位和初始化深层次的存储器器映象考虑编译和调试IMAGEADS默认的标准C库ANSICinput/outputerrorhandlingstack&heapsetupo
2、therSemihostingSupport应用程序调用的C库函数eg:fputc()设备驱动层使用semihostingSWI’seg:_sys_write()调试工具环境CLibraryDebugAgentC库函数功能是支持PC软件的,而目标板上的可执行软件则依赖相关的硬件资源;在ARM体系中,我们可以采用semihosting通过相应的驱动来进行调试。ADS默认的存储器映射在默认的情况下,我们链接、定位、运行在0x8000heap被直接放置在数据区的上面堆栈的基地址是通过调试环境从C库函数的StartupCode里读取出来的。ARMulator=>fromconfigurati
3、onfile(peripherals.ami)default=0x08000000Multi-ICE=>fromdebuggerinternalvariable$top_of_memorydefault=0x80000RORWZI0x8000链接时确定由调试环境提供Heap(malloc,alloc)StackCLibraryUserCode应用程序启动__maincopycodeanddatazerouninitializeddata__rt_entrysetupapplicationstackandheapinitializelibraryfunctionscalltop-lev
4、elconstructors(C++)Exitfromapplicationmain()causesthelinkertopullinlibraryinitializationcode程序入口点Agenda一个PC软件的构造定制标准C库函数到目标板定制IMAGE的存储器映射到目标板复位和初始化深层次的存储器器映象考虑编译和调试IMAGE重定向C库函数(1)SemihostingSupportANSICinput/output你可以使用适合你目标板运行的驱动来替换标准C库中的设备驱动。Eg:printf()可打印到LCD上,而不是打印控制台上input/outputANSICCLibr
5、aryUserCodeDebugAgentTargetHardwareRetarget重定向C库函数(2)要重定向C库函数,简单的办法是使用你自己的可执行的semihostingSWIs来代替原来的C库函数,从而来满足你的系统要求比如说,theprintf()系列函数(sprintf()除外)都会调用fputc().在默认情况下fputc()的执行使用了semihostingSWI.用下面的语句来代替:externvoidsendchar(char*ch);intfputc(intch,FILE*f){/*e.g.writeacharactertoanLCD*/chartem
6、pch=ch;sendchar(&tempch);returnch;}可查看在ADSEmbeddedexample目录下的retarget.c,可看到更多的重定向例子你可以确定有不在连接时使用semihostingSWI的吗?…...消除C库函数中的semihosting为了确保在连接时没有函数使用了semihostingSWIs,你可以在程序中加入下面的句子:#pragmaimport(__use_no_semihosting_swi)如果在程序中仍然使用了semihosting,编译时将会报错:Error:Symbol__semihosting_swi_guardmulti
7、plydefined修改:如果使用(check-verboselinkeroutputforoccurrencesofIuse_semihosting_swi),那么连接器将会把那些使用了smeihosting的程序列出来,然后:提供你自己可运行的功能函数。在ADS1.2编译器和库函数手册,表4-2给出了所有使用了semihosting的C库函数。注意:连接器在用户自己的应用代码中不会出现任何有关semihostingSWI使用的报告。Agenda一个PC
此文档下载收益归作者所有