ucos源码阅读3——信号量,互斥信号量(未完待续)

2023-05-16

ucos源码阅读3——信号量,互斥信号量

  • 事件控制块ECB
    • InitEventList()
    • EventWaitListInit()
    • EventTaskRdy()
    • EventTaskRdy()
  • 信号量
    • OSSemCreate()
    • OSSemDel()
    • OSSemPend()
    • OSSemPost()
    • OSSemAccept()
    • OSSemQuery()
  • 互斥信号量
    • OSMutexCreate()
    • OSMutexDel()
    • OSMutexDel()
  • 总结

事件控制块ECB

在这里插入图片描述

InitEventList()

在这里插入图片描述

EventWaitListInit()

等待值和表置零,条件编译代替if循环,还有被除信号量集之外的创建函数调用。
在这里插入图片描述

EventTaskRdy()

取得最高优先级然后清除就绪值和表,OSTCBDly置零,为了防止时钟中断把该任务变成就绪态(时钟只是判断挂没挂起来)指向事件控制块的指针OSTCBEventPtr清零,任务控制块里还有这个,OSTCBMsg,然后TCB里状态清相应的位,如果是就绪态就修改对应就绪值和表。
在这里插入图片描述

EventTaskRdy()

第一个函数:TCB关联ECB,清就绪,置等待
第二个函数:超时以后时钟把任务置为就绪,需要有个函数善后,包括清等待,更改状态位为等待,取关ECB。一个超时了之后其他的事件也没法等待了。
在这里插入图片描述

信号量

OSSemCreate()

初始化计数值,指向消息或者消息队列的指针为空,置类型,调上面的基础函数。
在这里插入图片描述

OSSemDel()

只有确实有等待任务的才发生任务调度
每个TCB就只能挂一个事件控制块???清了这个状态还有挂起状态所以不能进入就绪队列?
这个中断延时与等待任务数量有关
在这里插入图片描述
在这里插入图片描述

OSSemPend()

阻塞态IO之类的
有资源的时候不用TCB挂上ECB,如果没资源,设置状态和延迟时间,清就绪,置等待然后调度。再返回的话要看是延迟返回还是获得信号量返回,如果延迟返回,清等待状态,TCB的状态和其指向ECB的指针,否则只清指针。根据返回值判断情况。
在这里插入图片描述

OSSemPost()

直接让优先级最高的任务就绪然后任务调度,如果没有就绪任务就继续往下执行
在这里插入图片描述

OSSemAccept()

返回值为零,可以表示计数为零以及出错,返回值大于零就是可用资源数。
在这里插入图片描述

OSSemQuery()

就定义了个新的数据结构,复制ECB的三个成员变量。
在这里插入图片描述
在这里插入图片描述

互斥信号量

OSMutexCreate()

需要找一个没被占用的优先级做优先级继承优先级,高八位为优先级继承优先级,低八位做正在占有任务的优先级或者空闲0xFF
在这里插入图片描述

OSMutexDel()

让非挂起的等待任务恢复就绪态,如果有等待任务,就调度,之前的那个延时置零有什么用。。。这么一调用他是在关中断里面。
在这里插入图片描述
在这里插入图片描述

OSMutexDel()

总结

