嵌入式ucosii任务管理

说明:本文只是简单地介绍任务管理部分,有错误的地方,不吝赐教。源码已上传,可用sourceInSight等工具查看。

学习内容
  • 一、执行代码

  • 二、任务私有栈

  • 三、任务控制块

  • 四、任务就绪表

    • 入表
    • 出表
    • 查表

ucosii的任务调度

首先我们得知道ucosii中一个任务的三要素:代码,任务私有栈,任务控制块
代码:就是任务要执行操作的代码,我们会有一个指针指向代码地址,这个指针其实就是任务函数的名字,用于pc指向;
任务私有栈:是存储任务相关的信息,比如上述执行代码的地址;相当于一个虚处理器,当我们cpu需要运行这个任务时,将任务私有栈中的信息出栈,一一对应cpu所需的信息;就是任务私有栈都整理好了;
任务控制块:任务的身份证,内容包括任务私有栈的栈顶指针,优先级,当前处于什么状态(就绪状态,等待状态等等);

了解了一个任务的基本内容后,下面我们结合代码学习,源码我已上传,关注我下载。

一.任务创建函数OSTaskCreate

在这里插入图片描述
我们通过调用这个函数创建任务,从参数中我们可以看到*task是代码地址,就是第一部分的执行代码;第二个pdata是任务代码中需要的参数,了解就好;第三个是栈顶指针,栈顶指针一开始指向的是分配好的栈的栈底,因为开始什么内容都没有,比如大小是512,如果是数组作为数据结构,栈顶指针就指向a[511];最后就是分配的优先级,记住,优先级即是id(唯一),数值越小,优先级越高。

二.任务私有栈初始化OSTaskStkInit

由OSTaskCreate调用
在这里插入图片描述
我们看看函数内容:

OS_STK *OSTaskStkInit(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt)
{
   
    OS_STK *stk;

    opt    = opt;                           /* 'opt' 没有使用, 预防警告错误                      		*/
    stk    = ptos;                          /* 加载堆栈指针                                     		*/
    *(stk) = (
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值