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

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


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


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

2024.05.04:UCOSIII第五十八节:User文件夹函数概览(uCOS-III->Source文件夹)第四部分

  • 六十七、UCOSIII:User文件夹函数概览(uCOS-III->Source文件夹)第四部分
    • 5、uCOS-III文件夹
      • Source文件夹
        • os_int.c文件
          • OS_IntQPost
          • OS_IntQRePost
          • OS_IntQTask
          • OS_IntQTaskInit
        • os_mem.c文件
          • OSMemCreate
          • OSMemGet
          • OSMemPut
          • OS_MemInit
          • OS_MemDbgListAdd(可选)
        • os_msg.c文件
          • OS_MsgPoolInit
          • OS_MsgQFreeAll
          • OS_MsgQInit
          • OS_MsgQGet
          • OS_MsgQPut
        • os_mutex.c文件
          • OSMutexCreate
          • OSMutexDel
          • OSMutexPend
          • OSMutexPendAbort
          • OSMutexPost
          • OS_MutexClr
          • OS_MutexDbgListAdd
          • OS_MutexDbgListAdd
          • OS_MutexDbgListRemove
          • OS_MutexInit

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

5、uCOS-III文件夹

在这里插入图片描述

Source文件夹

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

os_int.c文件

这个文件包含了 UC/OS-III 内核中中断管理功能的实现。
包括了中断的使能、禁止、注册、注销等操作的具体实现。

OS_IntQPost
  • 功能:向中断队列中发布内核对象。
  • 参数:
    type:内核对象类型。
    p_obj:指向被发布的内核对象的指针。
    p_void:指向消息队列或任务消息的指针。
    msg_size:消息的数目。
    flags:事件标志组。
    opt:发布内核对象时的选项。
    ts:发布内核对象时的时间戳。
    p_err:返回错误类型的指针。
    实现:该函数先进入临界段,然后检查中断队列是否已满,如果未满,则将内核对象信息保存到中断队列的入口信息记录块中,并更新中断队列管理任务的就绪状态。如果中断队列已满,则返回相应的错误。
OS_IntQRePost
  • 功能:重新发布中断队列中的内核对象。
  • 参数:无。
    实现:该函数根据中断队列出口信息记录块中的内核对象类型,选择相应的操作,例如发布事件标志、消息队列等,并进行相应的处理。
OS_IntQTask
  • 功能:中断队列任务的执行函数。
  • 参数:p_arg,参数指针。
    实现:该函数进入死循环,不断处理中断队列中的内核对象。当中断队列为空时,从就绪列表中移除中断队列管理任务,然后进行任务调度。当中断队列不为空时,重新发布中断队列中的内核对象,并更新相应的记录。该函数会计算发布内核对象的时间,并更新发布内核对象的最大时间的历史记录。
OS_IntQTaskInit
  • 功能:初始化中断队列任务。
  • 参数:p_err,返回错误类型的指针。
    实现:该函数初始化中断队列并创建中断队列任务。首先对中断队列进行初始化,然后根据配置创建中断队列任务,包括任务名、任务指针、栈等。
os_mem.c文件

os_mem.c 实现了 UC/OS-III 内核中的内存管理功能。
包括了内存分配、内存释放等操作的具体实现。
内存管理模块用于分配和释放任务堆栈、消息缓冲区等动态分配的内存空间。

OSMemCreate
  • 功能:创建一个内存分区。
  • 参数:
    p_mem:指向 OS_MEM 结构体的指针,用于保存内存分区的信息。
    p_name:内存分区的名称。
    p_addr:内存分区的起始地址。
    n_blks:内存分区中的块数目。
    blk_size:每个块的大小。
    p_err:返回错误类型的指针。
    实现:该函数会根据配置项对参数进行检查,并初始化内存分区的相关信息,包括内存块的链表、内存分区的类型、名称、起始地址等。
OSMemGet
  • 功能:从内存分区中获取一个内存块。
  • 参数:
    p_mem:指向 OS_MEM 结构体的指针,指向要操作的内存分区。
    p_err:返回错误类型的指针。
    返回值:返回获取的内存块的指针。
    实现:该函数会检查内存分区是否有空闲的内存块,如果有,则返回其中一个内存块的指针,并更新相关信息。
OSMemPut
  • 功能:将一个内存块放回内存分区。
  • 参数:
    p_mem:指向 OS_MEM 结构体的指针,指向要操作的内存分区。
    p_blk:要放回的内存块的指针。
    p_err:返回错误类型的指针。
    实现:该函数会将一个内存块放回内存分区的空闲内存块链表中,并更新相关信息。
