(学习日记)2024.05.03:UCOSIII第五十七节:User文件夹函数概览(uCOS-III->Source文件夹)第三部分

写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。


标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。


点击此处进入学习日记的总目录

2024.05.03:UCOSIII第五十七节:User文件夹函数概览(uCOS-III->Source文件夹)第三部分

  • 六十七、UCOSIII:User文件夹函数概览(uCOS-III->Source文件夹)第三部分
    • 5、uCOS-III文件夹
      • Source文件夹
        • os_dbg.c文件
          • 参数
          • OS_Dbg_Init
        • os_flag.c文件
          • OSFlagCreate
          • OSFlagDel
          • OSFlagPend
          • OSFlagPendAbort
          • OSFlagPendGetFlagsRdy
          • OSFlagPost
          • OS_FlagBlock
          • OS_FlagClr
          • OS_FlagInit
          • OS_FlagDbgListAdd
          • OS_FlagDbgListRemove
          • OS_FlagPost
          • OS_FlagTaskRdy

六十七、UCOSIII:User文件夹函数概览(uCOS-III->Source文件夹)第三部分

5、uCOS-III文件夹

在这里插入图片描述

Source文件夹

这些文件通常是 Micrium OS (UC/OS-III) 内核的核心文件,提供了操作系统的各种基本功能和特性。
在这里插入图片描述

os_dbg.c文件

这个文件包含了 UC/OS-III 内核的调试功能的实现。
包括了一些用于调试和诊断的函数和宏。
这些调试参数可以用于检查系统在不同配置下的资源使用情况,以及系统运行时的状态信息。

参数
  1. 常量定义

    • OSDbg_ArgChkEn:参数检查使能。
    • OSDbg_AppHooksEn:应用层钩子函数使能。
    • OSDbg_EndiannessTest:用于测试 CPU 的字节序。
    • OSDbg_CalledFromISRChkEn:调用位置是否来自中断的检查使能。
    • OSDbg_FlagEn:事件标志使能。
    • OSDbg_FlagGrp:事件标志组。
    • OSDbg_ISRPostDeferredEn:中断后延迟处理使能。
    • OSDbg_Mem:内存管理。
    • OSDbg_MemEn:内存管理使能。
    • OSDbg_MsgEn:消息队列使能。
    • OSDbg_MsgSize:消息结构的大小。
    • OSDbg_MsgPoolSize:消息池的大小。
    • OSDbg_MsgQSize:消息队列的大小。
    • OSDbg_Mutex:互斥信号量。
    • OSDbg_MutexEn:互斥信号量使能。
    • OSDbg_ObjTypeChkEn:对象类型检查使能。
    • OSDbg_PendMultiEn:多任务挂起使能。
    • OSDbg_PendDataSize:挂起数据结构的大小。
    • OSDbg_PendListSize:挂起列表的大小。
    • OSDbg_PendObjSize:挂起对象的大小。
    • 其他参数用于配置任务、定时器、消息队列、互斥信号量等功能。
  2. 总数据空间

    • OSDbg_DataSize:系统使用的总数据空间大小,包括任务、定时器、事件标志、消息队列等各个组件占用的空间。
OS_Dbg_Init

函数 OS_Dbg_Init 主要用于初始化调试参数,让我们逐个解释其中的步骤:

  1. 声明指针变量:函数开始时声明了几个指针变量,用于访问调试参数的地址。这些指针变量分别为 p_temp08p_temp16p_temp32,分别用于访问 8 位、16 位和 32 位参数。

  2. 初始化调试参数:在函数体内部,通过将调试参数的地址赋值给相应类型的指针变量,来获取调试参数的值。例如:

    • p_temp08 = (CPU_INT08U const *)&OSDbg_ArgChkEn;,将参数 OSDbg_ArgChkEn 的地址赋值给 p_temp08,然后通过 *p_temp08 获取参数的值。
    • 后续代码块中的逻辑类似,根据参数类型不同,选择对应类型的指针进行赋值和访问。
  3. 防止编译器警告:在函数末尾,为了避免编译器警告,使用了 p_temp08p_temp16p_temp32 进行赋值操作,但实际上这些赋值没有任何实际意义,只是为了消除编译器警告而已。

总的来说,这个函数的作用是初始化调试参数,并没有具体的业务逻辑,只是简单地获取各个调试参数的值。

os_flag.c文件

这个文件包含了 UC/OS-III 内核中事件标志组(Flag)功能的实现。
包括了事件标志的创建、设置、清除和等待等操作的具体实现。

