Ucos II创建第一个任务
我们已经从远处欣赏过ucos II 的身材,现在可以近距离地欣赏Ucos II性感的局部了。
任务是什么?
有一句话:CPU不同的时刻段总是在执行着优先级最高的任务。所以CPU总是在不同的任务间切换。任务好比linux中的进程。
有c写过单片机程序的人是知道函数的.。
在ucos II 世界里,任务就是一个大箩筐,框着一个或者好多好多的函数。CPU呢,像个大美女呢,总是从一个大箩筐跳到另一个大箩筐,其实明眼的人都知道,CPU这么跳来跳去为得是什么,为得就是找大帅哥,看到哪个大箩筐里帅哥更帅(优先级更高),CPU就立马跳到那个大箩筐。美女都好色!
我们知道,CPU总是不断地在各个任务间切换,为了下次跳回来, CPU在跳走的同时,要保护好现场,这时我们就需要用到堆栈了。
所以每当我们创建一个任务,我们都需要给这个任务分配一个堆栈 。
(1)。下面就是我项目中给其中一个任务设定堆栈大小的程序
#define TASK_STK_SIZE 256
OS_STK TaskUartSentStk[TASK_STK_SIZE];
(2)。设定了堆栈的大小之后,接着就可以创建任务了,创建任务我们需要使用OSTaskCreate() 或 OSTaskCreateExt() 函数,这两个函数间没有很大的区别,只是后者比前者多了一些扩展功能。
以OSTaskCreate()为例。
OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio)
创建一个任务,OSTaskCreate()需要四个参数:task是任务代码的指针,pdata是当任务开始执行时传递给任务的参数的指针,ptos是分配给任务的堆栈的栈顶指针,prio是分配给任务的优先级。
以下程序就是我项目中创建一个任务的程序
OSTaskCreate(TaskUartSent, (void *)0, &TaskUartSentStk[TASK_STK_SIZE - 1], 5);
TaskUartSent 就是这个任务执行时调用的函数的名称。
&TaskUartSentStk[TASK_STK_SIZE - 1] 是定义的任务堆栈栈顶地址
5 :表示该任务的优先级是5(这个数字越小,表示任务的优先级越高)
(3)这样,一个任务就基本创建完毕了,接着就可以编写任务的实现函数TaskUartSent了。