📄 说明.txt
字号:
/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
MiniRTOS_51 说明
该RTOS为非占先式多任务操作系统,如果用户任务的最长执行时间小于
系统节拍时间,则本MiniRTOS要优于占先式RTOS。因为本MiniRTOS占用资源
小,RAM不超过20字节,程序空间只占为600多字节。
一、编译环境:KeilC51 uVision2
二、CPU,8051系列,晶振:11.0592MHz(可修改)
三、工程文件:MiniRTOS_51.uV2
四、源代码文件:
OS_Start.c OS_TaskSW.c OS_TaskAttemper.asm
OS_TaskSW.h RTOS.h CPU.h
ClientTask.c Init.c
五、用户修改
1、系统节拍值 (所在文件:OS_TaskAttemper.asm) ///////////////////////
默认为10ms,也就是说系统每隔10mS进行一次任务调度。用户可根据实际情况
修改定时器T0的初始值,从而改变系统节拍时间。
2、最大任务数 MAX_TASK_ID /////////////////////////////////////////
在文件RTOS.h,范围0~255,每8个任务占一个字节RAM
4、任务名 (所在文件:OS_TaskSW.h) /////////////////////////////////
所有任务名在二维数组中,下标越小的任务优先级越高。为了见文知义,建议
用户把任务名作修改(原型声明也要修改)
void (*code TaskEntrance[MAX_TASK_ID_DIV8][8])()=
{ { Task00,Task01,Task02,Task03,Task04,Task05,Task06,Task07 },
{ Task10,Task11,Task12,Task13,Task14,Task15,Task16,Task17 }
};
4、周期性执行的任务 (所在文件:OS_TaskSW.h) ///////////////////////
如果要使任务周期性执行,则要在下面的二维数组中修改相对应的值,单位为
系统节拍值。默认值为0,非周期性执行。数组CycleExcute 与 TaskEntrance一一
对应。例如:Task02每隔两个节拍(20mS)执行一次,则CycleExcute[0][2]=2;
uint code CycleExcute[MAX_TASK_ID_DIV8][8]=
{
{ 0,0,2,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0 }
};
六、程序复位入口
如果要用标准C语言main函数作为程序复位入口,则要把 USER_ENTRANCE 定义为0,
两个地方有定义,在文件OS_Start.c和OS_TaskAttemper.asm中
如果不用标准main()函数作为入口,则要自己设定堆栈指针,其预定义为文件
RTOS.h中的STACK_POINTER。建议开始编译时用main()为复位入口,看编译器给的堆栈
指针为多少,然后再把USER_ENTRANCE定义为1,并修改STACK_POINTER。
七、移植
条件:目标CPU要有定时器中断功能和修改PC的功能
1、要修改OS_TaskAttemper.asm文件
2、要修改OS_Start.c中有关初始化的代码
3、要修改CPU.h中相关代码
4、注意各种编译器对程序空间常量的定义和指向函数的指针数组的定义方法!!!
例:在Keil51中用关键词code,在IAR AVR中用__flash 等等
八、联系作者
肖遥电子(广州)研发中心
肖先生:项目经理 研发工程师
xiaoele@163.com xiaoele@avl.com.cn
020-88191829 13922280586
最近修改日期:20040729
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -