基于嵌入式实时操作系统的程序设计.ppt_第1页
基于嵌入式实时操作系统的程序设计.ppt_第2页
基于嵌入式实时操作系统的程序设计.ppt_第3页
基于嵌入式实时操作系统的程序设计.ppt_第4页
基于嵌入式实时操作系统的程序设计.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章 开发环境,在基于实时操作统的程序设计中,开发环境主要包括操作系统和微处理器两部分内容。 这两部分都是使用者根据实际设计的需要来选择的,在本书中,为了方便说明,实时操作系统选用C/OS - ,微处理器选择ARM7。,2.1 嵌入式实时操作系统的选择,在嵌入式系统领域,有很多实时操作系统可以选择,如嵌入式Linux、Windows CE和VxWorks等大批优秀的实时操作系统。它们当中有些是商业性的,代码不公开,有些代码比较长,不利于学习掌握。在众多的实时操作系统中,我们选择C/OS -作为例子。,C/OS -是Jean J.Labrosse设计的完整、可移植、可固化、可剪裁的占先式实时多任务内核,代码绝大部分是用标准C语言编写的。到现在为止, C/OS -已经被移植到了40多种徽处理器上,这些微处理器从8位到64位都有在各个领域中已经有数千个应用使用该内核。它有很好的稳定性和可靠性。 2000年7月, C/OS -在一个航空项目中取得了美国联邦航空管理局用于商用飞机、符合RTCA DO - 178B标准的认证。,C/OS -是一个公开源代码的操作系统,代码很短(约5 500行),与一些商用的公开源代码的实时内核相比,它的源代码清晰易读,结构协调,注释详尽。现在很多高等学校将C/OS -应用于实时操作系统数学。,C/OS -具有可移植性,绝大部分源代码是用C语言编写的;而与处处理器密切相关的部分用汇编语言缩写。但这一部分内容很少,方便使用者将内核移植到自己的微处理器上。 实践证明, C/OS -可以在很大一部分微处理器上运行。用户一旦移植了C/OS -到自已的微处理器,就可以在此基础上编写应用程序、并把C/OS -作为自己产品的一部分固化在里面。,C/OS -是可剪裁的,用户可以跟据自己的需要决定使用内核中的多少成分。剪裁可以通过定义宏来实现,简单易行。可剥夺性和多任务也是C/OS -的重要特性,他总是运行处于就绪态的优先级最高的任务。C/OS -可以管理64个任务,用户可以使用其中的56个。,绝大多数C/OS -的函数调用和服务的执行时间具有可确定性。 C/OS -提供了很多系统服务,例如信号量、互斥型信号量、事件标志、消息邮箱、消息队列、信号量、块大小固定的内存申请与释放及时间管理函数等。中断可以挂起C/OS -正在执行的任务,中断退出后执行的任务是当前就绪任务中优先级最高的任务,而不一定是被中断的任务。这就要求每个任务有自己的堆栈,保存任务切换和被中断时环境的上下文变量。,基于C/OS -具有以上优点,我们以它为例来介绍基于实时操作系统的编程方法,就更容易理解和接受。,8位的51单片机发展的技术比较成熟,简单易学,所以通常用作应用电子专业的重要课程来学。但是,该单片机的资源相对缺乏,如果在上面应用操作系统,就显得资源比较紧张。这就需要高超的技巧和经验;否则很容易出错。 与51单片机比较,32位的ARM系列微处理器就显得功能非常强大处理速度也快,内存资源相当丰富,具有使用实时操作系统的有利条件。,ARM公司是微处理器行业的一家知名企业。该企业设计了大量的高性价比的、低功耗的精简指令集微处理器。在设计上,ARM微处理器具有外形小,性能高,成本低和功耗低的特点。ARM微处理器适用于很多领域,比如嵌入式控制、消费教育类多媒体DSP和移动式应用等。,此外,ARM将其技术授权给世界上许多著名的半导体、软件和OEM厂商,每个厂商得到的都是一套独一无二的ARM相关技术及服务。利用这种合伙关系,ARM很快成为许多全球性RISC标准的缔造者。目前,总共有30家半导体公司与ARM签订了硬件技术使用许可协议,其中包括Intel、IBM、 LG半导体、NEC、SONY、菲利浦和美国国家半导体这样的大公司。至于软件系统的合伙人,则包括微软、升阳和MRI等一系列知名公司。,ARM微处理器目前有6个产品系列:ARM7、ARM9、ARM9E、ARMlOE、SecurCore和ARM11。这里选择ARM7系列的LPC2214。在ARM系列微控制器上有足够的系统资源运行C/OS - II,且在国内比较普及。,2.3 嵌入式实时操作系统的移植,实时操作系统和CPU选定以后,接下来的工作便是把系统移植到我们选择的ARM微处理器上。这类的代码在网上很多,移植的方法也大同小异。我们使用周立功公司提供的移植模板进行实例设计。,2.4 开发调试环境的建立,本节中,我们以ARM7TDMI微处理器为例说明典型的调试环境结构。在调试环境中,微处理器是作为执行高级调试与它支持的低级调试之间的接口存在的。一个调试系统通常分为3部分:一是通用计算机(用来运行调试软件,称之为调试主机);二是协议转换器(连接调试主机发出的高级命令与微处理器JTAG接口的低级命令之间的接口);三是调试目标。,EasyJTAG仿真器是周立功公司开发的LPC2000系列ARM7微控制器的JTAG仿真器,支持ADS1.2集成开发环境,支持单步、 全速及断点等调试功能,支持下载程序到片内FLASH和特定型号的片外FLASH,采用ARM公司提出的标准20脚JTAG仿真调试接口。,2.5 工程模板的使用,广州周立功单片机发展有限公司提供了LPC2200专用工程模板本书中使用的模板为ARM Executable Image forc/os - II(MaigcARM2200)。该模板包括以下几个文件组。下面结合实例说明模板中这些文件组如何定制。,2.5.1 scf文件组,scf为分散加载描述文件组,包含mem_a.scf、mem_b.scf和mem_c.scf。工程模板使用了ADS的分散加载机制。只要编辑相应的分散加载描述文件,即可将代码段和数据段分别定位到指定的地址上。一般用户可以使用默认设置。,2. 5.2 *h文件组,该组指的是头文件组,包含: OS_CFGH 操作系统配置文件,定制操作系统; INCLUDESH 总头文件C/OS -要求; LPC2294.H 定义微处理器的相关寄存器; config.H 总头文件,模板要求; targetH 目标头文件声明; os_cpuH 操作系统移植头文件; uCOS_IIH 操作系统自带头文件。 以上文件中的OS_CFGH、configh和os_cpuH与用户的应用密切相关,其他几个文件一般用户可以设置为默认。下面说明这几个文件的设置方法。,OS- CFGH,为操作系统配置文件,用户进行操作系统的剪裁定制就是靠更改这个文件实现的,例如: OS_MAX_EVENTS:在应用中最大事件控制块的个数,包括信号量、邮箱和消息队列的总和。因为每个信号量、邮箱和消息队列都占用1个事件控制块,例如在实例程序中,用了1个邮箱、1个消息队列和1个互斥信号量,所以该项参数的最小值应为3。但是在实际应用时,应设置得大一些,以备扩展事件用;在实例中设置为8。,OS_MAX_MEM_PART:定义系统中内存块的最大数目。如果不用内存控制,则设置为默认值即可。在实例中设置为模板默认值5。 OS_MAX_QS:定义系统中可以定义的消息队列的最大队列块的数目。在实例中用了1个消息队列,所以该值最小设定为1。为了扩展兼容,在实例中设置为4。,OS_MAX_TASKS;定义用户程序中可以使用的最多任务数。该值不能大于62。该项值的设定应该比实际应用的任务数大一些,这样在增加新的任务时就不需要修改这一项的值。但是不能比实际任务数大太多,这样会浪费宝贵的内存空间。在实例中用了7个任务,该项定义为10。,OS_LOWEST_PRIO:设定系统中要使用的最低任务的优先级。设定该值可以节省操作系统使用RAM的空间,任务的最低优先级和最大任务数没有直接关系。操作系统留了两个任务优先OS_LOWEST_PRIO和OS_LOWEST_PRIO -1给空闲任务和统计任务,所以用户可以用的实际任务优先级的值是在0 OS_LOWEST_PRIO -2之间的数。,在实例中该值设定为20,实际可用的优先级为0-18,其中优先级0-3为操作系统作者建议保留的级别,以备升级之用。如果为了产品与新版本的操作系统兼容,则可以利用的优先级为4-18,实际应用中有7个任务。这样设置的目的是,在各个任务优先级之间彼此可以间隔,在插入新任务或者使用互斥信号量时就不用调整其他任务的优先级了。,OS_TICKS_PER_SEC:设定调用OSTimeTick()函数的频率,也就是系统时钟最小单位的设定。如果这个值设定得太大,则系统的实时性会受到影响;如果设置得太小,则CPU会忙于时钟处理而增大开销。根据微处理器的不同,该值设置为10-100 ms的周期为宜,对应频率为10-100 Hz。在实例中设置20 ms的周期,即将该值设置为50。,其他的一些项目,例如事件标志、消息邮箱、内存管理等的使能标志定义,在做实验时建议直接使用模板的默认值(全部使能),但在实际应用中应该进行剪裁。,2config.h,config.h文件中主要包括一些宏定义和文件包含操作。对于宏定义,使用者可以根据自己的喜好将一些数据类型定义为自己习惯的标识符。在实际应用中,这一部分内容可以不动。如果不喜欢用模板定义的名称,则可以用标准的定义变量方法,例如在应用中可以直接用unsigned char定义无符号字符型变量,而不用uint8或INT8U。 configh文件的另一部分内容是定义文件包含。用户根据需要包含自己定义的头文件。,# include “I2C. h“ . # include “ZLG7290. h“ # define ZLG-7290ADDR 0x70 # include “lcddriver. h“ # include “GUI_BASIC. H“ .,3. os_cpu.h,os_cpu.h文件中主要定义与编译器无关的数据类型,这主要是为了系统移植用。因为操作系统为了增加可移植性,用了一些“不合法的数据类型”,例如INT8U。这在任何编译器下都是错误的。操作系统移植就是要将这个INT8U进行宏定义,定义为用户所用编译器所理解的类型。这部分操作在系统移植阶段已经做好了,用户可以不更改。还有一部分是与ARM7相关的类型,主要是一些软件中断的定义,用来处理函数的底层接口。这是移植操作时完成的任务,用户可以不需要修改。,2.5.3 arm文件组,这一部分内容主要是与操作系统的移植有关,包括os_cpu_as和os_cpu_cc文件。 os_cpu_as文件的主要内容是C/OS -在LPC2l0x上的移植代码汇编语言部分。 os_cpu_cc文件的主要内容是C/OS -在lPC210x上的移植代码C语言部分,包括任务堆栈初始化代码、钩子函数和软中断服务函数。,2.5.4 target文件组,target文件组包括targetc、IRQs和Startups文件。 targetc文件为LPC2200目标板的特殊代码的头文件。每个用户工程都必须包含targetc文件,而且用户可以根据需要修改它的内容。 IRQs文件为用于添加IRQ中断句柄的文件,允许中断嵌套。 Startups文件为LPC2200的启动代码,包括入口的初始化代码,每个用户工程应该根据自己的实际需要有一个自己专用的Startups文件。,1 target.C,targetc文件中包含关于系统时钟中断定义的函数Timer0Init() 。在程序清单中没有对PR进行设置,实际上选择了默认值0(不分频)。当T0MR0=(Fpclk/50)时,中断时间间隔就是20 ms。 void Timer0Init(void) T0IR=0Xffffffff; T0TC=0; T0TCR=0X01; T0MCR=0X03; T0MR0=(Fpclk/50); 其他内容略,2.IRQ.s,IRQs文件中包含中断句柄的定义,只要按照要求添加即可。,3. Startup. S,Startups文件是关于LPC2290的启动代码,用户应该根据自己工程的需要更改其中的内容,例如在用户程序中,需要用FIQ中断,就应该定义FIQ中断堆栈的大小。,2.5.5 C/OS -文件组,包括C/OS -实时操作系统的全部文件。默认情况下可以包含全部的文件,用户不用进行任何修改。但也可以根据实际情况进行剪裁,例如在应用时不用信号量管理函数就可以将OS_SEM.C文件从工程中移除,且对工程编译产生

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论