移植μCOSII到

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

嵌入式技术与应用智能电器与智能系统省重点实验室移植μC/OS-II到ARM76CHAPTER第6章目录1.μC/OS-II简介2.移植规划3.移植μC/OS-II4.移植代码应用到LPC2000第6章目录1.μC/OS-II简介2.移植规划3.移植μC/OS-II4.移植代码应用到LPC20006.1μC/OS-II简介•概述μC/OS-II是源码公开的著名实时内核,可用于各类8位、16位和32位单片机或DSP。从μC/OS算起,该内核已有10多年应用史,在诸多领域得到广泛应用。μC/OS-II是一个完整的、可移植、可固化、可剪裁的占先式实时多任务内核。μC/OS-II使用ANSIC语言编写,包含一小部分汇编代码,使之可以供不同架构的微处理器使用。至今,从8位到64位,μC/OS-II已在超过40种不同架构的微处理器上运行。•μC/OS-II特点●提供源代码:购买作者撰写的《嵌入式实时操作系统μC/OS-II》一书即可获得μC/OS-IIV2.52版本的所有源代码,购买此书的其它版本可以获得相应版本的全部源代码。●可移植性(portable):μC/OS-II的源代码绝大部分是使用移植性很强的ANSIC写的,将与微处理器硬件相关的汇编语言使用量压缩到最低的限度,以使μC/OS-II便于移植到其它微处理器上。目前,μC/OS-II已经被移植到多种不同架构的微处理器上。●可固化(ROMmable):只要具备合适的软硬件工具,就可以将μC/OS-II嵌入到产品中成为产品的一部分。●可剪裁(scalable):μC/OS-II使用条件编译实现可剪裁,用户程序可以只编译自己需要的(μC/OS-II的)功能,而不编译不要需要的功能,以减少μC/OS-II对代码空间和数据空间的占用。●可剥夺(preemptive):μC/OS-II是完全可剥夺型的实时内核,μC/OS-II总是运行就绪条件下优先级最高的任务。•μC/OS-II特点●多任务:μC/OS-II可以管理64个任务,然而,μC/OS-II的作者建议用户保留8个给μC/OS-II。这样,留给用户的应用程序最多可有56个任务。●可确定性:绝大多数μC/OS-II的函数调用和服务的执行时间具有确定性,也就是说,用户总是能知道μC/OS-II的函数调用与服务执行了多长时间。●任务栈:μC/OS-II的每个任务都有自己单独的栈,使用μC/OS-II的占空间校验函数,可确定每个任务到底需要多少栈空间。●系统服务:μC/OS-II提供很多系统服务,例如信号量、互斥信号量、时间标志、消息邮箱、消息队列、块大小固定的内存的申请与释放及时间管理函数等。●中断管理:中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。•μC/OS-II特点●稳定性与可靠性:μC/OS-II是μC/OS的升级版,μC/OS自1992年以来已经有数百个商业应用。μC/OS-II与μC/OS的内核是一样的,只是提供了更多的功能。2000年7月,μC/OS-II在一个航空项目中得到了美国联邦航空管理局对商用飞机的、符合RTCADO–178B标准的认证。这表明,该操作系统的质量得到了认证,可以在任何应用中使用。作者及其著作第6章目录1.μC/OS-II简介2.移植规划3.移植μC/OS-II4.移植代码应用到LPC20006.2移植规划•概述所谓“移植”,就是使一个实时内核能在其它的微处理器或微控制器上运行。尽管大部分μC/OS-II的代码是用C语言编写的,但是在编写与处理器硬件相关的代码时还是不得不使用汇编语言。移植的主要工作就是编写这些与处理器硬件相关的代码。在移植前针对所使用的微处理器进行规划,主要有以下几个方面的考虑:编译器的选择、任务模式的选择和支持的指令集。•μC/OS-II移植应用程序(用户代码)μC/OS-II(与处理器无关代码)OS_CORE.cOS_FLAG.c...μC/OS-II配置(与应用无关)OS_CFG.HINCLUDES.HμC/OS-II移植(与处理器相关代码)CPU定时器硬件软件——μC/OS-II硬件软件体系结构用于产生系统时钟移植时需要编写的代码6.2移植规划•编译器的选择针对ARM处理器核的C语言编译器有很多,如SDT、ADS、IAR、TASKING和GCC等。目前国内最流行的是ADS、SDT和GCC。SDT和ADS均为ARM公司开发,ADS为SDT的升级版,以后ARM公司不再支持SDT,所以不会选择SDT。GCC虽然支持广泛,很多开发套件使用它作为编译器,但是与ADS比较其编译效率较低,这对充分发挥芯片性能很不利,所以最终使用ADS编译程序和调试。6.2移植规划•任务模式的取舍ARM7处理器核具有用户、系统、管理、中止、未定义、中断和快中断七种模式,其中除用户模式外其它均为特权模式。其中管理、中止、未定义、中断和快中断模式与相应异常相联系,任务使用这些模式不太适合。而系统模式除了是特权模式外,其它与用户模式一样,因而可选为任务使用的模式只有用户模式和系统模式。为了尽量减少任务代码错误对整个程序的影响,缺省的任务模式定为用户模式,可选为系统模式,同时提供接口使任务可以在这两种模式间切换。6.2移植规划•支持的指令集带T变量的ARM7处理器核具有两个指令集:标准32位ARM指令集和16位Thumb指令集,两种指令集有不同的应用范围。为了最大限度地支持芯片的特性,任务应当可以使用任意一个指令集并可以自由切换,而且不同的任务应当可以使用不同的指令集,这次移植的代码已经实现了这一点。第6章目录1.μC/OS-II简介2.移植规划3.移植μC/OS-II4.移植代码应用到LPC20006.3移植μC/OS-II•概述要移植一个操作系统到一个特定的CPU体系结构上并不是一件很容易的事情,它对移植者有以下要求:1.对目标体系结构要有很深了解;2.对OS原理要有较深入的了解;3.对所使用的编译器要有较深入的了解;4.对需要移植的操作系统要有相当的了解;5.对具体使用的芯片也要一定的了解。要移植一个操作系统到一个特定的CPU体系结构上并不是一件很容易的事情,它对移植者有以下要求:1.对目标体系结构要有很深了解;2.对OS原理要有较深入的了解;3.对所使用的编译器要有较深入的了解;4.对需要移植的操作系统要有相当的了解;5.对具体使用的芯片也要一定的了解。•概述要移植一个操作系统到一个特定的CPU体系结构上并不是一件很容易的事情,它对移植者有以下要求:1.对目标体系结构要有很深了解;2.对OS原理要有较深入的了解;3.对所使用的编译器要有较深入的了解;4.对需要移植的操作系统要有相当的了解;5.对具体使用的芯片也要一定的了解。参考ARM公司的《ARM体系结构》文档参考《嵌入式实时操作系统μC/OS-II》一书参考ADS软件自带的编译器和连接器手册参考《嵌入式实时操作系统μC/OS-II》一书参考具体芯片的数据手册和使用手册因为第4点的影响是全局性的,它决定移植代码的框架和功能。所以重点介绍第4点。•概述根据μC/OS-II的要求,移植μC/OS-II到一个的体系结构上需要提供2个或3个文件:OS_CPU.H(C语言头文件)OS_CPU_C.C(C程序源文件)OS_CPU_A.ASM(汇编程序源文件)其中OS_CPU_A.ASM在某些情况下不需要。不需要OS_CPU_A.ASM的必须满足以下苛刻条件,而同时满足这些条件的微控制器几乎没有:1.可以直接使用C语言开关中断;2.可以直接使用C语言编写中断服务程序;3.可以直接使用C语言操作堆栈指针;4.可以直接使用C语言保存CPU的所有寄存器。——移植需要编写的文件•概述移植内容类型所属文件描述BOOLEAN、INT8U、INT8S、…数据类型OS_CPU.H与编译器无关的数据类型OS_STK数据类型OS_CPU.H堆栈的数据类型OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()宏OS_CPU.H开关中断的代码OS_STK_GROWTH常量OS_CPU.H定义堆栈的增长方向OS_TASK_SW函数OS_CPU.H任务切换时执行的代码OSTaskStkInit()函数OS_CPU_C.C任务堆栈初始化函数OSInitHookBegin()、OSInitHookEnd()、…函数OS_CPU_C.CμC/OS-II在执行某些操作时调用的用户函数,一般为空OSStartHighRdy()函数*OS_CPU_A.ASM进入多任务环境时运行优先级最高的任务,OSIntCtxSw()函数*OS_CPU_A.ASM中断退出时的任务切换函数OSTickISR()中断服务程序*OS_CPU_A.ASM时钟节拍中断服务程序实际上,还有一个文件很重要,它就是IRQ.INC,它定义了一个汇编宏,它是μC/OS-IIforARM7通用的中断服务程序的汇编与C函数接口代码。时钟节拍中断服务程序也没有移植,因为其与芯片和应用都强烈相关,需要用户自己编写,不过可以通过IRQ.INC简化用户代码的编写。——移植代码包括的内容•关于头文件includes.h和config.hμC/OS-II要求所有.C文件的都要包含都文件includes.h,这样使得用户项目中的每个.C文件不用分别去考虑它实际上需要哪些头文件。使用INCLUDES.H的缺点是它可能会包含一些实际不相关的头文件,这意味着每个文件的编译时间可能会增加,但却增强了代码的可移植性。在本移植中另外增加了一个头文件config.h,我们要求所有用户程序必须包含config.h,在config.h中包含includes.h和特定的头文件和配置项。而μC/OS-II的系统文件依然只是包含includes.h,即μC/OS-II的系统文件完全不必改动。所有的配置改变包括头文件的增减均在config.h中进行,而includes.h定下来后不必改动(μC/OS-II的系统文件需要包含的东西是固定的)。这样,μC/OS-II的系统文件需要编译的次数大大减少,编译时间随之减少。congfig.hUCOS内核文件Includes.h用户程序•编写OS_CPU.HμCOS-II不使用C语言中的short、int、long等数据类型的定义,因为它们与处理器类型有关,隐含着不可移植性。代之以移植性强的整数数据类型,这样,既直观又可移植,不过这就成了必须移植的代码。根据ADS编译器的特性,这些代码如程序清单7.1所示。typedefunsignedcharBOOLEAN;typedefunsignedcharINT8U;typedefsignedcharINT8S;typedefunsignedshortINT16U;typedefsignedshortINT16S;typedefunsignedintINT32U;typedefsignedintINT32S;typedeffloatFP32;typedefdoubleFP64;typedefINT32UOS_STK;——不依赖于编译的数据类型•编写OS_CPU.HμCOS-II运行时,处理器可能处于的状态如下图所示:——使用软中断SWI作底层接口Thumb指令集ARM指令集用户模式系统模式用户任务使用的处理器模式ARM7内核具有的指令集ARM指令用户模式ARM指令系统模式Thumb指令系统模式Thumb指令用户模式•编写OS_CPU.H为了使底层接口函数与处理器状态无关,同时在任务调用相应的函数不需要知道函数位置,本移植使用软中断指令SWI作为底层接口,使用不同的功能号区分不同的函数。软中断功能号分配如下表所示,未列出的为保留功能。——使用软中断SWI作底层接口功能号接口函数简介0x00voidOS_TASK_SW(void)任务级任务切换函数0x01_OSStartHighRdy(void)运行优先级最高的任务,由OSStartHighRdy产生0x0

1 / 72
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功