基于ARM的嵌入式系统开发要点(一)-Read.doc

基于ARM的嵌入式系统开发要点(一)-Read.doc

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

基于ARM的嵌入式系统开发要点(一) ——嵌入式程序开发过程 ARM系列微处理器作为全球 16/32RISC处理器市场的领先者,在许多领域内得到了成功的应用。近年来 ,ARM在 国内的应用也得到了飞速的发展,越来越多的公司和工程师在基于ARM的平台上面开发自己的产品。 与传统的4/8位单片机相比 ,ARM的性能和处理能力当然是遥遥领先的 ,但与之相应,ARM的系统设计复杂和 难度,较之传统的设计方法也大大提升了。本文旨在通过讨论系统程序设计中的几个基本方面,来说明基于ARM的嵌入式系统开发的一些特点,并提出和解决了一些常见问题。 文章分成几个相对独立的章节刊载。第一部分讨论了基于ARM的嵌入式程序开发和移植过程中的一些基本概念。 1. 嵌入式程序开发过程 不同于通用计算机和工作站上的软件开发工程,一个嵌入式程序的开发过程具有很多特点和不确定性。其中最重要的一点是软件跟硬件的紧密耦合特性。 这是两类简化的嵌入式系统层次结构图。由于嵌入式系统的灵活性和多样性,上面图中各个层次之间缺乏统一的标准,几乎每一个独立的系统都不一样。这样就给上层的软件设计人员带来了极大的困难。第一,在软件设计过程中过多地考虑硬件,给开发和调试都带来了很多不便,第二,如果所有的软件工作都需要在硬件平台就绪之后进行,自然就延长了整个系统的开发周期。这些都是因该从方法上加以改进和避免的问题。 为了解决这个问题,工程和设计人员提出了许多对策,首先在应用于驱动(或API)着一层,可以设计成相对统一的一些接口函数,这对于具体的某一个开发平台或在某个公司内部,是完全做得到的。这样一来,就大大提高了应用软件设计的标准化程度,方便了应用程序在跨平台之间的复用和移植。 对于驱动/硬件抽象这一层,因为直接驱动硬件,其标准化变得非常困难甚至不太可能。但是为了简化程序的调试和缩短开发周期,我们可以在特定的EDA工具环境下面进行开发,通过后再进行移植到硬件平台的工作。这样既可以保证程序逻辑设计的正确性,同时使得软件开发可平行甚至超前于硬件开发进程。 我们把脱离于硬件的嵌入式软件开发阶段称之为“PC软件”的开发,可以用下面的图来示意一个嵌入式系统程序的开发过程。 图-2嵌入式系统产品的开发过程 在“PC软件”开发阶段,可以用软件仿真,即指令级模拟的方法,来对用户程序进行验证。在ARM公司的开发工具中,ADS内嵌的ARMulator 和 RealView 开发工具中的ISS,都提供了这项功能。在模拟环境下,用户可以设置ARM处理器的型号,时钟频率等,同时还可以配置存储器访问接口的时序参数。程序在模拟环境下运行,不但能够进行程序的运行流程和逻辑测试,还能够统计系统运行的时钟周期数,存储器访问周期数,处理器运行式的流水线状态(有效周期,等待周期,连续和非连续访问周期))等信息。这些宝贵的信息是在硬件调试阶段都无法取得的,对于程序的性能评估非常有价值。 为了更加完整和真实地模拟一个目标系统,ARMulator和ISS还提供了一个开放的API编程环境。用户可以用标准C来描述各种各样的硬件模块,连同工具提供的内核模块一起,组成一个完整的“软”硬件环境。在这个环境下面开发的软件,可以更大程度地接近最终的目标。 利用这种先进的EDA工具环境,极大地方便了程序开发人员进行嵌入式开发的工作。当完成一个“PC软件”的开发之后,只要进行正确的移植,一个真正的嵌入是软件就开发成功了。而移植过程是相对比较容易形成一套规范的流程的,其中三个最重要的方面是: 考虑硬件对库函数的支持 符合目标系统上的存储器资源分布 应用程序环境的初始化 2. 开发工具环境里面的库函数 如果用户程序里调用了跟目标相关的一些库函数,则在应用前需要裁剪这些函数以适合再目标上允许的要求。主要考虑于下三类函数: 访问静态数据的函数 访问目标存储器的函数 使用semihosting(半主机)机制实现的函数 这里所指的C库函数,除了ISO C标准里面定义的函数以外,还包括由编译工具提供的另外一些扩展函数和编译辅助函数。 2.1裁剪访问静态数据的函数 库函数里面的静态数据,基本上都是在头文件里面加以定义的。比如CTYPE类库函数,其返回值都是通过预定义好的CTYPE属性表来获得的。比如,想要改变isalpha()函数的缺省判断,则需要修改对应CTYPE属性表里对字符属性的定义。 2.2裁剪访问目标存储器的函数 有一类动态内存管理函数,如malloc()等,其本身是独立于目标系统而运行的;但是它所使用的存储器空间需要根据目标来确定。所以malloc()函数本身并不需要裁剪或移植,但那些设置动态内存区(地址和空间)的函数则是跟目标系统的存储器分布直接相关的,需要进行移植。例如堆栈的

您可能关注的文档

文档评论(0)

wendang_12 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档