ARM入式软件开发.ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM入式软件开发

嵌入式软件开发 嵌入式开发过程 议程 PC软件的构造 定制标准C库函数到目标板 定制IMAGE的存储器映射到目标板 复位和初始化 深层次的存储器器映象考虑 编译和调试IMAGE ADS默认的标准C库 ADS默认的存储器映射 在默认的情况下,我们链接、定位、运行在0x8000 heap 被直接放置在数据区的上面 堆栈的基地址是通过调试环境从C库函数的Startup Code 里读取出来的。 ARMulator = from configuration file (peripherals.ami) default = 0Multi-ICE = from debugger internal variable $top_of_memory default = 0x80000 应用程序启动 __main copy code and data zero uninitialized data Agenda 一个PC软件的构造 定制标准C库函数到目标板 定制IMAGE的存储器映射到目标板 复位和初始化 深层次的存储器器映象考虑 编译和调试IMAGE 重定向C库函数 (1) 你可以使用适合你目标板运行的驱动来替换标准C库中的设备驱动。 Eg: printf( ) 可打印到LCD上,而不是打印控制台上 重定向C库函数(2) 要重定向C库函数,简单的办法是使用你自己的可执行的semihosting SWIs来代替原来的C库函数,从而来满足你的系统要求 比如说, the printf()系列函数(sprintf()除外) 都会调用fputc(). 在默认情况下fputc()的执行使用了semihosting SWI. 用下面的语句来代替: extern void sendchar(char *ch); int fputc(int ch, FILE *f) { /* e.g. write a character to an LCD */ char tempch = ch; sendchar(tempch); return ch; } 可查看在ADS Embedded example目录下的retarget.c,可看到更多的重定向例子 你可以确定有不在连接时使用semihosting SWI 的吗?…... 消除C库函数中的semi hosting 为了确保在连接时没有函数使用了semi hosting SWIs ,你可以在程序中加入下面的句子: #pragma import(__use_no_semihosting_swi) 如果在程序中仍然使用了semihosting ,编译时将会报错: Error: Symbol __semihosting_swi_guard multiply defined 修改: 如果使用 (check -verbose linker output for occurrences of I use_ semihosting_ swi), 那么连接器将会把那些使用了smeihosting 的程序列出来, 然后: 提供你自己可运行的功能函数。 在ADS 1.2 编译器和库函数手册, 表4-2给出了所有使用了semihosting的C库函数。 注意: 连接器在用户自己的应用代码中不会出现任何有关 semihosting SWI使用的报告。 Agenda 一个PC软件的构造 定制标准C库函数到目标板 定制IMAGE的存储器映射到目标板 复位和初始化 深层次的存储器器映象考虑 编译和调试IMAGE 分散加载(Scatterloading) 在一个实际应用当中,你可能并不想在0x8000处开始运行。 大多数嵌入式系统都有存储器设备,他们的地址空间是在整个存储器映射中交叉出现的。 分散加载提供了一种把你的代码和数据放在不同的存储器定位上的办法 分散加载定义了两种类型的存储器区域。 Load 区: - 在reset/load时保留了应用程序的代码和数据 (典型应用为 ROM). Execution 区 – 在程序执行的同时保留了程序的代码和数据。在应用程序启动 期间,每个load区都可创建一个或多个可执行区。 分散加载了的应用把详细的存储器映射保存在一个描述文件中,作为一个参数给armlink使用 eg: armlink program.o -scatter scatter.scf -o program.axf 分散加载 (简单例子) Scatter 描述文件 通配符(*)语法允许简单的对CODE 和DATA 进行分组 链接器放置规则 在每个可执行区,链接器通过一些基本的规则来

文档评论(0)

130****9768 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档