OSFlagCreate
  • 功能:创建一个事件标志组。
  • 参数:
    p_grp:指向 OS_FLAG_GRP 结构体的指针,用于指定要创建的事件标志组。
    p_name:事件标志组的名称,是一个字符串。
    flags:初始的事件标志值。
    p_err:指向 OS_ERR 类型的指针,用于返回函数执行状态。
    返回值:无。
    实现:该函数首先进行了一系列安全性检查,如指针是否为空、是否处于中断中等。然后设置了事件标志组的类型、名称、初始值,并初始化了等待事件标志的任务列表。最后将事件标志组的数量加一。
OSFlagDel
  • 功能:删除一个事件标志组。
  • 参数:
    p_grp:指向 OS_FLAG_GRP 结构体的指针,指定要删除的事件标志组。
    opt:删除选项,可以是立即删除或等待任务完成后删除。
    p_err:指向 OS_ERR 类型的指针,用于返回函数执行状态。
    返回值:返回等待删除的任务数量。
    实现:该函数首先进行了一系列安全性检查,如指针是否为空、是否处于中断中等。然后根据删除选项进行不同的处理,可以立即删除或等待任务完成后删除。
OSFlagPend
  • 功能:等待一个或多个事件标志的发生。
  • 参数:
    p_grp:指向 OS_FLAG_GRP 结构体的指针,指定等待的事件标志组。
    flags:要等待的事件标志。
    timeout:超时时间,如果设置为 0 表示非阻塞。
    opt:等待选项,如清除所有标志等。
    p_ts:指向 CPU_TS 类型的指针,用于返回时间戳。
    p_err:指向 OS_ERR 类型的指针,用于返回函数执行状态。
    返回值:返回已经发生的事件标志。
    实现:该函数首先进行了一系列安全性检查,如指针是否为空、是否处于中断中等。然后根据等待选项和超时时间进行不同的处理,如果事件标志已经发生,函数将返回相应的事件标志;如果设置了非阻塞选项,函数将立即返回,否则任务将被阻塞直到事件标志发生或超时。
OSFlagPendAbort
  • 功能:终止等待事件标志的任务。
  • 参数:
    p_grp:指向 OS_FLAG_GRP 结构体的指针,指定要终止等待的事件标志组。
    opt:终止等待选项,可以是终止单个任务或全部任务。
    p_err:指向 OS_ERR 类型的指针,用于返回函数执行状态。
    返回值:返回终止的任务数量。
    实现:该函数首先进行了一系列安全性检查,如指针是否为空、是否处于中断中等。然后根据终止选项进行不同的处理,可以终止单个任务或全部任务。
OSFlagPendGetFlagsRdy
  • 功能:获取当前任务等待的事件标志。
  • 参数:
    p_err:指向 OS_ERR 类型的指针,用于返回函数执行状态。
    返回值:返回当前任务等待的事件标志。
    实现:该函数首先进行了一系列安全性检查,如是否处于中断中等。然后获取当前任务等待的事件标志,并返回。
OSFlagPost
  • 功能:向事件标志组发送事件标志。
  • 参数:
    p_grp:指向 OS_FLAG_GRP 结构体的指针,指定要发送事件标志的事件标志组。
    flags:要发送的事件标志。
    opt:发送选项,可以是设置或清除事件标志,并可选择是否调度任务。
    p_err:指向 OS_ERR 类型的指针,用于返回函数执行状态。
    返回值:返回当前事件标志组的事件标志。
    实现:该函数首先进行了一系列安全性检查,如指针是否为空、是否处于中断中等。然后获取时间戳,判断是否在中断中,如果在中断中则将任务挂起等待后续处理,否则调用 OS_FlagPost 函数向事件标志组发送事件标志,并返回当前事件标志组的事件标志。
OS_FlagBlock
  • 功能:阻塞当前任务,等待事件标志的发生。
  • 参数:
    p_pend_data:指向 OS_PEND_DATA 结构体的指针,用于指定等待数据。
    p_grp:指向 OS_FLAG_GRP 结构体的指针,指定要等待的事件标志组。
    flags:要等待的事件标志。
    opt:等待选项,如清除所有标志等。
    timeout:超时时间,如果设置为 0 表示非阻塞。
    返回值:无。
    实现:该函数保存当前任务需要等待的事件标志、等待选项和等待数据,然后调用 OS_Pend 函数将任务挂起等待事件标志的发生。
OS_FlagClr
  • 功能:清除事件标志组的状态。
  • 参数:
    p_grp:指向 OS_FLAG_GRP 结构体的指针,指定要清除状态的事件标志组。
    返回值:无。
    实现:该函数将事件标志组的类型、名称和标志值重置为初始状态,并初始化等待事件标志的任务列表。
OS_FlagInit
  • 功能:初始化事件标志管理器。
  • 参数:
    p_err:指向 OS_ERR 类型的指针,用于返回函数执行状态。
    返回值:无。
    实现:该函数进行了一系列安全性检查,如指针是否为空。然后将事件标志数量初始化为 0,并将错误状态设置为无错误。
OS_FlagDbgListAdd
  • 功能:向事件标志调试列表中添加事件标志组。
  • 参数:
    p_grp:指向 OS_FLAG_GRP 结构体的指针,指定要添加到调试列表的事件标志组。
    实现:该函数将事件标志组的调试名称设置为空格,然后根据调试列表是否为空来确定设置调试列表的前后指针。
OS_FlagDbgListRemove
  • 功能:从事件标志调试列表中移除事件标志组。
  • 参数:
    p_grp:指向 OS_FLAG_GRP 结构体的指针,指定要移除的事件标志组。
    实现:该函数通过调试列表的前后指针来移除指定的事件标志组。
OS_FlagPost
  • 功能:向事件标志组发送事件标志。
  • 参数:
    p_grp:指向 OS_FLAG_GRP 结构体的指针,指定要发送事件标志的事件标志组。
    flags:要发送的事件标志。
    opt:发送选项,可以是设置或清除事件标志,并可选择是否调度任务。
    ts:时间戳。
    p_err:指向 OS_ERR 类型的指针,用于返回函数执行状态。
    返回值:返回当前事件标志组的事件标志。
    实现:该函数首先根据发送选项设置或清除事件标志,然后检查等待事件标志的任务列表,如果有任务等待,则将任务置为就绪状态,否则返回当前事件标志组的事件标志。
OS_FlagTaskRdy
  • 功能:将任务置为就绪状态。
  • 参数:
    p_tcb:指向 OS_TCB 结构体的指针,指定要置为就绪状态的任务控制块。
    flags_rdy:就绪的事件标志。
    ts:时间戳。
    实现:该函数将任务的就绪标志设置为指定的事件标志,并清除任务的挂起状态,根据任务当前状态进行相应处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/578606.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch 计算深度模型的大小

计算模型大小的方法 卷积 时间复杂度 与 空间复杂度 的计算方式: C 通道的个数,K卷积核大小,M特征图大小,C_l-1是输入通道的个数,C_l是输出通道的个数 1 模型大小 MB 计算模型的大小的原理就是计算保存模型所需要…

嵌入式全栈开发学习笔记---Linux基本命令2

目录 cp 源路径 目的路径 cp -r 源路径 目的路径 mv 源路径 目的路径 mv oldname newname 接下来我们继续介绍两个常用的命令 一个是拷贝文件,一个是剪切文件 ,或者也可以用来改名字。 cp 源路径 目的路径 “cp”用来拷贝文件或者目录,…

jpa分页插件对象Pageable出现了错误异常如何解决?

jpa分页插件对象Pageable出现了错误异常如何解决?! 一般来说,遇到这种的错误异常情况,通常情况 下,都是因为程序员把传递的分页页码数字写错了。 正常情况下,分页页码起始数字应该是0;而不是1…

【研发管理】产品经理知识体系-产品创新中的市场调研

导读:在产品创新过程中,市场调研的重要性不言而喻。它不仅是产品创新的起点,也是确保产品成功推向市场的关键步骤。对于产品经理系统学习和掌握产品创新中的市场调研相关知识体系十分重要。 目录 概述:市场调研重要性 1、相关概…

Python脚本:论文必备!给PDF指定页面后添加空白页

一、代码 直接上代码 import PyPDF2,os from datetime import datetimedef add_blank_pages(pdf_path, page_numbers):pdf_writer PyPDF2.PdfWriter()timestamp datetime.now().strftime("%Y%m%d%H%M%S")# 读取PDF文件with open(pdf_path, rb) as pdf_file:pdf_r…

【Java EE】Spring核心思想(一)——IOC

文章目录 🎍Spring 是什么?🎄什么是IoC呢?🌸传统程序开发🌸传统程序开发的缺陷🌸如何解决传统程序的缺陷?🌸控制反转式程序开发🌸对比总结 🌲理解…

Kafka学习笔记01【2024最新版】

