第七章 在51单片机上移植uc/os-2
7.1 uc/os-2移植的一般性问题
7.1.1可重入函数
(1)多个任务调用同一个函数,其中的全局变量丢失产生错误。
(2)一般来说,一个可重入函数只使用局部变量,局部变量存储在堆栈中,如果一定要用,必须做保护。
7.1.2时钟节拍的产生
uc/os-2是通过硬件中断来实现系统时钟,并在时钟中断服务程序中来处理与时间相关的问题的。
7.1.3任务堆栈的设计:处理器支持一定数量的硬件堆栈,能够读写操作。
(1)堆栈的格式,因为生长方式不同。
(2)系统堆栈与任务堆栈的关系。堆栈必须设置在一个特定区域内:51要求堆栈必须在片内RAM,只能把应用程序中的任务堆栈的内容存放在片外RAM中,片内PAM中设置一个公用的堆栈
(3)片外RAM中用来存放任务堆栈内容的区域叫做任务堆栈映像,而片内PAM中的公用堆栈叫做系统堆栈。
7.2在51系列单片机上移植uc/os-2
一般用C语言编写。
7.2.1改写文件OS_CPU.H
(1)堆栈的增长方向:51是从低地址向高地址增长->OS_STK_GROWTH为1
(2)定义临界段的宏
(3)定义任务切换宏
(4)定义数据类型
7.2.2任务堆栈的设计
(1)51堆栈指针SP总是先加1再存数据,所以用的时候先减一。
(2)任务切换时,计算任务堆栈映像的最低地址空间用来存放用户堆栈的长度。
7.2.3文件OS_CPU_C.C的改写
改写任务堆栈初始化函数OSTaskStkInit(),使用西永设置时钟中断,添加定时器的初始化程序。
(1)改写任务堆栈初始化程序
(2)系统时钟初始化
7.2.4注意事项
(1)不要多修改。
(2)Keil中 重入函数有标注reentrant关键字
7.3一些应用