移植uCOS-II到ARM7

更新时间:2023-08-18 10:36:01 阅读量: 资格考试认证 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

移植uCOS-II到ARM7

第7章 移植µC/OS-II到ARM7

周立功单片机

移植uCOS-II到ARM7

第7章 目录1. µC/OS-II简介 2.移植规划 3.移植µC/OS-II 4.移植代码应用到LPC2000

周立功单片机

移植uCOS-II到ARM7

第7章 目录1. µC/OS-II简介 2.移植规划 3.移植µC/OS-II 4.移植代码应用到LPC2000

周立功单片机

移植uCOS-II到ARM7

7.1 µC/OS-II简介 概述µC/OS-II读做“micro C O S 2”,意为“微控制器 操作系统版本2”。µC/OS-II是源码公开的著名实时内 核,可用于各类8位、16位和32位单片机或DSP。从 µC/OS算起,该内核已有10多年应用史,在诸多领域 得到广泛应用。 µC/OS-II是一个完整的、可移植、可固化、可剪 裁的占先式实时多任务内核。µC/OS-II使用ANSI C语 言编写,包含一小部分汇编代码,使之可以供不同架 构的微处理器使用。至今,从8位到64位,µC/OS-II已 在超过40种不同架构的微处理器上运行。

周立功单片机

移植uCOS-II到ARM7

µC/OS-II特点●提供源代码:购买作者撰写的《嵌入式实时操作系统µC/OS-II》一 书即可获得µC/OS-II V2.52版本的所有源代码,购买此书的其它版本 可以获得相应版本的全部源代码。 ●可移植性(portable):µC/OS-II的源代码绝大部分是使用移植性很 强的ANSI C写的,将与微处理器硬件相关的汇编语言使用量压缩到 最低的限度,以使µ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/OSII总是运行就绪条件下优先级最高的任务。周立功单片机

移植uCOS-II到ARM7

µ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层。周立功单片机

移植uCOS-II到ARM7

µC/OS-II特点●稳定性与可靠性:µC/OS-II是µC/OS的升级版,µC/OS自1992年 以来已经有数百个商业应用。µC/OS-II与µC/OS的内核是一样的, 只是提供了更多的功能。2000年7月,µC/OS-II在一个航空项目中 得到了美国联邦航空管理局对商用飞机的、符合RTCA DO – 178B 标准的认证。这表明,该操作系统的质量得到了认证,可以在任 何应用中使用。

作 者 及 其 著 作

周立功单片机

移植uCOS-II到ARM7

第7章 目录1. µC/OS-II简介 2.移植规划 3.移植µC/OS-II 4.移植代码应用到LPC2000

周立功单片机

移植uCOS-II到ARM7

7.2 移植规划 概述所谓“移植”,就是使一个实时内核能在其它的 微处理器或微控制器上运行。 尽管大部分µC/OS-II的代码是用C语言编写的,但 是在编写与处理器硬件相关的代码时还是不得不使用 汇编语言。移植的主要工作就是编写这些与处理器硬 件相关的代码。 在移植前针对所使用的微处理器进行规划,主要 有以下几个方面的考虑:编译器的选择、任务模式的 选择和支持的指令集。周立功单片机

移植uCOS-II到ARM7

µC/OS-II移植

——µC/OS-II硬件软件体系结构应用程序 (用户代码)

µC/OS-II (与处理器无关代码)OS_CORE.c OS_FLAG.c ...

µC/OS-II配置 (与应用无关)OS_CFG.H INCLUDES.H

µC/OS-II移植 (与处理器相关代码) 软件 硬件 CPU 定时器

移植时需要 编写的代码

用于产生 系统时钟周立功单片机

移植uCOS-II到ARM7

7.2 移植规划 编译器的选择目前,针对ARM处理器核的C语言编译器有很多, 如SDT、ADS、IAR、TASKING和GCC等。据了解, 目前在国内最流行的是ADS、SDT和GCC。SDT和 ADS均为ARM公司自己开发,ADS为SDT的升级版, 以后ARM公司不再支持SDT,所以不会选择SDT。 GCC虽然支持广泛,很多开发套件使用它作为编译器, 但是与ADS比较其编译效率较低,这对充分发挥芯片 性能很不利,所以最终使用ADS编译程序和调试。周立功单片机

移植uCOS-II到ARM7

7.2 移植规划 任务模式的取舍ARM7处理器核具有用户、系统、管理、中止、 未定义、中断和快中断七种模式,其中除用户模式外 其它均为特权模式。其中管理、中止、未定义、中断 和快中断模式与相应异常相联系,任务使用这些模式 不太适合。而系统模式除了是特权模式外,其它与用 户模式一样,因而可选为任务使用的模式只有用户模 式和系统模式。为了尽量减少任务代码错误对整个程 序的影响,缺省的任务模式定为用户模式,可选为系 统模式,同时提供接口使任务可以在这两种模式间切 换。

周立功单片机

移植uCOS-II到ARM7

7.2 移植规划 支持的指令集带T变量的ARM7处理器核具有两个指令集(可以 参考第3章 ):标准32位ARM指令集和16位Thumb指 令集,两种指令集有不同的应

