导读:
本文涉及三部分:
1. 第一部分:任务堆栈的创建和使用
2. 第二部分:任务控制块
3. 第三部分:优先级以及就绪表
希望能通过讲解对UCOSIII的任务管理有进一步的理解.
一、任务堆栈

ucos中的堆栈是遵循“FIFO”原则,也就是先进先出。和一般系统都是一样的。
任务堆栈是用于存放数据,保存现场等等。

任务堆栈的创建
define START_STK_SIZE       512 //堆栈大小
CPU_STK START_TASK_STK[START_STK_SIZE]; //定义一个数组来作为任务堆栈//CPU_STK实际类型为CPU_INT32U,也就是unsigned int类型
//那么实际上堆栈大小即为 512*4byte = 2048字节

任务堆栈初始化:
本质是将初始的值赋值给任务堆栈

CPU_STK  *OSTaskStkInit (OS_TASK_PTR    p_task,void          *p_arg,CPU_STK       *p_stk_base, //任务堆栈的基址CPU_STK       *p_stk_limit,//任务堆栈的栈深CPU_STK_SIZE   stk_size,   //任务堆栈的大小OS_OPT         opt)
//特别说明:任务堆栈的栈深一般为START_STK_SIZE/10,它的作用是当栈仅剩这些容量的时候,就已经到极限了。

一般是在OSTaskCreate直接调用,不需要用户调用。
在移植的时候:需要用户根据CPU修改 OSTaskStkInit 的内容

二、任务控制块

每个任务都会有相应的TCB,TCB本质上是一种结构体
一般绝对不要访问OS_TCB中的成员变量
OS_TCB StartTaskTCB; //创建一个任务控制块

TCB结构体(ucosIII)

成员变量在UCOSIII中远多于UCOSII

struct os_tcb
{CPU_STK             *StkPtr;                            void                *ExtPtr;                            CPU_STK             *StkLimitPtrOS_TCB              *NextPtr; OS_TCB              *Prev……          //此处省略N个成员变量#if OS_CFG_DBG_EN > 0uOS_TCB              *DbgPrevPtr;OS_TCB              *DbgNextPtr;CPU_CHAR            *DbgNamePtr;#endif
}   
任务控制块的初始化

在OSTaskCreate中由系统调用OS_TaskInitPCB(),不需要用户去调用

三、优先级

UCOSIII中任务优先级数由宏OS_CFG_PRIO_MAX来配置,UCOSIII中数值越小,优先级越高,最低可用优先级就是OS_CFG_PRIO_MAX-1。

就绪表:优先级位映射表OSPrioTbl[]:用来记录哪个优先级下有任务就绪。

OSPrioTbl为32bit
例如:64个优先级则为OSPrioTbl[2]

OS_PRIO  OS_PrioGetHighest (void)
{CPU_DATA  *p_tbl;OS_PRIO    prio;prio  = (OS_PRIO)0;p_tbl = &OSPrioTbl[0];while (*p_tbl == (CPU_DATA)0) { //先找到OSPrioTbl[i]不为0prio += DEF_INT_CPU_NBR_BITS; p_tbl++;}prio += (OS_PRIO)CPU_CntLeadZeros(*p_tbl); //得到OSPrioTbl[i]前导0的个数return (prio);
}

最终找到哪个最高的优先级中有就绪任务

就绪表:就绪任务列表OSRdyList[]:用来记录每一个优先级下所有就绪的任务。


* 总是从head’指向的任务开始执行,执行之后就放到尾部

UCOSIII 任务管理(中)相关推荐

  1. ucosiii系统中的任务管理

    前言:   多任务操作系统最重要的就是对任务进行管理,包括任务的创建,挂起,删除和调度等,因此对于ucosiii操作系统中任务管理的理解就显得尤为重要了.   分几个部分介绍:     1:任务状态 ...

  2. UCOSIII任务管理

    对UCOSIII系统的任务管理包括了任务的创建.任务挂起.任务的删除以及任务的调度等. UCOSIII的启动和初始化 最先肯定是调用OSInit()初始化UCOSIII. 创建任务,一般我们在main ...

  3. 2.uCOSIII任务管理

    任务简介: 任务即由系统管理的程序实体,由三部分组成: 任务堆栈:本质是一个数组,不同的任务在创建前可以自己定义相关数组的大小: 任务控制块:本质上是一个结构体,用于保存任务当前的各种状态信息,其成员 ...

  4. 进程与计划任务管理中的top、pgrep、pstree、jobs、at、crontab命令

    目录 一.top命令 1.up  time 2.user 3.系统任务(Tasks) 信息 4.CPU占用信息 二.进程信息 1.PID 2.USER 3.PR 4.NI 5.VIRT(virtual ...

  5. VC对话框禁止关闭按钮和禁止任务管理中关闭进程

    1.BOOL C***Dlg::OnInitDialog() { //禁止关闭对话框  CMenu* pMenu = this->GetSystemMenu(FALSE);  pMenu-> ...

  6. 解决win10下,安装某驱动后,任务管理中仍不存在问题

    问题描述: 新电脑使用,使用摄像头的应用均无法检测到摄像头. 解决尝试: 常规解决思路,一般来说,硬件损坏的可能性较小,大概率是相应驱动出现问题. 首先在官网上下载相应驱动安装,安装后仍不能检测到摄像 ...

  7. STM32工作笔记0074---UCOSIII 任务管理(中)

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这个堆栈先进先出,类似于一个两端都有出口的桶. 先进去的,先出去.

  8. 【UCOSIII操作系统】任务篇(1)创建任务

    UCOSIII操作系统 UCOSIII操作系统--任务篇(1)创建任务 一.UCOSIII--任务 简介 二.创建任务流程 1.定义任务栈 2.定义任务控制块TCB 3.定义任务主体函数 4.创建任务 ...

  9. 如何在HHDI中进行数据质量探查并获取数据剖析报告

    通过执行多种数据剖析规则,对目标表(或一段SQL语句)进行数据质量探查,从而得到其数据质量情况.目前支持以下几种数据剖析类型,分别是:数字值分析.值匹配检查.字符值分析.日期值分析.布尔值分析.重复值 ...

最新文章

  1. 实现AGI,强化学习就够了?Sutton:奖励机制足够实现各种目标
  2. linux触摸屏两指缩放_自定义TextView实现单指拖动,双指缩放旋转
  3. 十年,我的计算机生涯
  4. 《看聊天记录都学不会C语言?太菜了吧》(5)打了一把游戏我学会了一个编程知识?
  5. 前端开始学java_[Java教程]开启前端学习之路
  6. vim中如何设置多行注释和删除注释
  7. 使用def文件从dll导出和_declspec(dllexport)导出区别以及调用示例
  8. Watchman 的安装
  9. Google登陆集成笔记-含坑
  10. 企业为什么需要EDI?
  11. 腾讯汤道生:产业互联网时代,安全成为CEO的一把手工程
  12. JavaScript防抖(王者荣耀回城)、节流(王者荣耀技能读条)
  13. JAVA练习97-网格照明
  14. 思科模拟器CISCO/华为模拟器ENSP配置一个完整的校园网(网络安全、数据冗余)
  15. javascript时间差插件
  16. python数据去重_python 大数据去重
  17. 潜入维基解密机房:探访维基总部
  18. 新型场板提高阻断电压
  19. Android4.4以后第三方应用无法删除短信的解决方案
  20. 蓄电池内阻、电压及温度在线监测系统应用方案

热门文章

  1. Linux 主机巡检脚本(包含 k8s)
  2. Mybatis中的_parameter
  3. 三菱PLC N:N 通讯
  4. 网上银行在计算机应用中,基于软件工程和J2EE的网上银行系统实现计算机应用技术专业论文.docx...
  5. 《Vue+Spring Boot前后端分离开发实战》专著累计发行上万册
  6. 拉美外贸收款:BBVA银行
  7. web 前台页面内弹出框(一)
  8. java中文数字与阿拉伯数字相互转换
  9. 芯片管脚工作在各个模式的特点和优缺点(持续更新)加上下拉电阻的作用
  10. 如何redis关闭保护模式,取消密码登录