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

news/2024/10/20 4:04:30/

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


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


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

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

  • 六十七、UCOSIII:User文件夹函数概览(uCOS-III->Source文件夹)第一部分
    • 5、uCOS-III文件夹
      • Source文件夹
        • os.h文件
        • os_cfg_app.c文件
        • os_core.c文件
          • OSInit
          • OSIntEnter和 OSIntExit
          • OSSched
          • OSSchedLock
          • OSSchedUnlock
          • OSSchedRoundRobinCfg
          • OSSchedRoundRobinYield
          • OSStart
          • OSVersion
          • OS_IdleTask
          • OS_IdleTaskInit
          • OS_Pend
          • OS_PendAbort
          • OS_PendAbort1

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

COSIII_13">5、uCOS-III文件夹

在这里插入图片描述

Source文件夹

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

os.h文件

这个头文件包含了 UC/OS-III 内核的公共函数声明、数据结构定义和常量定义。
它是用户代码与 UC/OS-III 内核之间的接口,定义了用户可以调用的操作系统函数和宏。
后续会详细解释。

os_cfg_app.c文件

这个文件包含了用户配置的 UC/OS-III 内核的配置参数。
用户可以在这里设置操作系统的各种配置选项,如任务数量、任务堆栈大小、时间片大小等。

  1. 常量和数据存储

    • 文件开始定义了各种数据存储元素,如任务堆栈、消息池、中断队列等相关结构。这些是操作系统用于管理任务、消息、中断等的静态分配内存区域。
  2. 配置常量

    • 定义了各种系统配置的常量,如堆栈大小、任务优先级、消息池大小等。这些常量用于配置操作系统的行为和资源分配。
  3. OS 配置初始化函数 (OSCfg_Init):

    • 此函数用于确保配置文件中声明为 const 的某些调试变量不会被编译器优化掉。它通过引用这些变量来实现,从而强制编译器保留它们。这很重要,因为这些变量的目的是供外部检查,用于调试或监视目的。
  4. 参数解释

    • 参数,如堆栈大小、任务优先级、消息池大小等,被定义为常量。这些参数定义了操作系统的行为和资源分配。例如:
      • OSCfg_TickRate_Hz:定义系统的时钟频率,即操作系统定时器中断发生的频率。
      • OSCfg_StatTaskPrio:统计任务的优先级。
      • OSCfg_MsgPoolSize:用于任务间通信的消息池的大小。
      • OSCfg_ISRStkSize:中断服务例程(ISR)堆栈的大小。
      • OSCfg_TmrTaskRate_Hz:定时器任务执行的速率。
      • OSCfg_TickTaskStkSize:用于时钟任务的堆栈大小。
      • OSCfg_TickWheelSize:用于管理超时和延迟的时钟轮的大小。
      • OSCfg_TmrTaskPrio:定时器任务的优先级。
  5. 条件编译的使用

    • 使用条件编译指令(#if#endif)根据配置选项条件地包含或排除某些代码部分。例如,根据配置中是否启用了某些功能,可能会包含或排除与中断处理或定时器管理相关的某些代码段。

总的来说,该文件提供了操作系统的全面配置,允许开发人员根据其特定需求定制系统的行为。

os_core.c文件

这个文件包含了 UC/OS-III 内核的核心功能的实现,如任务调度、中断处理等。
它包括了 UC/OS-III 内核的初始化、任务调度器的实现、中断处理函数等。

OSInit

OSInit(OS_ERR *p_err)
这是RTOS的初始化函数。它用于初始化RTOS的各个模块和数据结构,为系统的正常运行做准备。
p_err 是一个指向错误码的指针,用于传递函数执行过程中的错误信息。如果初始化过程中发生错误,函数会将相应的错误码存储到 p_err 所指向的位置中。

OSIntEnter和 OSIntExit

这两个函数用于处理中断的进入和退出过程。
OSIntEnter 函数用于记录进入中断的次数,以便在中断嵌套过深时进行检查。
OSIntExit 函数用于处理中断退出,包括恢复中断状态、检查是否需要进行任务切换等操作。

OSSched

这是RTOS的调度器函数。它用于选择下一个要执行的任务,并进行任务切换。
在调度过程中,会检查当前系统状态,包括是否有中断嵌套、调度器是否被锁定等情况,以保证调度的正确性。
调度器会根据任务的优先级选择下一个要执行的任务,并进行任务切换操作。

OSSchedLock

void OSSchedLock(OS_ERR *p_err)

这个函数用于锁定调度器,防止任务切换发生。
参数 p_err 是一个指向错误码的指针,用于传递函数执行过程中的错误信息。
在函数中会进行一系列的检查:
检查系统是否正在运行,如果没有运行则返回错误码 OS_ERR_OS_NOT_RUNNING。
检查是否处于中断嵌套状态,如果是则返回错误码 OS_ERR_SCHED_LOCK_ISR。
检查调度器是否已经被锁定,如果是则返回错误码 OS_ERR_LOCK_NESTING_OVF。
如果以上检查都通过,则锁定调度器,并将错误码设为 OS_ERR_NONE。

OSSchedUnlock

void OSSchedUnlock(OS_ERR *p_err)

这个函数用于解锁调度器,允许任务切换发生。
参数 p_err 同样是一个指向错误码的指针,用于传递函数执行过程中的错误信息。
函数中的操作包括:
检查系统是否正在运行,如果没有运行则返回错误码 OS_ERR_OS_NOT_RUNNING。
检查调度器是否已经被锁定,如果没有被锁定则返回错误码 OS_ERR_SCHED_NOT_LOCKED。
如果调度器被成功解锁,则重新使能调度器并执行一次调度。

Cfg_85">OSSchedRoundRobinCfg

void OSSchedRoundRobinCfg(CPU_BOOLEAN en, OS_TICK dflt_time_quanta, OS_ERR *p_err)

这个函数用于配置循环调度(Round Robin)的参数。
参数 en 是一个布尔值,用于启用或禁用循环调度。
参数 dflt_time_quanta 是一个时间片大小的设置,用于指定任务的默认时间片大小。
参数 p_err 是一个指向错误码的指针,用于传递函数执行过程中的错误信息。
在函数中会进行一系列的操作:
根据参数设置循环调度的使能状态和默认时间片大小。
函数执行完成后,会将错误码设为 OS_ERR_NONE。

OSSchedRoundRobinYield

void OSSchedRoundRobinYield(OS_ERR *p_err)

这个函数用于手动触发循环调度下的任务切换。
参数 p_err 同样是一个指向错误码的指针,用于传递函数执行过程中的错误信息。
函数中的操作包括:
检查是否处于中断嵌套状态,如果是则返回错误码 OS_ERR_YIELD_ISR。
检查调度器是否被锁定,如果是则返回错误码 OS_ERR_SCHED_LOCKED。
检查循环调度是否被禁用,如果是则返回错误码 OS_ERR_ROUND_ROBIN_DISABLED。
将当前任务移动到就绪列表的末尾,以触发任务切换。
函数执行完成后,会将错误码设为 OS_ERR_NONE。

OSStart

void OSStart(OS_ERR *p_err)

这个函数用于启动操作系统。
参数 p_err 是一个指向错误码的指针,用于传递函数执行过程中的错误信息。
函数中的操作包括:
检查操作系统的运行状态,如果操作系统处于停止状态,则执行以下操作:
获取最高优先级任务的信息,包括优先级、任务控制块指针等。
将当前任务设置为最高优先级任务,将操作系统状态设置为运行状态。
执行特定于目标的代码以启动任务。
将错误码设为 OS_ERR_FATAL_RETURN,表明 OSStart() 不应该返回。
如果操作系统已经在运行,则将错误码设为 OS_ERR_OS_RUNNING。

OSVersion

CPU_INT16U OSVersion(OS_ERR *p_err)

这个函数用于获取操作系统的版本号。
参数 p_err 是一个指向错误码的指针,用于传递函数执行过程中的错误信息。
函数中的操作包括:
返回操作系统的版本号 OS_VERSION。
将错误码设为 OS_ERR_NONE。

OS_IdleTask

void OS_IdleTask(void *p_arg)

这个函数是一个空闲任务,用于在系统无其他任务可执行时执行。
参数 p_arg 是一个指向参数的指针,用于传递给任务的参数。
函数中的操作包括:
在一个无限循环中,周期性地执行空闲任务的操作。
在每次循环中,增加空闲任务计数器,并执行用户定义的空闲任务钩子函数。

OS_IdleTaskInit

void OS_IdleTaskInit(OS_ERR *p_err)

这个函数用于初始化空闲任务。
参数 p_err 是一个指向错误码的指针,用于传递函数执行过程中的错误信息。
函数中的操作包括:
初始化空闲任务计数器。
创建空闲任务,设置其优先级为系统最低优先级,通常是 OS_CFG_PRIO_MAX - 1u。
设置空闲任务的栈空间和其他参数。
将错误码设为 OS_ERR_NONE。

OS_Pend

void OS_Pend(OS_PEND_DATA *p_pend_data, OS_PEND_OBJ *p_obj, OS_STATE pending_on, OS_TICK timeout)

这个函数用于使任务进入挂起状态,等待某个事件的发生。
p_pend_data 是一个指向挂起数据结构的指针,用于存储任务挂起时的相关信息。
p_obj 是一个指向挂起对象的指针,用于表示任务挂起所等待的对象。
pending_on 表示任务挂起所等待的事件类型。
timeout 表示任务挂起的超时时间,如果超过该时间仍未等到事件发生,则任务会被唤醒。

OS_PendAbort

void OS_PendAbort(OS_PEND_OBJ *p_obj, OS_TCB *p_tcb, CPU_TS ts)

这个函数用于终止任务的挂起状态,使任务不再等待某个事件的发生。
p_obj 是一个指向被挂起的对象的指针。
p_tcb 是一个指向任务控制块的指针,表示需要终止挂起状态的任务。
ts 表示终止挂起状态的时间戳。

OS_PendAbort1

void OS_PendAbort1(OS_PEND_OBJ *p_obj, OS_TCB *p_tcb, CPU_TS ts)

这个函数用于在任务挂起列表中找到并标记被终止的挂起对象。
p_obj 是一个指向被挂起的对象的指针。
p_tcb 是一个指向任务控制块的指针,表示需要终止挂起状态的任务。
ts 表示终止挂起状态的时间戳。


http://www.ppmy.cn/news/1441300.html

相关文章

[ICLR-24] GPAvatar: Generalizable and Precise Head Avatar from Images(s)

[pdf | proj | code] 提出GPAvatar,实现可驱动的单图虚拟头像重建(Head avatar reconstruction)。重建:给定图像得到对应Tri-plane。在此基础上,本文提出了MTA,可以融合多张图片输入信息,缓解单…

SOLIDWORKS Electrical 3D--精准的三维布线

相信很多工程师在实际生产的时候都会遇到线材长度不准确的问题,从而导致线材浪费甚至整根线材报废的问题,这基本都是由于人工测量长度所导致的,因此本次和大家简单介绍一下SOLIDWORKS Electrical 3D布线的功能,Electrical 3D布线能…

Android 开发工具使用

c调试 在NDK调试的时候,如果找不到 符号的话,我们可以在调试配置中添加符号地址的全路径一直到根目录:,xxx/armeabi-v7a: You must point the symbol search paths at the obj/local/ directory. This is also not a …

《苍穹外卖》Day11部分知识点记录(数据统计——图像报表)

一、Apache ECharts 介绍 Apache ECharts是一款基于javascript的数据可视化图标库,提供直观、生动、可交互、可个性化定制的数据可视化图表。 官网地址:https://echarts.apache.org/zh/index.html 效果展示 柱形图饼图折线图 入门案例 1. 在 echart…

HarmonyOS 应用开发——入门

首先当然是华为的官方文档了,要认真学习: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/start-overview-0000001478061421-V2 不想花时间看,可以看我下面总结的干货,哈哈 第一个问题:stage架构和fa架构的区…

RabbitMQ spring boot TTL延时消费

关于延时消费主要分为两种实现&#xff0c;一种是rabbitmq的TTL机制&#xff0c;一种是rabbitmq的插件实现。 实现一&#xff1a;TTL 1、设置队列的过期时间 2、设置消息的过期时间 添加相关maven依赖 <dependency><groupId>org.springframework.boot</grou…

HTTP的MIME 类型(2024-04-27)

1、简介 MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的标准&#xff0c;用来表示文档、文件或字节流的性质和格式。 MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。 浏览器通常使用 MIME 类型&#xff08;而不是文件扩展名&…

数据结构 : 树的分类及在数据库索引中的运用

文章目录 一 &#xff1a;树的分类1、二叉树&#xff08;Binary Tree&#xff09;&#xff1a;2、二叉搜索树&#xff08;Binary Search Tree, BST&#xff09;&#xff1a;3、平衡二叉树&#xff1a;4、字典树&#xff08;Trie&#xff09;&#xff1a;5、多叉树&#xff08;M…