[UC/OS-II原理及应用]在51单片机上移植μC/OS-Ⅱ
来源:互联网 发布:小土豆编程账号密码 编辑:程序博客网 时间:2024/05/22 01:32
第八章 在51单片机上移植μC/OS-Ⅱ
8.1 μC/OS-Ⅱ移植的一般性问题
8.1.1 可重入函数
能允许同时被多个任务所调用,而不会通过函数中变量的耦合引起任务之间的相互干扰的函数叫做可重入函数。
一个可重入函数只使用局部变量,因为函数的局部变量存储在任务的堆栈中,所以可保证不同的任务在调用同一个函数时不会发生冲突。如果函数一定要使用全局变量,则需要对使用的全局变量做必要的保护。
8.1.2 时钟节拍的产生
一般情况下应该使用硬件定时器来作为时钟中断源,这个定时器可以是微处理器集成在一个芯片上的,也可以是分立的,定时中断的频率以10~100Hz为宜。
8.1.3 任务堆栈的设计
系统堆栈与任务堆栈的关系:
各个任务用来存储各自任务堆栈内容的片外RAM空间叫做任务堆栈;
定义在片内RAM的,各个任务在运行时使用的堆栈叫做系统堆栈。
8.2 在51系列单片机上已知μC/OS-Ⅱ
8.2.1 改写文件OS_CPU.H
1. 堆栈的增长方向
#defineOS_STK_GROWTH 1
堆栈从低地址向高地址增长(从下往上增长)
2. 定义临界段的宏
#defineOS_ENTER_CRITICAL() EA = 0
#defineOS_EXIT_CRITICAL() EA = 1
3. 定义任务切换宏
#defineOS_TASK_SW() OSCtxSw()
4. 定义数据类型
8.2.2 任务堆栈的设计
8.2.3 文件OS_CPU_C.C的改写
在文件OS_CPU_C.C中主要改写任务堆栈的初始化函数OSTaskStkInit(),由于要使用单片机上的定时器为系统设置时钟中断,所以还要添加对51单片机定时器的初始化程序。
如果对51单片机的T0定时器作为系统时钟的中断源,初始化如下:
void InitTimero(void) reentrant
{
TMOD = TMOD & 0x0F0;
TMOD = TMOD | 0x001;
TH0 = 0x70;
TL0 = 0x00;
TH0 = 1;
}
8.2.4 几点必须注意的事项
μC/OS-Ⅱ使用的pdata、data等参数都与KEIL的关键字相同,所以还要把μC/OS-Ⅱ的这些数据改成ppdata、ddata等。
为了使用Ri而不用对它们进行访问,要使用KEIL扩展关键字IDATA,将它们定义在内部RAM中。
8.3 应用举例
- [UC/OS-II原理及应用]在51单片机上移植μC/OS-Ⅱ
- [UC/OS-II原理及应用]在51单片机上移植μC/OS-Ⅱ
- [UC/OS-II原理及应用]在ARM7上移植μC/OS-Ⅱ
- [UC/OS-II原理及应用]在ARM7上移植μC/OS-Ⅱ
- [UC/OS-II原理及应用]μC/OS-Ⅱ在80x86上的移植
- uC/OS-II在51单片机上的移植
- uC/OS-II在51单片机上的移植
- uC/OS-II在C8051F020单片机上的移植
- uC/OS-II在C8051F020单片机上的移植
- [UC/OS-II原理及应用]μC/OS-Ⅱ可裁剪性的实现
- 第七章 在51单片机上移植uc/os-2
- 移植uC/OS-II到51单片机的菜鸟问题
- uc/os-II在ARM7上的移植探索
- 关于uc/os-II在C51上移植的笔记
- uC/OS-II在ARM微处理器上的移植
- uc/os-II在STC89C52RC上的移植
- uC/OS II在Microchip MCU上的移植
- uC/OS--II在STM32F103ZET6上的移植
- 弱校联萌 Fibonacci of Fibonacci (矩阵快速幂加循环节降幂)
- 流媒体协议介绍(RTP/RTCP/RTSP/MMS/HLS/HTTP progressive streaming)
- JS-数组
- JZOJ 4813 【NOIP2016提高A组五校联考2】running
- LeetCode oj 167. Two Sum II - Input array is sorted (双指针)
- [UC/OS-II原理及应用]在51单片机上移植μC/OS-Ⅱ
- 面向对象_按照多态前提给出代码体现
- selenium webdriver (python)
- selenium webdriver (python)
- yum rpm 常用命令
- C/C++中产生随机数(rand和srand的用法)
- 《岛上书店》书评
- 比赛总结+近期总结
- effective stl 第46条:考虑使用函数对象而不是函数作为STL算法的参数