TCB的状态和ECB的类型变量每种都占一位,用或运算表示,多个类型或状态。
事件块操作和时钟中断函数息息相关
使用条件编译而不是循环语句
任务主动挂起避免高优先级一直使用
互斥量有一个优先级反转。。。
明天看完邮箱消息,邮箱消息队列,内存管理,先略掉互斥信号量和信号量组去看LwIP。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ucos源码阅读3——信号量,互斥信号量(未完待续) 的相关文章

  • TeaPearce/Conditional_Diffusion_MNIST 源码阅读

    文章目录 tqdm超参数预运算nn Module register buffer绘制动画ddpmforward U net噪声预测模型信息向量掩码向量conext mask上采样层的信息融合恢复阶段 总结后记 tqdm dataset sp
  • 每日lodash源码阅读(一)——createMathOperation

    每日lodash源码阅读 xff08 一 xff09 createMathOperation 一 写在前面二 使用举例三 源码分析add jscreateMathOperation js 一 写在前面 createMathOperation
  • UCOS的事件有:信号量,消息邮箱,消息队列,信号量集

  • freertos和ucos的区别

    一 freeRTOS比uCOS II优胜的地方 xff1a 1 内核ROM和耗费RAM都比uCOS 小 xff0c 特别是RAM 这在单片机里面是稀缺资源 xff0c uCOS至少要5K以上 xff0c 而freeOS用2 3K也可以跑的很
  • linux与freertos区别,谈谈uCOS和freeRTOS这两种实时系统的结构以及编程思想

    距离上次总结 xff0c 已经过去有差不多半年了 xff0c 最近又到了自己半年一次的总结了 首先说说自己的编程风格的变化 xff0c 在上一篇 第三篇文 中提到的数据结构 配置文件结构 预编译结构 xff0c 目前已经逐渐适应 xff0c
  • kube-proxy源码阅读(iptables实现)

    Reference 文章目录 1 入口2 ProxyServer创建及调用3 ProxyServer 核心调用流程3 1 func o Options Run err3 2 func o Options runLoop error3 3 f
  • ucos-ii 的任务调度原理和实现

    ucosii 任务调度和原理 1 ucos ii 任务创建与任务调度 1 1 任务的创建 当你调用 OSTaskCreate 进行任务的创建的时候 xff0c 会初始化任务的堆栈 保存cpu的寄存器 创建任务的控制块 xff08 OS TC
  • LEGO-LOAM(LOAM)部分公式推导---未完待续

    一 featureAssociation相关推导 1 xff09 帧间匹配雅可比矩阵推导 首先明确LEGO LOAM中 xff0c 运动坐标系 xff08 符合右手系 xff09 的设置为 xff1a 因此对于平面运动来说 xff0c 影响
  • REDIS 源码阅读

    https redissrc readthedocs io en latest datastruct dict html 一个注释的开源项目 xff1a 书是redis的设计与实现 https github com huangz1990 r
  • uCOS/FreeRTOS任务创建的两种模式

    在我们使用uCOS FreeRTOS编写代码时 xff0c 首先要面临的一个问题是怎样创建任务并启动整个系统 一般来说 xff0c 我们会有两种不同的方式 这两种方式不仅适用于uCOS FreeRTOS xff0c 同时也适用于其它RTOS
  • 一步一步教你使用uCOS-II

    第一篇 UCOS介绍 第一篇 UCOS介绍 这个大家都知道 呵呵 考虑到咱们学习的完整性还是在这里唠叨一下 让大家再熟悉一下 高手们忍耐一下吧 xff01 uC OS II Micro Control Operation System Tw
  • Huawei LiteOS与freeRTOS、Ucos主流嵌入式操作内核的区别

    LiteOS与freeRTOS Ucos主流嵌入式操作内核的区别 云社区 华为云
  • ucos源码阅读3——信号量,互斥信号量(未完待续)

    ucos源码阅读3 信号量 xff0c 互斥信号量 事件控制块ECBInitEventList xff08 xff09 EventWaitListInit xff08 xff09 EventTaskRdy xff08 xff09 Event
  • Hive源码阅读--SQL的语法解析和语义分析--Driver

    前面五个类 xff0c 殊途同归都是CliDriver类 xff0c 他负责接受用户在命令行上输入的信息 xff0c 然后准备执行并将执行的结果返回 而真正底层干事情的是Driver xff0c 他将接受到的命令编译 xff0c 优化为MR
  • UCOS消息队列的使用【转】

    UCOS消息队列的使用 转 收藏 消息队列的使用 1 需在以下文件中配置如下内容 OS CFG H OS MAX QS N 你需要的值 根据需要自己配置 define OS Q EN 1 Enable 1 or Disable 0 code
  • UCOS II两个任务的模板

    芯片lm3s9b92 include lt includes h gt include 34 utils uartstdio h 34 Application tasks 优先级 define TASK2 PRIO 11 define ta
  • A-LOAM源码阅读

    LOAM 论文地址 xff1a https www ri cmu edu pub files 2014 7 Ji LidarMapping RSS2014 v8 pdf A LOAM地址 xff1a https github com HKU
  • UCOS2的文件目录

    想着闲着也是闲着 把之前学习ucos2源码的笔记整理一下 复盘一次 总结内容将其写为博客作为学习的输出 一 为什么要学RTOS或者IOTOS 我在大一时 开始进入实验室接触单片机 摸爬滚打的参加了几次比赛 也因此入了嵌入式的坑 大三时开始思
  • Quartz框架多个trigger任务执行出现漏执行的问题分析

    一 问题描述 使用Quartz配置定时任务 配置了超过10个定时任务 这些定时任务配置的触发时间都是5分钟执行一次 实际运行时 发现总有几个定时任务不能执行到 二 示例程序 1 简单介绍 采用spring quartz整合方案实现定时任务
  • Micriμm μC/OS-III RTOS 中的分配和释放

    我们使用 Micrium 的 C OS III RTOS 和 Renesas 的 RX62N 我们构建了一个必须动态分配和释放数据的系统 我们发现了功能malloc and free 与 RTOS 配合得不好 然而 RTOS 为此提供了一个

随机推荐