写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。
标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。
点击此处进入学习日记的总目录
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,并将错误类型设为无错误。