更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_sem_debug_pri.h 文件参考

浏览源代码.

函数

UINT32 OsSemDbgInit (VOID)
 
STATIC INLINE UINT32 OsSemDbgInitHook (VOID)
 
VOID OsSemDbgTimeUpdate (UINT32 semID)
 更新最后访问时间 更多...
 
STATIC INLINE VOID OsSemDbgTimeUpdateHook (UINT32 semID)
 
VOID OsSemDbgUpdate (UINT32 semID, TSK_ENTRY_FUNC creater, UINT16 count)
 更新信号量 更多...
 
STATIC INLINE VOID OsSemDbgUpdateHook (UINT32 semID, TSK_ENTRY_FUNC creater, UINT16 count)
 
UINT32 OsSemInfoGetFullData (VOID)
 
STATIC INLINE VOID OsSemInfoGetFullDataHook (VOID)
 

函数说明

◆ OsSemDbgInit()

UINT32 OsSemDbgInit ( VOID  )

在文件 los_sem_debug.c93 行定义.

94{
95 UINT32 size = LOSCFG_BASE_IPC_SEM_LIMIT * sizeof(SemDebugCB);
96 /* system resident memory, don't free */
98 if (g_semDebugArray == NULL) {
99 PRINT_ERR("%s: malloc failed!\n", __FUNCTION__);
100 return LOS_NOK;
101 }
102 (VOID)memset_s(g_semDebugArray, size, 0, size);
103 return LOS_OK;
104}
VOID * LOS_MemAlloc(VOID *pool, UINT32 size)
从指定内存池中申请size长度的内存,注意这可不是从内核堆空间中申请内存
Definition: los_memory.c:1123
UINT8 * m_aucSysMem1
系统动态内存池地址的起始地址 @note_thinking 能否不要用 0,1来命名核心变量 ???
Definition: los_memory.c:108
STATIC SemDebugCB * g_semDebugArray
Definition: los_sem_debug.c:85
unsigned int UINT32
Definition: los_typedef.h:57
函数调用图:
这是这个函数的调用关系图:

◆ OsSemDbgInitHook()

STATIC INLINE UINT32 OsSemDbgInitHook ( VOID  )

在文件 los_sem_debug_pri.h46 行定义.

47{
48#ifdef LOSCFG_DEBUG_SEMAPHORE
49 return OsSemDbgInit();//信号量debug初始化
50#else
51 return LOS_OK;
52#endif
53}
UINT32 OsSemDbgInit(VOID)
Definition: los_sem_debug.c:93
函数调用图:
这是这个函数的调用关系图:

◆ OsSemDbgTimeUpdate()

VOID OsSemDbgTimeUpdate ( UINT32  semID)

更新最后访问时间

在文件 los_sem_debug.c106 行定义.

107{
108 SemDebugCB *semDebug = &g_semDebugArray[GET_SEM_INDEX(semID)];
109 semDebug->lastAccessTime = LOS_TickCountGet();//获取tick总数
110 return;
111}
LITE_OS_SEC_TEXT_MINOR UINT64 LOS_TickCountGet(VOID)
获取自系统启动以来的Tick数
Definition: los_sys.c:82
UINT64 lastAccessTime
Definition: los_sem_debug.c:82
函数调用图:
这是这个函数的调用关系图:

◆ OsSemDbgTimeUpdateHook()

STATIC INLINE VOID OsSemDbgTimeUpdateHook ( UINT32  semID)

在文件 los_sem_debug_pri.h56 行定义.

57{
58#ifdef LOSCFG_DEBUG_SEMAPHORE
59 OsSemDbgTimeUpdate(semID);
60#endif
61 return;
62}
VOID OsSemDbgTimeUpdate(UINT32 semID)
更新最后访问时间
函数调用图:
这是这个函数的调用关系图:

◆ OsSemDbgUpdate()

VOID OsSemDbgUpdate ( UINT32  semID,
TSK_ENTRY_FUNC  creater,
UINT16  count 
)

更新信号量

在文件 los_sem_debug.c113 行定义.

