uCOS-II在51单片机上的移植



《uCOS-II在51单片机上的移植》由会员分享,可在线阅读,更多相关《uCOS-II在51单片机上的移植(45页珍藏版)》请在文档大全上搜索。
1、1uc/os-II uc/os-II 操作系统的移植操作系统的移植q 所谓操作系统的移植,是指使一个实时操作系统能够在某个特定的所谓操作系统的移植,是指使一个实时操作系统能够在某个特定的微处理器平台上运行。微处理器平台上运行。q COS-IICOS-II的主要代码都是由标准的的主要代码都是由标准的C C语言写成的,移植方便。语言写成的,移植方便。但仍需但仍需要用汇编语言写一些与处理器相关的代码,这是因为要用汇编语言写一些与处理器相关的代码,这是因为C/OS-C/OS-在读在读写处理器寄存器时只能通过汇编语言来实现。写处理器寄存器时只能通过汇编语言来实现。 q 移植的主要工作是修改部分与处理器硬
2、件相关的代码。移植的主要工作是修改部分与处理器硬件相关的代码。2q处理器的C编译器能产生可重入代码。 q在程序中可以打开或者关闭中断。 q处理器支持中断,并且能产生定时中断(通常在10-100Hz之间)。 q处理器支持能够容纳一定量数据的硬件堆栈(可能达几KB) q处理器有将堆栈指针和其他CPU寄存器存储和读出到堆栈(或者内存)的指令。 7.1.1 7.1.1移植移植uC/OS-IIuC/OS-II满足的条件满足的条件uC/OS-II是通过硬件中断来实现系统时钟,是通过硬件中断来实现系统时钟,并在时钟中断服务程序中来处理与时间相关并在时钟中断服务程序中来处理与时间相关的问题的。因此,用户所选用
3、的处理器必须的问题的。因此,用户所选用的处理器必须具有响应中断的能力。具有响应中断的能力。一般情况下应该使用硬件定时器来作为一般情况下应该使用硬件定时器来作为时钟中断源,这个定时器可以是与微处时钟中断源,这个定时器可以是与微处理器集成在一个芯片上的,也可以是分理器集成在一个芯片上的,也可以是分立的。立的。3v可重入的代码指的是一段代码(比如:一个函数)可以被多个任务同时调用,而不必担心会破坏数据。v也就是说,可重入型函数在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会因为在函数中断的时候被其他的任务重新调用,影响函数中的数据。v可重入的代码的实现主要是编程技术,所有嵌入式集成开
4、发环境都能产生可重入的代码。 7.1.2 7.1.2 什么是可重入代码什么是可重入代码int temp;void Swap(int *x, int *y) temp = *x; *x = *y; *y = temp;例如,任务例如,任务A和任务和任务B都要调用函数都要调用函数Swap(),而该函数又使用了全局变量而该函数又使用了全局变量temp。于是当任。于是当任务务A调用调用Swap()函数期间,系统发生了任务函数期间,系统发生了任务切换而使任务切换而使任务B也调用了也调用了Swap(),那么任务,那么任务B将要改变全局变量将要改变全局变量temp的值,使任务的值,使任务A传递传递给全局变量
5、给全局变量temp的值丢失而出现错误。的值丢失而出现错误。一般来说,一个可重入函数应该在函数中只一般来说,一个可重入函数应该在函数中只使用局部变量,因为函数的局部变量存储在使用局部变量,因为函数的局部变量存储在任务的堆栈中,所以可保证不同的任务在调任务的堆栈中,所以可保证不同的任务在调用同一个函数时不会发生冲突。用同一个函数时不会发生冲突。4 7.1.3 7.1.3 系统栈与任务栈的关系系统栈与任务栈的关系被中止运行的任被中止运行的任务堆栈务堆栈被运行的任务堆栈被运行的任务堆栈系统堆栈系统堆栈CPU SP图图7-1 系统栈与任务栈的关系系统栈与任务栈的关系有些处理器对于堆栈的设置有特殊的要求,
6、即要求堆栈必须设置在一个特定的有些处理器对于堆栈的设置有特殊的要求,即要求堆栈必须设置在一个特定的区域,比如片内区域,比如片内RAM。由于片内的。由于片内的RAM极其有限,不可能把应用程序中所有极其有限,不可能把应用程序中所有任务的堆栈都设置在片内任务的堆栈都设置在片内RAM中,所以就只能把应用程序中各个任务堆栈的内中,所以就只能把应用程序中各个任务堆栈的内容存放在片外容存放在片外RAM中,而只在片内中,而只在片内RAM中设置一个公用的堆栈。中设置一个公用的堆栈。片外的片外的RAM用来存放任务堆栈,片内用来存放任务堆栈,片内RAM中是系统的公共堆栈,当系统运行某个任务中是系统的公共堆栈,当系统
7、运行某个任务时,就要把该任务的堆栈映像复制到系统堆时,就要把该任务的堆栈映像复制到系统堆栈中;而在中止这个任务时,再把系统堆栈栈中;而在中止这个任务时,再把系统堆栈中的内容复制回任务堆栈映像中。中的内容复制回任务堆栈映像中。5 7.1.4 7.1.4 uC/OS-II文件结构文件结构图图7-2 uC/OS-II的文件结构的文件结构6名称函数/宏定义所在文件语言功能OS_CRITICAL_METHOD宏定义OS_CPU.HC语言处理临界段方式选择OS_STK_GROWTH宏定义OS_CPU.HC语言堆栈增长方向OS_ENTER_CRITICAL()宏定义OS_CPU.HC语言进入临界区OS_EX
8、IT_CRITICAL()宏定义OS_CPU.HC语言退出临界区OSStartHighRdy()函数OS_CPU_A.ASM汇编就绪态最高优先级任务运行OSCtxSw()函数OS_CPU_A.ASM汇编任务级任务切换OSIntCtxSw()函数OS_CPU_A.ASM汇编中断级任务切换OSTickISR()函数OS_CPU_A.ASM汇编时钟节拍OSTaskStkInit()函数OS_CPU_C.CC语言任务堆栈初始化表表7-1 需要修改的关键函数和宏定义需要修改的关键函数和宏定义 7.1.5 7.1.5 需要修改的关键函数和宏定义需要修改的关键函数和宏定义7 7.1.6 7.1.6 INCL
9、UDES.Hv 使得项目中的每个使得项目中的每个.c文件不用分别考虑它实际上需要那些头文件。文件不用分别考虑它实际上需要那些头文件。v 它会包含一些不相关的头文件它会包含一些不相关的头文件v INCLUDES.H 是一个头文件,它在所有的是一个头文件,它在所有的.c文件的第一行被包含。文件的第一行被包含。v #include “includes.h”/ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
10、 * * * * * * * * * * * * * * * * uC/OS-II uC/OS-II 实时内核实时内核* * (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL(c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL* * 版权所有版权所有* * MCU-51 MCU-51 专用代码专用代码 KEIL C51KEIL C51大模式编译大模式编译* * * 文件名文件名 : INCLUDES.H: INCLUDES.H* * 作者作者 : Jean J. La
11、brosse: Jean J. Labrosse* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /#include os_cpu.h#include os_cfg.h#include ucos_ii.h#include #include 8 7.1.7 7.1.7 OS_CPU.H/ /* * * * * * * * * * * * *