OS_MemInit
  • 功能:初始化内存管理相关的全局变量。
  • 参数:
    p_err:返回错误类型的指针。
    实现:该函数用于初始化内存管理相关的全局变量,包括调试信息列表等。
OS_MemDbgListAdd(可选)
  • 功能:向内存调试信息列表中添加一个内存分区的调试信息。
  • 参数:
    p_mem:指向 OS_MEM 结构体的指针,指向要添加调试信息的内存分区。
    实现:该函数用于向内存调试信息列表中添加一个内存分区的调试信息,一般在调试模式下使用。
os_msg.c文件

os_msg.c 实现了 UC/OS-III 内核中的消息队列功能。
包括了消息队列的创建、发送消息、接收消息等操作的具体实现。
消息队列用于任务间的消息通信,任务可以通过消息队列发送和接收消息,实现任务之间的数据交换和同步。

OS_MsgPoolInit
  • 功能:初始化消息池。
  • 参数:
    p_err:返回错误类型的指针。
    实现:该函数首先根据配置项进行参数检查,然后将消息池里的消息逐条串成单向链表,并初始化消息池的数据。
OS_MsgQFreeAll
  • 功能:释放消息队列中的所有消息。
  • 参数:
    p_msg_q:指向 OS_MSG_Q 结构体的指针,表示消息队列。
    返回值:返回被释放的消息数量。
    实现:该函数将消息队列中的所有消息返回到消息池中,并更新相关的统计信息。
OS_MsgQInit
  • 功能:初始化消息队列。
  • 参数:
    p_msg_q:指向 OS_MSG_Q 结构体的指针,表示要初始化的消息队列。
    size:消息队列的最大容量。
    实现:该函数用于初始化消息队列的相关信息,包括消息数量、入队指针、出队指针等。
OS_MsgQGet
  • 功能:从消息队列中获取消息。
  • 参数:
    p_msg_q:指向 OS_MSG_Q 结构体的指针,表示消息队列。
    p_msg_size:返回消息大小的指针。
    p_ts:返回消息时间戳的指针。
    p_err:返回错误类型的指针。
    返回值:返回获取的消息的指针。
    实现:该函数从消息队列中取出一个消息,并将其从消息池中释放,同时更新相关的统计信息。
OS_MsgQPut
  • 功能:将消息放入消息队列。
  • 参数:
    p_msg_q:指向 OS_MSG_Q 结构体的指针,表示消息队列。
    p_void:指向要发送的消息内容的指针。
    msg_size:消息的大小。
    opt:指定消息放入队列的方式,FIFO或LIFO。
    ts:消息的时间戳。
    p_err:返回错误类型的指针。
    实现:该函数将消息放入消息队列中,并更新相关的统计信息。
os_mutex.c文件

os_mutex.c 实现了 UC/OS-III 内核中的互斥量(Mutex)功能。
包括了互斥量的创建、获取锁、释放锁等操作的具体实现。
互斥量用于保护共享资源,确保在任何时刻只有一个任务可以访问共享资源,从而避免竞态条件和数据不一致问题。

OSMutexCreate

这个函数用于创建一个互斥信号量。下面是该函数的参数解释:

p_mutex:互斥信号量的指针,用于指向将要创建的互斥信号量。
p_name:信号量的名称,用于标识该信号量。
p_err:返回错误类型的指针。

OSMutexDel

这个函数用于删除一个互斥信号量。下面是该函数的参数解释:

p_mutex:要删除的互斥信号量的指针。
opt:选项,指定删除操作的行为。
p_err:返回错误类型的指针。

OSMutexPend

这个函数用于请求获取一个互斥信号量。下面是该函数的参数解释:

p_mutex:要请求的互斥信号量的指针。
timeout:超时时间,表示等待获取信号量的最长时间。
opt:选项,指定请求操作的行为。
p_ts:返回时间戳的指针,记录获取信号量的时间。
p_err:返回错误类型的指针。

OSMutexPendAbort

该函数用于中止等待互斥信号量的任务。它的参数包括互斥信号量指针 p_mutex、选项 opt 和返回错误类型的指针 p_err。它首先执行了一系列的参数检查,然后在关中断的情况下获取互斥信号量的等待列表,并尝试中止等待任务。如果指定了 OS_OPT_PEND_ABORT_ALL 选项,则会中止所有等待任务;否则,只中止第一个等待任务。最后,根据选项是否需要任务调度,决定是否进行任务调度,并返回中止的任务数量。

OSMutexPost

该函数用于释放互斥信号量,使其可被其他任务获取。它的参数包括互斥信号量指针 p_mutex、选项 opt 和返回错误类型的指针 p_err。它也首先执行了一系列的参数检查,然后在关中断的情况下检查当前任务是否持有该互斥信号量,并进行释放。如果有等待该信号量的任务,则将其分配给一个等待任务,并根据选项是否需要任务调度,决定是否进行任务调度。

OS_MutexClr

该函数用于清除互斥信号量结构体中的字段,将其重置为初始状态。它将互斥信号量的类型标记为 OS_OBJ_TYPE_NONE,清除所有者信息、嵌套计数、时间戳等,并初始化等待列表。

OS_MutexDbgListAdd

该函数用于将互斥信号量添加到调试列表中。它的参数是互斥信号量指针 p_mutex。它主要用于调试目的,在调试模式下,将互斥信号量按顺序添加到调试列表中,以便跟踪和监视它们的状态。

OS_MutexDbgListAdd

此函数用于将互斥信号量添加到调试列表中。如果调试功能已启用,它将互斥信号量指针添加到全局的互斥信号量调试列表中。它首先将互斥信号量的调试名称指针 DbgNamePtr 设为一个空字符串,然后根据当前调试列表的状态将互斥信号量插入到列表的最前端。

OS_MutexDbgListRemove

此函数用于从调试列表中移除互斥信号量。它接收一个互斥信号量指针作为参数,并从全局的互斥信号量调试列表中将该互斥信号量移除。它会根据互斥信号量在列表中的位置进行不同的处理,确保列表的连接关系正确。

OS_MutexInit

此函数用于初始化互斥信号量模块。它主要用于设置互斥信号量模块的初始状态,包括将全局的互斥信号量调试列表指针设为 NULL、互斥信号量数量设为 0,并将错误类型设为无错误。

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

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

相关文章

自制音频格式二维码的方法,适合多种音频格式使用

现在可以通过二维码的方法来传递音频文件是很常用的一种方式,可以将单个或者多个音频放入一个二维码,通过手机扫码来调取云端储存的音频文件来播放内容,这样可以让多人同时扫码获取内容,提升传播速度。 音频二维码制作的方法也比…

数据库 和 SQL 和 索引事务 和 Java数据库编程(JDBC)

一、初识数据库 什么是数据库?和数据结构有什么关系? 数据库是“一类软件”,能够针对数据进行管理。数据结构,也是针对数据进行管理。所以,数据库其实就是一个“基于数据结构”实现出来的软件。 有哪些常用数据库&…

Postman,一个功能强大的API开发和测试工具

最近有小伙伴说在找 postman 的使用教程,案例等文章。 那么今天我就来写一个。 Postman 是一个功能强大的 API 开发和测试工具,它提供了丰富的功能,帮助开发人员更好地管理、测试和文档化 API。无论是单独开发还是团队协作,Postma…

社交媒体数据恢复:MiChat

在数字化时代,我们的生活与社交媒体平台紧密相连,如MiChat等即时通讯应用成为沟通的桥梁。然而,数据丢失的风险始终存在,使得“及时备份”这一概念愈发重要。当用户不慎删除了珍贵的聊天记录时,他们可能会感到绝望。幸…

Xcode隐私协议适配

1. Privacy manifest files 1.1 简介 自己App或三方SDK(通过XCFrameworks|Swift packages|Xcode projects集成的)需要包含一个隐私清单文件(privacy manifest)叫作 PrivacyInfo.xcprivacy。它是一个属性列表,记录了A…

Spring一篇搞定!控制反转特性(IOC)详细笔记

控制反转(IOC) 是什么 控制反转(Inversion of Control,IoC)是一种设计思想,它的本质是将对象的创建、销毁、依赖关系的维护等控制权从程序代码中转移出去,交由容器来负责管理。在Java开发中&a…

多种方法求1+12+123+1234……

有网友出了一道题: 从键盘输入一个小于10的正整数n,计算1121231234……,即前n项之和。 第一眼看到题目,直觉告诉我必须使用嵌套的两个for循环,里面的循环生成每一项,外面的循环求和。错误的方向和思路让我…

LAMMPS单层石墨烯拉伸(velocity)

本文主要把之前学习石墨烯拉伸velocity拉伸做个总结。 一、模拟环境参数设置 units metal # 使用"metal"单位,这是 LAMMPS 中的一种长度单位 dimension 3 # 模拟的维度为三维空间 boundary s p p # 周期性边界条件&am…

商店数据(八)

