书签 分享 收藏 举报 版权申诉 / 262

类型《嵌入式实时操作系统uC OS-2教程》课件第10章.ppt

  • 文档编号:2336140
  • 上传时间:2024-09-01
  • 格式:PPT
  • 页数:262
  • 大小:1,000KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    嵌入式实时操作系统uC OS-2教程 嵌入式实时操作系统uC OS-2教程课件第10章 嵌入式 实时 操作系统 uC OS 教程 课件 10
    资源描述:

    1、第10章 C/OS-C/OS-的移植与应用的移植与应用 第10章 C/OS-的移植与应用的移植与应用 10.1 移植的基本方法移植的基本方法 10.2 基于基于MCS-51单片机的移植实例单片机的移植实例 10.3 基于基于ARM处理器的移植实例处理器的移植实例 10.4 基于基于MCS-51单片机的应用实例单片机的应用实例 10.5 基于基于ARM处理器的应用实例处理器的应用实例 习题习题 第10章 C/OS-C/OS-的移植与应用的移植与应用 10.1 移植的基本方法移植的基本方法10.1.1 移植的概念与一般要求移植的概念与一般要求这里所谓的移植,就是使一个实时内核能运行在另一种微处理器

    2、或者微控制器上。为了方便移植,C/OS-在设计时就充分考虑了可移植性,大部分代码都是用ANSI C语言编写的,考虑到绝大多数微处理器在读/写寄存器时只能用汇编语言来实现,所以仍然需要用汇编语言来编写一些与处理器相关的代码。第10章 C/OS-C/OS-的移植与应用的移植与应用 1.移植对微处理器的要求移植对微处理器的要求要使C/OS-能够正常运行,处理器和编译器必须满足以下五项要求:(1)处理器的C编译器能产生可重入代码;(2)用C语言就可以实现开关中断;(3)处理器至少能支持定时中断,中断频率一般在10100 Hz之间;(4)处理器能够支持硬件堆栈,容量可达几KB;(5)处理器有堆栈指针和读

    3、/写CPU其它寄存器、堆栈内容或内存的指令。第10章 C/OS-C/OS-的移植与应用的移植与应用 2.对移植开发工具的要求对移植开发工具的要求移植C/OS-,需要一个针对用户用的CPU的C编译器,它必须满足如下要求:(1)C编译器必须支持汇编语言程序。(2)C编译器必须能支持可重入代码,因为C/OS-是一个可剥夺型内核。(3)C编译器必须包括汇编器、连接器和定位器。连接器用来将经编译和汇编后产生的不同的模块连接成目标文件。定位器用于将代码和数据放置在目标处理器的指定内存映射空间中。第10章 C/OS-C/OS-的移植与应用的移植与应用(4)C编译器必须支持从C中打开和关闭中断。(5)C编译器

    4、最好支持用户在C语言程序中嵌入汇编语言,这有利于用汇编语言来直接开关中断。3.移植的主要工作移植的主要工作C/OS-的移植非常简单,但前提是:必须理解处理器和C编译器的技术细节,拥有和掌握必要的工具,处理器和编译器满足C/OS-的上述五项原则。根据如图10.1所示的C/OS-软硬件体系结构,移植工作主要是改写与处理器有关的内核代码以及与编译器数据类型有关的文件,详细内容如表10.1所示。第10章 C/OS-C/OS-的移植与应用的移植与应用 图10.1 C/OS-软硬件体系结构第10章 C/OS-C/OS-的移植与应用的移植与应用 表表10.1 移植需要修改的文件一览表移植需要修改的文件一览表

    5、第10章 C/OS-C/OS-的移植与应用的移植与应用 第10章 C/OS-C/OS-的移植与应用的移植与应用 移植所要进行的工作可以简单地归纳为如下几条:(1)声明11个数据类型(OS_CPU.H);(2)用#define声明4个宏(OS_CPU.H);(3)用C语言编写10个简单的函数(OS_CPU_C.C);(4)编写4个汇编语言函数(OS_CPU_A.ASM)。根据处理器的不同,一个移植实例可能需要编写或改写50300行的代码,需要的时间从几个小时到一星期不等。移植完毕后还要进行测试。第10章 C/OS-C/OS-的移植与应用的移植与应用 4.INCLUDES.H文件说明文件说明INC

    6、LUDES.H是一个主头文件,它包括了所有的头文件,这样做的好处是使得在应用中无需考虑每个.C文件到底需要哪些头文件,还可大大地提高代码的可移植性。唯一的缺点是它可能会包含一些不相关的头文件,因此可能增加每个文件的编译时间。一般地,该文件应该包含在所有.C文件的第一行,即#include “includes.h”。10.1.2 OS_CPU.H代码的移植代码的移植OS_CPU.H头文件中包含了与编译器有关的数据类型和与处理器有关的代码,具体如程序清单10.1所示。第10章 C/OS-C/OS-的移植与应用的移植与应用 程序清单程序清单10.1 OS_CPU.H与编译器有关的数据类型和与处与编译

    7、器有关的数据类型和与处理器有关的代码理器有关的代码*与编译器有关的数据类型 */typedef unsigned char BOOLEAN;/*不能使用bit定义,因为在结构体里无法使用*/typedef unsigned char INT8U;/*无符号8位数*/typedef signed char INT8S;/*有符号8位数*/第10章 C/OS-C/OS-的移植与应用的移植与应用 typedef unsigned int INT16U;/*无符号16位数*/typedef signed int INT16S;/*有符号16位数*/typedef unsigned long INT32

    8、U;/*无符号32位数*/typedef signed long INT32S;/*有符号32位数*/typedef float FP32;/*单精度浮点数*/第10章 C/OS-C/OS-的移植与应用的移植与应用 typedef double FP64;/*双精度浮点数*/typedef unsigned char OS_STK;/*定义堆栈入口宽度为8位*/typedef unsigned char OS_CPU_SR;/*定义CPU状态字的宽度为8位*/*与处理器有关的代码 */#if OS_CRITICAL_METHOD=1第10章 C/OS-C/OS-的移植与应用的移植与应用#def

    9、ine OS_ENTER_CRITICAL()?/*禁止中断 */#define OS_EXIT_CRITICAL()?/*允许中断 */#endif#if OS_CRITICAL_METHOD=2#define OS_ENTER_CRITICAL()?/*禁止中断 */#define OS_EXIT_CRITICAL()?/*允许中断 */#endif第10章 C/OS-C/OS-的移植与应用的移植与应用#if OS_CRITICAL_METHOD=3#define OS_ENTER_CRITICAL()?/*禁止中断*/#define OS_EXIT_CRITICAL()?/*允许中断*/

    10、#endif#define OS_STK_GROWTH 0/1 /*定义堆栈生长方向:1=向下,0=向上*/#define OS_TASK_SW()OSCtxSw()第10章 C/OS-C/OS-的移植与应用的移植与应用 1.与编译器有关的数据类型与编译器有关的数据类型C/OS-源代码不直接使用C语言中的short、int和long等数据类型,因为这些数据类型与编译器密切相关,不可移植。为了提高可移植性,C/OS-对它的一系列数据类型进行了重新定义。尽管C/OS-不使用浮点数据,但为了方便起见,还是作了定义。例如,在16位编译器上,INT16U表示的数据类型是16位的无符号整数,其变量的数值范

    11、围是065535。如果用32位编译器的话,那么这个INT16U实际上就被声明为无符号短整型数据,而不是无符号整型数据。但是,C/OS-所处理的仍然是INT16U。第10章 C/OS-C/OS-的移植与应用的移植与应用 OS_STK和OS_CPU_SR的数据类型需要根据CPU的堆栈入口宽度和程序状态字的宽度来定义。例如,MCS-51系列单片机堆栈指针和程序状态字都是8位宽度,那么在16位的编译器上,可以将OS_STK和OS_CPU_SR声明为无符号8位数。如果处理器上的堆栈指针的长度是16位,并且编译器规定的无符号整型为16位数,那么就应该将OS_STK声明为无符号整型数据类型。所有的任务堆栈都

    12、必须用OS_STK来声明数据类型。移植与编译器有关的代码,必须仔细阅读编译器手册,找到对应于C/OS-的标准C数据类型。第10章 C/OS-C/OS-的移植与应用的移植与应用 2.OS_ENTER_CRITICAL()和和OS_EXIT_CRITI CAL()宏宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()是C/OS-定义的两个宏,主要用于实现禁止和允许中断。这样做的目的就是隐藏编译器厂商提供的具体实现方法,移植时,只要修改这两个宏就行了,而不用修改所有的相关代码。在3.1.1节已经介绍过,实现这两个宏的方法主要有三种。第一种方法是在OS_ENTER_CRITI

    13、CAL()和OS_EXIT_ CRITICAL()中调用处理器指令来禁止和允许中断,这也是最简单的方法。第10章 C/OS-C/OS-的移植与应用的移植与应用 第二种实现OS_ENTER_CRITICAL()和OS_EXIT_ CRITICAL()的方法是先将中断禁止状态保存到堆栈中,然后禁止中断,而执行OS_EXIT_CRITICAL()的时候只是从堆栈中恢复原来的中断状态。第三种实现OS_ENTER_CRITICAL()和OS_EXIT_ CRITICAL()的方法是用局部变量来保存中断开关状态。第10章 C/OS-C/OS-的移植与应用的移植与应用 选择哪一种方法,取决于用户想牺牲什么,

    14、得到什么。如果用户仅仅希望简单快速地实现,而不关心在调用服务后中断的状态,那么可以选择第一种方法执行。如果用户想在调用服务后确保中断的原始状态,可以根据具体情况选择第二种或者第三种方法。第10章 C/OS-C/OS-的移植与应用的移植与应用 3.OS_STK_GROWTH宏宏OS_STK_GROWTH宏定义决定了堆栈生长的方向,OS_STK_GROWTH置0表示堆栈从下往上生长;OS_STK_ GROWTH置1表示堆栈从上往下生长。之所以要这样处理是因为C/OS-在建立任务和检验堆栈时需要知道栈顶和栈底的具体位置,例如在任务控制块中就要给出栈顶和栈底。堆栈的实际生长方向取决于具体的微处理器结构

    15、,例如MCS-51单片机堆栈的生长方向是向上的,而ARM系列CPU堆栈的生长方向是向下的。C/OS-可以设置成两种情况都处理的状态,具体实现方法见3.2.1节。第10章 C/OS-C/OS-的移植与应用的移植与应用 4.OS_TASK_SW()宏宏OS_TASK_SW()是一个宏,当任务发生切换时需要调用它。C/OS-的任务切换很简单,它实际上就是人为地模拟了一次中断的过程:首先将要挂起的任务的全部CPU寄存器内容推入它自己的任务栈,然后再将准备就绪的最高优先级任务的任务栈中的全部内容弹出来,这样被恢复运行的任务就可以从被中断的那一点准确地继续往下执行了。这个模拟中断的过程就是由OS_TASK

    16、_SW()宏来实现的。第10章 C/OS-C/OS-的移植与应用的移植与应用 OS_TASK_SW()产生中断的方法一般有两种:一是利用微处理器提供的软中断或陷阱(TRAP)指令来完成,例如Intel和AMD 80 x86、Motorola 680 x0/CPU32、Motorola 68HC11等处理器;如果微处理器没有软中断或者陷阱指令,那么可以采用程序调用的方法,将任务栈的结构设置成与中断堆栈结构一样来实现,例如MCS-51系列单片机。不管用哪种方法来实现,都必须将处理程序的向量地址指向汇编语言函数OSCtxSw()。第10章 C/OS-C/OS-的移植与应用的移植与应用 10.1.3 OS_CPU_C.C代码的移植代码的移植如表10.1所示,在OS_CPU_C.C文件中有10个函数要求用户进行修改,但是其中唯一必要的是OSTaskStkInit()函数,其余9个都是用于扩展的用户接口函数,C/OS-要求必须声明,但未必包含任何代码。第10章 C/OS-C/OS-的移植与应用的移植与应用 1.OSTaskStkInit()函数函数OSTaskStkInit()函数为OSTaskC

    展开阅读全文
    提示  兔兜文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《嵌入式实时操作系统uC OS-2教程》课件第10章.ppt
    链接地址:https://www.tudouwenku.com/doc/2336140.html

    若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理!

    copyright@2008-2025 兔兜文库 版权所有

    鲁公网安备37072502000182号  ICP备案号:鲁ICP备2021021588号-1  百度保障

    兔兜文库
    收起
    展开