一、Kafka-课程介绍 官网地址:Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/ kafka 3.6.1版本,作为经典分布式订阅、发布的消息传输中间件,kafka在实时数据处理、消息队列、流处理等领域具有广泛…

检测水箱水位传感器有哪些?

生活中很多家电中都内含一个水箱,例如电蒸锅、饮水机、蒸汽熨斗、咖啡机等等,这些内部都有水箱,或大或小。当然水箱也有很多种类型,例如生活水箱、生产水箱、消防水箱等等。 把水储存在水箱中也会遇到这些问题,水箱没…

JavaScript云LIS系统源码 前端框架JQuery+EasyUI+后端框架MVC+SQLSuga大型医院云LIS检验系统源码 可直接上项目

JavaScript云LIS系统源码 前端框架JQueryEasyUI后端框架MVCSQLSuga大型医院云LIS检验系统源码 可直接上项目 云LIS系统概述: 云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序,可协助区域内所有临床实验室相互协调并完成日常检验工作&#xff…

pytest-asyncio:协程异步测试案例

简介:pytest-asyncio是一个pytest插件。它便于测试使用异步库的代码。具体来说,pytest-asyncio提供了对作为测试函数的协同程序的支持。这允许用户在测试中等待代码。 历史攻略: asyncio并发访问websocket Python:协程 - 快速创…

SVGDreamer: 文本引导矢量图形合成

现有的 Text-to-SVG 方法还存在两个限制:1.生成的矢量图缺少编辑性;2. 难以生成高质量和多样性的结果。为了解决这些限制,作者提出了一种新的文本引导矢量图形合成方法:SVGDreamer。 论文题目: SVGDreamer: Text Guid…

《Git---Windows Powershell提交信息中文乱码解决方案》

解释: Windows PowerShell中的Git乱码通常是因为字符编码不正确或Git配置不支持Windows系统的默认编码导致的。Git在处理文件时可能使用UTF-8编码,而Windows系统的命令行工具(如PowerShell)默认使用的是Windows-1252或GBK编码。 …

【库函数】Linux下动态库.so和静态库.a的生成和使用

目录 🌞1. Linux下静态库和动态库的基本概念 🌞2. 动态库 🌊2.1 动态库如何生成 🌍2.1.1 文件详情 🌍2.1.2 编译生成动态库 🌊2.2 动态库如何使用 🌍2.2.1 案例 🌍2.2.2 动态…

TCP详解

2.1TCP 由IETF的RFC793定义的传输控制协议(Transmission Control Protocol,TCP)是一种基于字节流的传输层通信协议。在传输数据前需要在发送与接收者之间建立连接,通过相应机制保证其建立连接的可靠性。 TCP协议具备以下特性&am…

云备份项目->配置环境

升级gcc到7.3版本 sudo yum install centos-release-scl-rh centos-release-scl sudo yum install devtoolset-7-gcc devtoolset-7-gcc-c source /opt/rh/devtoolset-7/enable echo "source /opt/rh/devtoolset-7/enable" >> ~/.bashrc 安装Jsoncpp库 sud…

十、多模态大语言模型(MLLM)

1 多模态大语言模型(Multimodal Large Language Models) 模态的定义 模态(modal)是事情经历和发生的方式,我们生活在一个由多种模态(Multimodal)信息构成的世界,包括视觉信息、听觉信息、文本信息、嗅觉信…

STM32与Proteus的串口仿真详细教程与源程序

资料下载地址:STM32与Proteus的串口仿真详细教程与源程序 资料内容 包含LCD1602显示,串口发送接收,完美实现。 文档内容齐全,包含使用说明,相关驱动等。 解决了STM32的Proteus串口收发问题。 注意:每输…

IP-guard getdatarecord 存在任意文件读取

声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一、产品介绍 IP-guard是由溢信科技股份有限公司开发的一款终端安全管…

揭秘被忽视的商业模式:全民拼购助力客户实现日销千万的惊人业绩

今天,我想和大家分享一个颇具潜力的模式与玩法,尽管它在外界看来可能略显陈旧。这个模式曾被忽视,但我的一位客户却巧妙运用,实现了惊人的业绩——日销售额接近五千万,日订单量高达300万单。 值得注意的是,…

一键搞定COX回归亚组森林图!快速生成顶级SCI论文的高清图!

现在亚组分析好像越来越流行,无论是观察性研究还是RCT研究,亚组分析一般配备森林图。 比如NEJM这张图: 比如Lancet这张图: 但是在使用R语言绘制时,简单的代码画不出好看的图,好看的图又需要许多代码参数来进…