pull/5/head
cailun 1 year ago
parent f6fcaaeb37
commit 99c4c8235c

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//这个头文件的作用是定义了与内存池相关的私有函数和数据结构。
#ifndef _LOS_MEMBOX_PRI_H
#define _LOS_MEMBOX_PRI_H

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//定义了一个多重双向链表头的私有接口和数据结构。
//这个头文件定义了一个多重双向链表头的私有接口和数据结构。
#ifndef _LOS_MULTIPLE_DLINK_HEAD_PRI_H
#define _LOS_MULTIPLE_DLINK_HEAD_PRI_H

@ -26,6 +26,9 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
/*这个头文件定义了一些用于互斥锁mutex调试的接口和函数包括死锁检测、互斥锁状态跟踪、互斥锁泄漏检查等。
使*/
#ifndef _LOS_MUX_DEBUG_PRI_H
#define _LOS_MUX_DEBUG_PRI_H
@ -35,7 +38,7 @@
extern "C" {
#endif /* __cplusplus */
#endif /* __cplusplus */
//初始化死锁检测机制
/* Deadlock detection initialization interface */
extern UINT32 OsMuxDlockCheckInit(VOID);
STATIC INLINE UINT32 OsMuxDlockCheckInitHook(VOID)
@ -46,7 +49,7 @@ STATIC INLINE UINT32 OsMuxDlockCheckInitHook(VOID)
return LOS_OK;
#endif
}
//向死锁检测机制中添加任务持有的互斥锁信息
/* Add holding mutex lock node information */
extern VOID OsMuxDlockNodeInsert(UINT32 taskId, VOID *muxCB);
STATIC INLINE VOID OsMuxDlockNodeInsertHook(UINT32 taskId, VOID *muxCB)
@ -55,6 +58,7 @@ STATIC INLINE VOID OsMuxDlockNodeInsertHook(UINT32 taskId, VOID *muxCB)
OsMuxDlockNodeInsert(taskId, muxCB);
#endif
}
//从死锁检测机制中删除任务持有的互斥锁信息
/* Delete holding mutex lock node information */
extern VOID OsMuxDlockNodeDelete(UINT32 taskId, const VOID *muxCB);
STATIC INLINE VOID OsMuxDlockNodeDeleteHook(UINT32 taskId, const VOID *muxCB)
@ -63,6 +67,7 @@ STATIC INLINE VOID OsMuxDlockNodeDeleteHook(UINT32 taskId, const VOID *muxCB)
OsMuxDlockNodeDelete(taskId, muxCB);
#endif
}
//更新任务最后执行的时间
/* Update the last time the task was executed */
extern VOID OsTaskTimeUpdate(UINT32 taskId, UINT64 tickCount);
STATIC INLINE VOID OsTaskTimeUpdateHook(UINT32 taskId, UINT64 tickCount)
@ -71,7 +76,7 @@ STATIC INLINE VOID OsTaskTimeUpdateHook(UINT32 taskId, UINT64 tickCount)
OsTaskTimeUpdate(taskId, tickCount);
#endif
}
//初始化互斥锁状态跟踪机制
/* mutex debug initialization interface */
extern UINT32 OsMuxDbgInit(VOID);
STATIC INLINE UINT32 OsMuxDbgInitHook(VOID)
@ -82,6 +87,7 @@ STATIC INLINE UINT32 OsMuxDbgInitHook(VOID)
return LOS_OK;
#endif
}
//更新互斥锁最后执行的时间
/* Update the last time the mutex was executed */
extern VOID OsMuxDbgTimeUpdate(UINT32 muxId);
STATIC INLINE VOID OsMuxDbgTimeUpdateHook(UINT32 muxId)
@ -90,6 +96,7 @@ STATIC INLINE VOID OsMuxDbgTimeUpdateHook(UINT32 muxId)
OsMuxDbgTimeUpdate(muxId);
#endif
}
//在创建或删除互斥锁时更新互斥锁的状态跟踪信息
/* Update the MUX_DEBUG_CB of the mutex when created or deleted */
extern VOID OsMuxDbgUpdate(UINT32 muxID, TSK_ENTRY_FUNC creator);
STATIC INLINE VOID OsMuxDbgUpdateHook(UINT32 muxId, TSK_ENTRY_FUNC creator)
@ -98,6 +105,7 @@ STATIC INLINE VOID OsMuxDbgUpdateHook(UINT32 muxId, TSK_ENTRY_FUNC creator)
OsMuxDbgUpdate(muxId, creator);
#endif
}
//检查互斥锁是否泄漏
/* check the leak of mutex */
extern VOID OsMutexCheck(VOID);
STATIC INLINE VOID OsMutexCheckHook(VOID)

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//一个关于互斥锁的内部实现的头文件
#ifndef _LOS_MUX_PRI_H
#define _LOS_MUX_PRI_H
@ -45,12 +45,13 @@ extern "C" {
* Mutex base object must be the same as the first three member names of LosMuxCB,
* so that pthread_mutex_t can share the kernel mutex mechanism.
*/
//这是互斥锁的基本控制块,包含了互斥锁的一些基本信息
typedef struct {
LOS_DL_LIST muxList; /* Mutex linked list */
LosTaskCB *owner; /* The current thread that is locking a mutex */
UINT16 muxCount; /* Times of locking a mutex */
LOS_DL_LIST muxList;//连接列表 /* Mutex linked list */
LosTaskCB *owner; //互斥锁的拥有者 /* The current thread that is locking a mutex */
UINT16 muxCount; //被锁定的次数 /* Times of locking a mutex */
} MuxBaseCB;
//这是互斥锁的控制块,包含了更多的互斥锁信息
typedef struct {
LOS_DL_LIST muxList; /* Mutex linked list */
LosTaskCB *owner; /* The current thread that is locking a mutex */
@ -60,21 +61,29 @@ typedef struct {
} LosMuxCB;
/* Mutex global array address, which can be obtained by using a handle ID. */
//全局变量:这是一个互斥锁的全局数组地址,可以通过互斥锁的 ID 来获取对应的互斥锁对象。
extern LosMuxCB *g_allMux;
/* COUNT | INDEX split bit */
#define MUX_SPLIT_BIT 16
/* Set the mutex id */
//设置互斥锁的 ID
#define SET_MUX_ID(count, muxId) (((count) << MUX_SPLIT_BIT) | (muxId))
//根据互斥锁的 ID 获取索引
#define GET_MUX_INDEX(muxId) ((muxId) & ((1U << MUX_SPLIT_BIT) - 1))
//根据互斥锁的 ID 获取计数值
#define GET_MUX_COUNT(muxId) ((muxId) >> MUX_SPLIT_BIT)
/* Obtain the pointer to a mutex object of the mutex that has a specified handle. */
//根据互斥锁的 ID 获取对应的互斥锁对象指针
#define GET_MUX(muxId) (((LosMuxCB *)g_allMux) + GET_MUX_INDEX(muxId))
//初始化互斥锁
extern UINT32 OsMuxInit(VOID);
//执行互斥锁的等待操作
extern UINT32 OsMuxPendOp(LosTaskCB *runTask, MuxBaseCB *muxPended, UINT32 timeout, UINT32 *intSave);
//执行互斥锁的释放操作
extern UINT32 OsMuxPostOp(LosTaskCB *runTask, MuxBaseCB *muxPosted);
#ifdef __cplusplus
#if __cplusplus

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//这个头文件定义了关于每个CPU的私有数据结构这个结构体存储了与每个 CPU 相关的一些信息。
#ifndef _LOS_PERCPU_PRI_H
#define _LOS_PERCPU_PRI_H
@ -47,35 +47,34 @@ typedef enum {
CPU_EXC /* cpu in the exc */
} ExcFlag;
#endif
//排序链表的属性结构体,用于表示任务链表和软件定时器链表
typedef struct {
SortLinkAttribute taskSortLink; /* task sort link */
#ifdef LOSCFG_BASE_CORE_SWTMR
SortLinkAttribute swtmrSortLink; /* swtmr sort link */
#endif
UINT32 idleTaskId; /* idle task id */
UINT32 taskLockCnt; /* task lock flag */
UINT32 swtmrHandlerQueue; /* software timer timeout queue id */
UINT32 swtmrTaskId; /* software timer task id */
UINT32 schedFlag; /* pending scheduler flag */
UINT32 idleTaskId;//空闲任务的任务 ID /* idle task id */
UINT32 taskLockCnt;//任务锁计数,用于标记任务是否被锁定 /* task lock flag */
UINT32 swtmrHandlerQueue;//软件定时器的超时队列 ID /* software timer timeout queue id */
UINT32 swtmrTaskId;//软件定时器任务的 ID /* software timer task id */
UINT32 schedFlag;//调度标志,用于表示是否需要进行调度 /* pending scheduler flag */
#ifdef LOSCFG_KERNEL_SMP
UINT32 excFlag; /* cpu halt or exc flag */
UINT32 excFlag;//CPU 异常标志,用于表示 CPU 的运行状态,包括运行、休眠和异常状态 /* cpu halt or exc flag */
#ifdef LOSCFG_KERNEL_SMP_CALL
LOS_DL_LIST funcLink; /* mp function call link */
LOS_DL_LIST funcLink;//多处理器函数调用链表,用于多处理器间的函数调用 /* mp function call link */
#endif
#endif
} Percpu;
/* the kernel per-cpu structure */
extern Percpu g_percpu[LOSCFG_KERNEL_CORE_NUM];
//用于获取当前CPU
STATIC INLINE Percpu *OsPercpuGet(VOID)
{
return &g_percpu[ArchCurrCpuid()];
}
//用于获取指定CPU的Percpu结构体指针
STATIC INLINE Percpu *OsPercpuGetByID(UINT32 cpuid)
{
return &g_percpu[cpuid];

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//关于打印函数的私有头文件
#ifndef _LOS_PRINTF_PRI_H
#define _LOS_PRINTF_PRI_H
@ -36,13 +36,16 @@
extern "C" {
#endif /* __cplusplus */
#endif /* __cplusplus */
//在控制台上打印格式化字符串
extern VOID ConsoleVprintf(const CHAR *fmt, va_list ap);
//在串口上打印格式化字符串
extern VOID UartVprintf(const CHAR *fmt, va_list ap);
//打印异常信息
extern VOID PrintExcInfo(const CHAR *fmt, ...);
//打印内核调试信息
extern VOID LkDprintf(const CHAR *fmt, va_list ap);
#ifdef LOSCFG_SHELL_DMESG
//打印系统日志信息
extern VOID DmesgPrintf(const CHAR *fmt, va_list ap);
#endif

@ -25,7 +25,8 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
/*这个头文件定义了优先级队列的相关操作函数,
*/
#ifndef _LOS_PRIQUEUE_PRI_H
#define _LOS_PRIQUEUE_PRI_H
@ -57,6 +58,7 @@ extern "C" {
* @see none.
* @since Huawei LiteOS V100R001C00
*/
//初始化优先级队列
extern UINT32 OsPriQueueInit(VOID);
/**
@ -79,6 +81,7 @@ extern UINT32 OsPriQueueInit(VOID);
* @see OsPriQueueDequeue.
* @since Huawei LiteOS V100R001C00
*/
//根据项目的优先级将项目插入到优先级队列中
extern VOID OsPriQueueEnqueue(LOS_DL_LIST *priqueueItem, UINT32 priority);
/**
@ -99,6 +102,7 @@ extern VOID OsPriQueueEnqueue(LOS_DL_LIST *priqueueItem, UINT32 priority);
* @see OsPriQueueEnqueue.
* @since Huawei LiteOS V100R001C00
*/
//从优先级队列中删除一个项目
extern VOID OsPriQueueDequeue(LOS_DL_LIST *priqueueItem);
/**
@ -120,6 +124,7 @@ extern VOID OsPriQueueDequeue(LOS_DL_LIST *priqueueItem);
* @see none.
* @since Huawei LiteOS V100R001C00
*/
//获取优先级队列中具有最高优先级的项目
extern LOS_DL_LIST *OsPriQueueTop(VOID);
/**
@ -140,6 +145,7 @@ extern LOS_DL_LIST *OsPriQueueTop(VOID);
* @see none.
* @since Huawei LiteOS V100R001C00
*/
//获取具有指定优先级的项目数量
extern UINT32 OsPriQueueSize(UINT32 priority);
/**
@ -159,6 +165,7 @@ extern UINT32 OsPriQueueSize(UINT32 priority);
* @see none.
* @since Huawei LiteOS V100R001C00
*/
//获取优先级队列中项目的总数
extern UINT32 OsPriQueueTotalSize(VOID);
/**
@ -181,6 +188,7 @@ extern UINT32 OsPriQueueTotalSize(VOID);
* @see OsPriQueueDequeue.
* @since Huawei LiteOS V100R001C00
*/
//根据项目的优先级将项目插入到优先级队列的头部
extern VOID OsPriQueueEnqueueHead(LOS_DL_LIST *priqueueItem, UINT32 priority);
#ifdef __cplusplus

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//这个头文件提供了针对队列调试的相关函数声明
#ifndef _LOS_QUEUE_DEBUG_PRI_H
#define _LOS_QUEUE_DEBUG_PRI_H
@ -40,7 +40,9 @@ extern "C" {
#endif /* __cplusplus */
/* queue debug initialization interface */
//队列调试初始化接口
extern UINT32 OsQueueDbgInit(VOID);
//队列调试初始化的钩子函数根据配置是否开启队列调试功能来调用OsQueueDbgInit
STATIC INLINE UINT32 OsQueueDbgInitHook(VOID)
{
#ifdef LOSCFG_DEBUG_QUEUE
@ -50,7 +52,9 @@ STATIC INLINE UINT32 OsQueueDbgInitHook(VOID)
#endif
}
/* Update the last time the queue was executed */
//更新队列上次执行的时间
extern VOID OsQueueDbgTimeUpdate(UINT32 queueId);
//更新队列执行时间的钩子函数
STATIC INLINE VOID OsQueueDbgTimeUpdateHook(UINT32 queueId)
{
#ifdef LOSCFG_DEBUG_QUEUE
@ -58,7 +62,9 @@ STATIC INLINE VOID OsQueueDbgTimeUpdateHook(UINT32 queueId)
#endif
}
/* Update the task entry of the queue debug info when created or deleted */
//当队列被创建或删除时,更新队列调试信息中的任务入口信息
extern VOID OsQueueDbgUpdate(UINT32 queueId, TSK_ENTRY_FUNC entry);
//新队列调试信息的钩子函数
STATIC INLINE VOID OsQueueDbgUpdateHook(UINT32 queueId, TSK_ENTRY_FUNC entry)
{
#ifdef LOSCFG_DEBUG_QUEUE
@ -66,7 +72,9 @@ STATIC INLINE VOID OsQueueDbgUpdateHook(UINT32 queueId, TSK_ENTRY_FUNC entry)
#endif
}
/* check the leak of queue */
//检查队列内存泄漏
extern VOID OsQueueCheck(VOID);
//检查队列内存泄漏的钩子函数
STATIC INLINE VOID OsQueueCheckHook(VOID)
{
#ifdef LOSCFG_DEBUG_QUEUE

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//这个头文件定义了私有队列相关的一些结构体、宏和函数声明
#ifndef _LOS_QUEUE_PRI_H
#define _LOS_QUEUE_PRI_H
@ -42,12 +42,12 @@ typedef enum {
OS_QUEUE_WRITE = 1,
OS_QUEUE_N_RW = 2
} QueueReadWrite;
//枚举类型,分别表示队列的读写操作和队列头尾操作
typedef enum {
OS_QUEUE_HEAD = 0,
OS_QUEUE_TAIL = 1
} QueueHeadTail;
//用于生成或获取队列操作类型和读写类型
#define OS_QUEUE_OPERATE_TYPE(ReadOrWrite, HeadOrTail) (((UINT32)(HeadOrTail) << 1) | (ReadOrWrite))
#define OS_QUEUE_READ_WRITE_GET(type) ((type) & 0x01U)
#define OS_QUEUE_READ_HEAD (OS_QUEUE_READ | (OS_QUEUE_HEAD << 1))
@ -73,6 +73,7 @@ typedef enum {
#define GET_QUEUE_LIST(ptr) LOS_DL_LIST_ENTRY(ptr, LosQueueCB, readWriteList[OS_QUEUE_WRITE])
/* Queue information block structure */
//队列信息块结构体,包含了队列的各种属性和状态信息
typedef struct {
UINT8 *queueHandle; /* Pointer to a queue handle */
UINT8 queueState; /* state */
@ -88,12 +89,16 @@ typedef struct {
} LosQueueCB;
/* Queue information control block */
//全局变量,指向所有队列信息块的起始地址
extern LosQueueCB *g_allQueue;
/* alloc a stationary memory for a mail according to queueId */
//用于在指定的内存池中为邮件分配内存
extern VOID *OsQueueMailAlloc(UINT32 queueId, VOID *mailPool, UINT32 timeout);
/* free a stationary memory for a mail according to queueId. */
//释放邮件占用的内存
extern UINT32 OsQueueMailFree(UINT32 queueId, VOID *mailPool, VOID *mailMem);
//列初始化函数,用于初始化队列池
extern UINT32 OsQueueInit(VOID);
#ifdef __cplusplus

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//这个头文件定义了调度器相关的一些结构体和函数声明
#ifndef __LOS_SCHED_DEBUG_PRI_H
#define __LOS_SCHED_DEBUG_PRI_H
@ -34,19 +34,19 @@
extern "C" {
#endif /* __cplusplus */
#endif /* __cplusplus */
//表示单个CPU的运行时间和上下文切换次数
typedef struct {
UINT64 runtime;
UINT32 contexSwitch;
} SchedPercpu;
//表示整个系统的调度统计信息
typedef struct {
UINT64 startRuntime;
UINT64 allRuntime;
UINT32 allContextSwitch;
SchedPercpu schedPercpu[LOSCFG_KERNEL_CORE_NUM];
UINT64 startRuntime;//开始运行的时间
UINT64 allRuntime;//所有CPU的总共运行时间
UINT32 allContextSwitch;//上下文切换次数
SchedPercpu schedPercpu[LOSCFG_KERNEL_CORE_NUM];//每个CPU的具体情况
} SchedStat;
//用于统计中断处理的时间和次数
extern VOID OsHwiStatistics(size_t intNum);
#ifdef __cplusplus

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//这个头文件定义了调度器相关的一些结构体和函数声明
#ifndef _LOS_SCHED_PRI_H
#define _LOS_SCHED_PRI_H
@ -37,21 +37,22 @@
extern "C" {
#endif /* __cplusplus */
#endif /* __cplusplus */
//表示任务调度标志位每个位代表一个核心用于防止在OSStartToRun之前进行内核调度
extern UINT32 g_taskScheduled;
/*
* Schedule flag, one bit represents one core.
* This flag is used to prevent kernel scheduling before OSStartToRun.
*/
//设置对应核心的调度标志位
#define OS_SCHEDULER_SET(cpuid) do { \
g_taskScheduled |= (1U << (cpuid)); \
} while (0);
//清除对应核心的调度标志位
#define OS_SCHEDULER_CLR(cpuid) do { \
g_taskScheduled &= ~(1U << (cpuid)); \
} while (0);
//判断当前核心的调度标志位是否激活
#define OS_SCHEDULER_ACTIVE (g_taskScheduled & (1U << ArchCurrCpuid()))
typedef enum {
@ -60,6 +61,7 @@ typedef enum {
} SchedFlag;
/* Check if preemptable with counter flag */
//用于判断当前任务是否可以被抢占
STATIC INLINE BOOL OsPreemptable(VOID)
{
/*
@ -76,7 +78,7 @@ STATIC INLINE BOOL OsPreemptable(VOID)
LOS_IntRestore(intSave);
return preemptable;
}
//用于判断当前任务是否可以在调度过程中被抢占
STATIC INLINE BOOL OsPreemptableInSched(VOID)
{
BOOL preemptable = FALSE;
@ -104,6 +106,7 @@ STATIC INLINE BOOL OsPreemptableInSched(VOID)
* Current task needs to already be in the right state or the right
* queues it needs to be in.
*/
//选择下一个任务并切换到它
extern VOID OsSchedResched(VOID);
/*
@ -111,12 +114,14 @@ extern VOID OsSchedResched(VOID);
* try to do the schedule. However, the schedule won't be definitely
* taken place while there're no other higher priority tasks or locked.
*/
//将当前任务放回就绪队列,并尝试进行调度
extern VOID OsSchedPreempt(VOID);
/*
* Just like OsSchedPreempt, except this function will do the OS_INT_ACTIVE
* check, in case the schedule taken place in the middle of an interrupt.
*/
//触发调度,如果在中断中则设置调度标志位
STATIC INLINE VOID LOS_Schedule(VOID)
{
if (OS_INT_ACTIVE) {
@ -138,6 +143,7 @@ STATIC INLINE VOID LOS_Schedule(VOID)
* This API is used to check time slices. If the number of Ticks equals to the time for task switch,
* tasks are switched. Otherwise, the Tick counting continues.
*/
//检查时间片,如果满足任务切换的条件则进行切换
extern VOID OsTimesliceCheck(VOID);
#endif

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//这个头文件定义了一些用于调试信号量的接口和函数声明
#ifndef _LOS_SEM_DEBUG_PRI_H
#define _LOS_SEM_DEBUG_PRI_H
@ -39,7 +39,9 @@ extern "C" {
#endif /* __cplusplus */
/* semaphore debug initialization interface */
//信号量调试初始化接口
extern UINT32 OsSemDbgInit(VOID);
//更新信号量最后一次执行的时间
STATIC INLINE UINT32 OsSemDbgInitHook(VOID)
{
#ifdef LOSCFG_DEBUG_SEMAPHORE
@ -49,6 +51,7 @@ STATIC INLINE UINT32 OsSemDbgInitHook(VOID)
#endif
}
/* Update the last time the semaphore was executed */
//更新信号量最后一次执行的时间
extern VOID OsSemDbgTimeUpdate(UINT32 semId);
STATIC INLINE VOID OsSemDbgTimeUpdateHook(UINT32 semId)
{
@ -58,6 +61,7 @@ STATIC INLINE VOID OsSemDbgTimeUpdateHook(UINT32 semId)
return;
}
/* Update the SEM_DEBUG_CB of the semaphore when created or deleted */
//在创建或删除信号量时更新SEM_DEBUG_CB的信息
extern VOID OsSemDbgUpdate(UINT32 semID, TSK_ENTRY_FUNC creator, UINT16 count);
STATIC INLINE VOID OsSemDbgUpdateHook(UINT32 semId, TSK_ENTRY_FUNC creator, UINT16 count)
{
@ -67,6 +71,7 @@ STATIC INLINE VOID OsSemDbgUpdateHook(UINT32 semId, TSK_ENTRY_FUNC creator, UINT
return;
}
/* get the full data of SEM_DFX_CB */
//取SEM_DFX_CB的完整数据
extern UINT32 OsSemInfoGetFullData(VOID);
STATIC INLINE VOID OsSemInfoGetFullDataHook(VOID)
{

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//这个头文件定义了一些关于信号量的数据结构和函数声明,用于信号量的控制和管理。
#ifndef _LOS_SEM_PRI_H
#define _LOS_SEM_PRI_H
@ -38,24 +38,28 @@ extern "C" {
#endif /* __cplusplus */
/* Semaphore control structure. */
//信号量控制块的数据结构
typedef struct {
UINT8 semStat; /* Semaphore state, enum LosSemState */
UINT8 semType; /* Semaphore Type, enum LosSemType */
UINT16 semCount; /* number of available semaphores */
UINT32 semId; /* Semaphore control structure ID, COUNT(UINT16)|INDEX(UINT16) */
UINT8 semStat;//信号量的状态 /* Semaphore state, enum LosSemState */
UINT8 semType;//信号量的类型 /* Semaphore Type, enum LosSemType */
UINT16 semCount;//信号量可用数量 /* number of available semaphores */
UINT32 semId;//信号量ID /* Semaphore control structure ID, COUNT(UINT16)|INDEX(UINT16) */
LOS_DL_LIST semList; /* List of tasks that are waiting on a semaphore */
} LosSemCB;
/* Semaphore type */
//信号量类型的枚举值:包括计数信号量和二进制信号量
enum {
OS_SEM_COUNTING, /* The semaphore is a counting semaphore which max count is LOS_SEM_COUNT_MAX */
OS_SEM_BINARY, /* The semaphore is a binary semaphore which max count is OS_SEM_BINARY_COUNT_MAX */
};
/* Max count of binary semaphores */
//二进制信号量的最大计数值
#define OS_SEM_BINARY_COUNT_MAX 1
/* Semaphore information control block */
//信号量信息控制块的全局指针
extern LosSemCB *g_allSem;
#define GET_SEM_LIST(ptr) LOS_DL_LIST_ENTRY(ptr, LosSemCB, semList)
@ -75,6 +79,7 @@ extern LosSemCB *g_allSem;
/* This API is used to create a semaphore control structure according to the initial number of available semaphores
* specified by count and return the ID of this semaphore control structure. */
extern UINT32 OsSemInit(VOID);
#ifdef __cplusplus

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//这个头文件是操作系统中关于 Slab 内存分配的底层实现和接口声明
/**
* @defgroup los_slab Slab
* @ingroup kernel
@ -53,7 +53,7 @@ extern "C" {
/* max slab block size */
#define SLAB_MEM_MAX_SIZE (SLAB_MEM_CALSS_STEP_SIZE << (SLAB_MEM_COUNT - 1))
//描述 Slab 内存分配器状态的结构体
typedef struct tagLosSlabStatus {
UINT32 totalSize;
UINT32 usedSize;
@ -61,13 +61,13 @@ typedef struct tagLosSlabStatus {
UINT32 allocCount;
UINT32 freeCount;
} LosSlabStatus;
//Slab 块的节点结构体
typedef struct tagOsSlabBlockNode {
UINT16 magic;
UINT8 blkSz;
UINT8 recordId;
} OsSlabBlockNode;
//原子位图结构体,用于表示 Slab 内存分配器中的位图
struct AtomicBitset {
UINT32 numBits;
UINT32 words[0];
@ -144,25 +144,25 @@ extern UINT32 OsSlabGetMaxFreeBlkSize(const VOID *pool);
extern VOID *OsSlabCtrlHdrGet(const VOID *pool);
#else /* !LOSCFG_KERNEL_MEM_SLAB_EXTENTION */
//初始化 Slab 内存池
STATIC INLINE VOID OsSlabMemInit(VOID *pool, UINT32 size)
{
}
//销毁 Slab 内存池
STATIC INLINE VOID OsSlabMemDeinit(VOID *pool)
{
}
//从 Slab 内存池中分配内存
STATIC INLINE VOID *OsSlabMemAlloc(VOID *pool, UINT32 size)
{
return NULL;
}
//释放 Slab 内存池中的内存
STATIC INLINE BOOL OsSlabMemFree(VOID *pool, VOID *ptr)
{
return FALSE;
}
//检查指针是否属于 Slab 内存池
STATIC INLINE UINT32 OsSlabMemCheck(const VOID *pool, const VOID *ptr)
{
return (UINT32)-1;

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//一个用于操作排序链表SortLink的私有头文件。
#ifndef _LOS_SORTLINK_PRI_H
#define _LOS_SORTLINK_PRI_H
@ -118,13 +118,17 @@ typedef struct {
UINT16 cursor;
UINT16 reserved;
} SortLinkAttribute;
//初始化排序链表
extern UINT32 OsSortLinkInit(SortLinkAttribute *sortLinkHeader);
//一个节点添加到排序链表中
extern VOID OsAdd2SortLink(const SortLinkAttribute *sortLinkHeader, SortLinkList *sortList);
//从排序链表中删除一个节点
extern VOID OsDeleteSortLink(const SortLinkAttribute *sortLinkHeader, SortLinkList *sortList);
//获取下一个到期时间
extern UINT32 OsSortLinkGetNextExpireTime(const SortLinkAttribute *sortLinkHeader);
//获取目标节点的到期时间
extern UINT32 OsSortLinkGetTargetExpireTime(const SortLinkAttribute *sortLinkHeader,
const SortLinkList *targetSortList);
//更新到期时间 const SortLinkList *targetSortList);
extern VOID OsSortLinkUpdateExpireTime(UINT32 sleepTicks, SortLinkAttribute *sortLinkHeader);
#ifdef __cplusplus

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//一个用于处理堆栈信息的私有头文件
#ifndef _LOS_STACK_INFO_PRI_H
#define _LOS_STACK_INFO_PRI_H
@ -37,20 +37,25 @@
extern "C" {
#endif /* __cplusplus */
#endif /* __cplusplus */
//堆栈信息结构体
typedef struct {
VOID *stackTop;
UINT32 stackSize;
CHAR *stackName;
VOID *stackTop;//堆栈的顶部
UINT32 stackSize;//堆栈的大小
CHAR *stackName;//堆栈的名称
} StackInfo;
//表示无效的水位线值
#define OS_INVALID_WATERLINE 0xFFFFFFFF
//于检查堆栈顶部的魔术字是否有效的宏定义
#define OS_STACK_MAGIC_CHECK(topstack) (*(UINTPTR *)(topstack) == OS_STACK_MAGIC_WORD) /* 1:magic valid 0:unvalid */
//用于异常时获取堆栈信息的函数
extern VOID OsExcStackInfo(VOID);
//用于注册异常时获取的堆栈信息的函数
extern VOID OsExcStackInfoReg(const StackInfo *stackInfo, UINT32 stackNum);
//用于初始化堆栈的函数
extern VOID OsStackInit(VOID *stacktop, UINT32 stacksize);
//用于获取堆栈的水位线和使用峰值的函数
extern UINT32 OsStackWaterLineGet(const UINTPTR *stackBottom, const UINTPTR *stackTop, UINT32 *peakUsed);
//用于获取堆栈信息的函数
extern VOID OsGetStackInfo(const StackInfo **stackInfo, UINT32 *stackNum);
#ifdef __cplusplus

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//一个用于实现软件定时器的私有头文件。
#ifndef _LOS_SWTMR_PRI_H
#define _LOS_SWTMR_PRI_H
@ -40,7 +40,7 @@ extern "C" {
#endif /* __cplusplus */
#ifdef LOSCFG_BASE_CORE_SWTMR
//软件定时器的状态枚举,包括未使用、已创建和计时中
enum SwtmrState {
OS_SWTMR_STATUS_UNUSED, /* The software timer is not used. */
OS_SWTMR_STATUS_CREATED, /* The software timer is created. */
@ -48,12 +48,13 @@ enum SwtmrState {
};
/* Structure of the callback function that handles software timer timeout */
//处理软件定时器超时回调的回调函数结构体
typedef struct {
SWTMR_PROC_FUNC handler; /* Callback function that handles software timer timeout */
UINTPTR arg; /* Parameter passed in when the callback function
that handles software timer timeout is called */
} SwtmrHandlerItem;
//软件定时器控制块结构体
typedef struct {
SortLinkList sortList;
UINT8 state; /* Software timer state */
@ -71,22 +72,28 @@ typedef struct {
} LosSwtmrCB;
/* Type of the pointer to the structure of the callback function that handles software timer timeout */
//指向处理软件定时器超时回调的回调函数结构体的指针类型
typedef SwtmrHandlerItem *SwtmrHandlerItemPtr;
//软件定时器控制块数组
extern LosSwtmrCB *g_swtmrCBArray;
/* The software timer count list */
//软件定时器排序链表
extern SortLinkAttribute g_swtmrSortLink;
#define OS_SWT_FROM_SWTID(swtmrId) ((LosSwtmrCB *)g_swtmrCBArray + ((swtmrId) % KERNEL_SWTMR_LIMIT))
/* This API is used to scan a software timer when a Tick interrupt occurs and determine whether
* the software timer expires. */
//在Tick中断发生时扫描软件定时器判断是否到达超时时间
extern VOID OsSwtmrScan(VOID);
//初始化软件定时器
extern UINT32 OsSwtmrInit(VOID);
//软件定时器任务,用于处理软件定时器的超时事件
extern VOID OsSwtmrTask(VOID);
//软件定时器自旋锁
extern SPIN_LOCK_S g_swtmrSpin;
#ifdef LOSCFG_EXC_INTERACTION
//判断当前任务是否为软件定时器任务
extern BOOL IsSwtmrTask(UINT32 taskId);
#endif
#endif /* LOSCFG_BASE_CORE_SWTMR */

@ -25,7 +25,8 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
/*这是关于LiteOS中任务调度相关的头文件其中定义了任务控制块的数据结构和一些任务管理的接口函数。
*/
#ifndef _LOS_TASK_PRI_H
#define _LOS_TASK_PRI_H

@ -25,7 +25,7 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --------------------------------------------------------------------------- */
//这个头文件是关于系统时钟中断tick的定义和操作。
#ifndef _LOS_TICK_PRI_H
#define _LOS_TICK_PRI_H
@ -40,30 +40,41 @@ extern "C" {
#endif /* __cplusplus */
/* spinlock for tick */
//用于保护tick相关操作的自旋锁
extern SPIN_LOCK_S g_tickSpin;
//获取tick自旋锁并保存状态
#define TICK_LOCK(state) LOS_SpinLockSave(&g_tickSpin, &(state))
//释放tick自旋锁并恢复状态
#define TICK_UNLOCK(state) LOS_SpinUnlockRestore(&g_tickSpin, (state))
/* Count of Ticks */
//全局变量保存系统tick的计数值
extern volatile UINT64 g_tickCount[];
/* Cycle to nanosecond scale */
//循环周期到纳秒的转换比例
extern DOUBLE g_cycle2NsScale;
/* This API is called when the system tick timeout and triggers the interrupt. */
//系统tick中断处理函数当系统tick超时触发中断时调用
extern VOID OsTickHandler(VOID);
//初始化系统tick相关配置
extern UINT32 OsTickInit(UINT32 systemClock, UINT32 tickPerSecond);
//启动系统tick中断
extern VOID OsTickStart(VOID);
/* Convert from the cycle count to nanosecond. */
//将循环周期转换为纳秒
#define CYCLE_TO_NS(cycles) ((cycles) * g_cycle2NsScale)
/**
* Current system timer register is 32 bit, therefore TIMER_MAXLOAD define just in order to avoid ambiguity.
*/
//定时器最大加载值,用于避免歧义
#define TIMER_MAXLOAD 0xffffffff
#ifdef LOSCFG_KERNEL_TICKLESS
//tick中断标志在LOSCFG_KERNEL_TICKLESS选项开启时使用
#define LOS_TICK_INT_FLAG 0x80000000
#endif

Loading…
Cancel
Save