用范围。为了最大限度 地支持芯片的特性,任务应当可以使用任意一个指令 集并可以自由切换,而且不同的任务应当可以使用不 同的指令集,这次移植的代码已经实现了这一点。

周立功单片机

移植uCOS-II到ARM7

第7章 目录1. µC/OS-II简介 2.移植规划 3.移植µC/OS-II 4.移植代码应用到LPC2000

周立功单片机

移植uCOS-II到ARM7

7.3 移植µC/OS-II 概述要移植一个操作系统到一个特定的CPU体系结构 上并不是一件很容易的事情,它对移植者有以下要求: 1. 对目标体系结构要有很深了解; 2. 对OS原理要有较深入的了解; 3. 对所使用的编译器要有较深入的了解; 4. 对需要移植的操作系统要有相当的了解; 5. 对具体使用的芯片也要一定的了解。

周立功单片机

移植uCOS-II到ARM7

概述要移植一个操作系统到一个特定的CPU体系结构 上并不是一件很容易的事情,它对移植者有以下要求: 1. 对目标体系结构要有很深了解;参考ARM公司的《ARM体系结构》文档 2. 对OS原理要有较深入的了解; 要移植一个操作系统到一个特定的CPU体系结构 上并不是一件很容易的事情,它对移植者有以下要求: 参考《嵌入式实时操作系统μC/OS-II 》一书 1. 对目标体系结构要有很深了解; 3. 对所使用的编译器要有较深入的了解; 2. 对OS原理要有较深入的了解; 参考ADS软件自带的编译器和连接器手册 3. 对所使用的编译器要有较深入的了解; 4. 对需要移植的操作系统要有相当的了解; 4. 对需要移植的操作系统要有相当的了解; 5. 对具体使用的芯片也要一定的了解。 参考《嵌入式实时操作系统μC/OS-II 》一书 5. 对具体使用的芯片也要一定的了解。

因为第4点的影响是全局性的,它决定移植代码的框架和功能。 所以重点介绍第4点。 参考具体芯片的数据手册和使用手册周立功单片机

移植uCOS-II到ARM7

概述

——移植需要编写的文件

根据µ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的所有寄存器。周立功单片机

移植uCOS-II到ARM7

概述

——移植代码包括的内容类型 数据类型 数据类型 宏 常量 函数 函数 函数 所属文件 OS_CPU.H OS_CPU.H OS_CPU.H OS_CPU.H OS_CPU.H OS_CPU_C.C OS_CPU_C.C 描述 与编译器无关的数据类型 堆栈的数据类型 开关中断的代码 定义堆栈的增长方向

任务切换时执行的代码 任务堆栈初始化函数 µC/OS-II在执行某些操作时 调用的用户函数,一般为空 进入多任务环境时运行优先 级最高的任务, 中断退出时的任务切换函数

移植内容 BOOLEAN、INT8U、INT8S、 … OS_STK OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL() OS_STK_GROWTH OS_TASK_SW OSTaskStkInit() OSInitHookBegin()、 OSInitHookEnd()、 … OSStartHighRdy() OSIntCtxSw()

函数 函数

*OS_CPU_A.ASM *OS_CPU_A.ASM

实际上,还有一个文件很重要,它就是IRQ.INC,它定义了一个汇编宏, OSTickISR() 中断服务程序 *OS_CPU_A.ASM 时钟节拍中断服务程序 它是μC/OS-II for ARM7通用的中断服务程序的汇编与C函数接口代码。时钟 节拍中断服务程序也没有移植,因为其与芯片和应用都强烈相关,需要用户自 己编写,不过可以通过IRQ.INC简化用户代码的编写。周立功单片机

移植uCOS-II到ARM7

关于头文件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定下来后不必改动 Includes.h congfig.h (µC/OS-II的系统文件需要包含的东西是固定的)。这样, µC/OS-II的系统文件需要编译的次数大大减少,编译时间随之减 少。UCOS内核文件 用户程序

周立功单片机

移植uCOS-II到ARM7

编写OS_CPU.H ——不依赖于编译的数据类型µCOS-II不使用C语言中的short、int、long等数据类型的定义, 因为它们与处理器类型有关,隐含着不可移植性。代之以移植性 强的整数数据类型,这样,既直观又可移植,不过这就成了必须 移植的代码。根据ADS编译器的特性,这些代码如程序清单7.1所 示。 typedef typedef typedef typedef typedef typedef typedef typedef typedef typedef unsigned char unsigned char signed char unsigned short signed short unsigned int signed int float double INT32U BOOLEAN; INT8U; INT8S; INT16U; INT16S; INT32U; INT32S; FP32; FP64; OS_STK;周立功单片机

移植uCOS-II到ARM7

编写OS_CPU.H ——使用软中断SWI作底层接口µCOS-II运行时,处理器可能处于的状态如下图所示:

ARM指令 用户模式

ARM指令集

Thumb指令集

Thumb指令 用户模式

用户模式 用户任务使用 的处理器模式 系统模式 ARM指令 系统模式 ARM7内核具有的指令集周立功单片机

Thumb指令 系统

模式

本文来源:https://www.bwwdw.com/article/03rj.html

Top