by WC 7.9.2015
本文假设读者对uC/OS-II和多任务知之甚少,但有一定的C语言和单片机基础。为的是为了从0开始学习uC/OS-II。流程图如下图示:
1## 范例1 ##
范例一演示uC/OC-II的多任务处理能力。共有10个任务在屏幕上面随机的位置显示一个0~9的数字。每个任务只显示同一个数字。其包含了13个任务,在运行窗口的左下角增加了两个内部任务。注意:context switch指CPU寄存器内容的切换,其实就是任务切换。
LI.1 TEXT.C
#include "includes.h" 【1】
#define TASK_STK_SIZE 512 /* Size of each task's stacks (# of WORDs) */ 【2】
#define N_TASKS 10 /* Number of identical tasks */ 【3】
OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; /* Tasks stacks */ 【4】
OS_STK TaskStartStk[TASK_STK_SIZE]; 【5】
char TaskData[N_TASKS]; /* Parameters to pass to each task */ 【6】
OS_EVENT *RandomSem;
说明:在程序的最后加了索引【?】,L1.1【1】表示程序L.1.1标号1地方的代码.
L1.1【1】:所有的头文件都放在了主控头文件includes.h中,这样写结构简单。后面需要时会继续讲解LI.1中的内容,先看main函数。
L1.1【2】:任务堆栈长度。
L1.1【3】:该程序任务的个数。
L1.1【4】:堆栈空间。
L1.1【5】:栈顶。
L1.1【6】:定义一个数组,存放0~9的ASCII字符。
LI.2 TEXT.C,main()
void main (void)
{
PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear the screen */ 【1】
OSInit();