写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。
标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。
点击此处进入学习日记的总目录
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 内核的调试功能的实现。
包括了一些用于调试和诊断的函数和宏。
这些调试参数可以用于检查系统在不同配置下的资源使用情况,以及系统运行时的状态信息。
参数
-
常量定义:
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
:挂起对象的大小。- 其他参数用于配置任务、定时器、消息队列、互斥信号量等功能。
-
总数据空间:
OSDbg_DataSize
:系统使用的总数据空间大小,包括任务、定时器、事件标志、消息队列等各个组件占用的空间。
OS_Dbg_Init
函数 OS_Dbg_Init
主要用于初始化调试参数,让我们逐个解释其中的步骤:
-
声明指针变量:函数开始时声明了几个指针变量,用于访问调试参数的地址。这些指针变量分别为
p_temp08
、p_temp16
、p_temp32
,分别用于访问 8 位、16 位和 32 位参数。 -
初始化调试参数:在函数体内部,通过将调试参数的地址赋值给相应类型的指针变量,来获取调试参数的值。例如:
p_temp08 = (CPU_INT08U const *)&OSDbg_ArgChkEn;
,将参数OSDbg_ArgChkEn
的地址赋值给p_temp08
,然后通过*p_temp08
获取参数的值。- 后续代码块中的逻辑类似,根据参数类型不同,选择对应类型的指针进行赋值和访问。
-
防止编译器警告:在函数末尾,为了避免编译器警告,使用了
p_temp08
、p_temp16
、p_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:时间戳。
实现:该函数将任务的就绪标志设置为指定的事件标志,并清除任务的挂起状态,根据任务当前状态进行相应处理。