目录 57.后台权限表 58.推荐记录表 ​59.系统上传资源表 ​60.角色表 ​61.订单结算表 62.店铺表 63.店铺认证表 64.店铺申请(移动端)表 57.后台权限表 CREATE TABLE wat_privilgeid (privilegeod int(11) NOT NULL AUTO_INCREMENT COMMENT 自增…

数据结构——哈希表的平均查找长度

我们要首先知道哈希表是干什么的,哈希表并不是为了单纯存储数据的,他并不会减小存储这些数据使用的空间,而是为了实现快速的数据查找,插入和删除操作。map就可以使用哈希表来实现,所以map可以实现利用键来快速访问到值…

2024年最新 Windows\Linux 后台运行程序注解

一、前言 有时候需要在后台运行程序,查了查网上现有的程序有些运行不了,跑通了之后简单记录一下,为后面的同学躺一下雷 1、Linux 系统 Linux后台运行进程时,通常使用如下方法: (1)程序挂后台…

Spring Bean依赖注入-Spring入门(二)

1、SpringBean概述 在Spring中,一切Java对象都被视为Bean,用于实现某个具体功能。 Bean的依赖关系注入的过程,也称为Bean的装配过程。 Bean的装配方式有3种: XML配置文件注解Java类 Spring中常用的两种装配方式分别是基于XML的…

[嵌入式系统-52]:RT-Thread:RT-Thread Studio工程的文件结构

目录 一、RT-Thread Studio概述 二、RT-Thread Studio工程架构 2.1 目录结构 2.2 软件包管理 2.3 硬件电路板信息 2.3 可执行文件elf信息 2.4 系统头文件 2.5 应用程序目录 2.6 硬件驱动程序 2.7 RT Thread操作系统程序 2.7.1 component:应用程序组件 …

PD虚拟机和双系统哪个好 Mac建议装双系统吗

在当今数字化时代,对于部分使用Mac电脑的用户来说,选择如何在系统中运行Windows或其他操作系统能节省大量精力。Parallels Desktop(PD)虚拟机和双系统是两种常见的选择,它们各自具有优势和限制。下面我们来看看PD虚拟机…

【MyBatis】(动态SQL <if> 标签 <trim>标签 <where>标签<set>标签<foreach>标签<include>标签)

文章目录 动态SQL< if > 标签< trim> 标签< where> 标签< set> 标签< foreach> 标签< include> 标签 动态SQL 在MyBatis框架中&#xff0c;动态SQL是一个强大的特性。它允许我们根据不同的条件动态的组装SQL语句&#xff0c;能够灵活的发…

【pycharm】调试模式中四个常用按钮介绍

【pycharm】调试模式中四个常用按钮介绍 在 PyCharm 的调试模式中&#xff0c;有四个常用的按钮&#xff0c;它们的功能如下&#xff1a; Step Over (F8)&#xff1a;单步执行&#xff0c;但在遇到函数调用时&#xff0c;不会进入函数内部&#xff0c;而是将整个函数作为一步执…

UVa12313 A Tiny Raytracer

UVa12313 A Tiny Raytracer 题目链接题意分析AC 代码 题目链接 UVA - 12313 A Tiny Raytracer 题意 给出 《训练指南》题意翻译 本题的任务是实现一个小型光线追踪渲染器。场景由若干三角形网格&#xff08;triangle mesh&#xff09;组成&#xff0c;有且仅有一个点光源&…

三苯基膦以及副产物的处理方式

参考文献&#xff1a; Easy Removal of Triphenylphosphine Oxide from Reaction Mixtures by Precipitation with CaBr2 | Organic Process Research & Development (acs.org) Triphenylphosphine Oxide Removal from Reactions: The Role of Solvent and Temperature |…

分享一些实用的工具

1、amCharts5&#xff1a;模拟航线飞行/业务分布图/k线/数据分析/地图等 网址&#xff1a; JavaScript mapping library: amCharts 5https://www.amcharts.com/javascript-maps/ Demo地址&#xff1a;Chart Demos - amChartshttps://www.amcharts.com/demos/#maps 他分为amC…

[华为OD] 给航天器一侧加装长方形或正方形的太阳能板 100

给航天器一侧加装长方形或正方形的太阳能板&#xff08;图中的红色斜线区域&#xff09;&#xff0c;需要先安装两个支 柱&#xff08;图中的黑色竖条&#xff09;&#xff0c;再在支柱的中间部分固定太阳能板。但航天器不同位置的支柱长度 不同&#xff0c;太阳能板的安装面…