114{
115 SemDebugCB *semDebug = &g_semDebugArray[GET_SEM_INDEX(semID)];
116 semDebug->creater = creater; //改为由参数入口函数创建了这个任务
117 semDebug->lastAccessTime = LOS_TickCountGet();//获取tick总数
118 semDebug->origSemCount = count;//原始信号量改变
119 return;
120}
TSK_ENTRY_FUNC creater
Definition: los_sem_debug.c:83
UINT16 origSemCount
Definition: los_sem_debug.c:81
函数调用图:
这是这个函数的调用关系图:

◆ OsSemDbgUpdateHook()

STATIC INLINE VOID OsSemDbgUpdateHook ( UINT32  semID,
TSK_ENTRY_FUNC  creater,
UINT16  count 
)

在文件 los_sem_debug_pri.h65 行定义.

66{
67#ifdef LOSCFG_DEBUG_SEMAPHORE
68 OsSemDbgUpdate(semID, creater, count);
69#endif
70 return;
71}
VOID OsSemDbgUpdate(UINT32 semID, TSK_ENTRY_FUNC creater, UINT16 count)
更新信号量
函数调用图:
这是这个函数的调用关系图:

◆ OsSemInfoGetFullData()

UINT32 OsSemInfoGetFullData ( VOID  )

在文件 los_sem_debug.c159 行定义.

160{
161 UINT32 usedSemCnt = 0;
162 LosSemCB *semNode = NULL;
163 SemDebugCB *semDebug = NULL;
164 UINT32 i;
165 UINT32 *semIndexArray = NULL;
166 UINT32 count, intSave;
167
168 SCHEDULER_LOCK(intSave);
169 /* Get the used semaphore count. */
170 for (i = 0; i < LOSCFG_BASE_IPC_SEM_LIMIT; i++) {
171 semNode = GET_SEM(i);
172 semDebug = &g_semDebugArray[i];
173 if ((semNode->semStat == OS_SEM_USED) && (semDebug->creater != NULL)) {
174 usedSemCnt++;
175 }
176 }
177 SCHEDULER_UNLOCK(intSave);
178
179 if (usedSemCnt > 0) {
180 semIndexArray = (UINT32 *)LOS_MemAlloc((VOID *)OS_SYS_MEM_ADDR, usedSemCnt * sizeof(UINT32));
181 if (semIndexArray == NULL) {
182 PRINTK("LOS_MemAlloc failed in %s \n", __func__);
183 return LOS_NOK;
184 }
185
186 /* Fill the semIndexArray with the real index. */
187 count = 0;
188
189 SCHEDULER_LOCK(intSave);
190 for (i = 0; i < LOSCFG_BASE_IPC_SEM_LIMIT; i++) {
191 semNode = GET_SEM(i);
192 semDebug = &g_semDebugArray[i];
193 if ((semNode->semStat != OS_SEM_USED) || (semDebug->creater == NULL)) {
194 continue;
195 }
196 *(semIndexArray + count) = i;
197 count++;
198 /* if the count is touched usedSemCnt break. */
199 if (count >= usedSemCnt) {
200 break;
201 }
202 }
203 SCHEDULER_UNLOCK(intSave);
204 OsSemSort(semIndexArray, count);
205
206 /* free the index array. */
207 (VOID)LOS_MemFree((VOID *)OS_SYS_MEM_ADDR, semIndexArray);
208 }
209 return LOS_OK;
210}
UINT32 LOS_MemFree(VOID *pool, VOID *ptr)
释放从指定动态内存中申请的内存
Definition: los_memory.c:1369
STATIC VOID OsSemSort(UINT32 *semIndexArray, UINT32 usedCount)
按信号量访问时间排序
UINT8 semStat
Definition: los_sem_pri.h:48
函数调用图:
这是这个函数的调用关系图:

◆ OsSemInfoGetFullDataHook()

STATIC INLINE VOID OsSemInfoGetFullDataHook ( VOID  )

在文件 los_sem_debug_pri.h74 行定义.

75{
76#ifdef LOSCFG_DEBUG_SEMAPHORE
78#endif
79 return;
80}
UINT32 OsSemInfoGetFullData(VOID)
函数调用图:
这是这个函数的调用关系图: