ucos II 创建第一个任务之一

 

                             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了。         

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值