42#define OS_ALL_SEM_MASK 0xffffffff
44#if defined(LOSCFG_DEBUG_SEMAPHORE) || defined(LOSCFG_SHELL_CMD_DEBUG)
48 CHAR *nameArr[LOSCFG_BASE_CORE_TSK_LIMIT] = {0};
52 SCHEDULER_LOCK(intSave);
54 SCHEDULER_UNLOCK(intSave);
60 if (num == LOSCFG_BASE_CORE_TSK_LIMIT) {
64 SCHEDULER_UNLOCK(intSave);
66 PRINTK(
"Pended task list : ");
67 for (i = 0; i < num; i++) {
69 PRINTK(
"\n%s", nameArr[i]);
71 PRINTK(
", %s", nameArr[i]);
78#ifdef LOSCFG_DEBUG_SEMAPHORE
89 return (*((
UINT64 *)(VOID *)SORT_ELEM_ADDR(sortParam, left)) >
90 *((
UINT64 *)(VOID *)SORT_ELEM_ADDR(sortParam, right)));
99 PRINT_ERR(
"%s: malloc failed!\n", __FUNCTION__);
135 PRINTK(
"Used Semaphore List: \n");
136 PRINTK(
"\r\n SemID Count OriginalCount Creater(TaskEntry) LastAccessTime\n");
137 PRINTK(
" ------ ------ ------------- ------------------ -------------- \n");
139 SCHEDULER_LOCK(intSave);
141 SCHEDULER_UNLOCK(intSave);
142 for (i = 0; i < usedCount; i++) {
143 semCB = GET_SEM(semIndexArray[i]);
144 SCHEDULER_LOCK(intSave);
147 SCHEDULER_UNLOCK(intSave);
148 if ((semNode.
semStat != OS_SEM_USED) || (semDebug.
creater == NULL)) {
151 PRINTK(
" 0x%-07x0x%-07u0x%-14u%-22p0x%llx\n", semNode.
semID, semDebug.
origSemCount,
165 UINT32 *semIndexArray = NULL;
168 SCHEDULER_LOCK(intSave);
170 for (i = 0; i < LOSCFG_BASE_IPC_SEM_LIMIT; i++) {
171 semNode = GET_SEM(i);
173 if ((semNode->
semStat == OS_SEM_USED) && (semDebug->
creater != NULL)) {
177 SCHEDULER_UNLOCK(intSave);
179 if (usedSemCnt > 0) {
181 if (semIndexArray == NULL) {
182 PRINTK(
"LOS_MemAlloc failed in %s \n", __func__);
189 SCHEDULER_LOCK(intSave);
190 for (i = 0; i < LOSCFG_BASE_IPC_SEM_LIMIT; i++) {
191 semNode = GET_SEM(i);
193 if ((semNode->
semStat != OS_SEM_USED) || (semDebug->
creater == NULL)) {
196 *(semIndexArray + count) = i;
199 if (count >= usedSemCnt) {
203 SCHEDULER_UNLOCK(intSave);
207 (VOID)
LOS_MemFree((VOID *)OS_SYS_MEM_ADDR, semIndexArray);
213#ifdef LOSCFG_SHELL_CMD_DEBUG
216 UINT32 loop, semCnt, intSave;
220 if (semID == OS_ALL_SEM_MASK) {
221 for (loop = 0, semCnt = 0; loop < LOSCFG_BASE_IPC_SEM_LIMIT; loop++) {
222 semCB = GET_SEM(loop);
223 SCHEDULER_LOCK(intSave);
224 if (semCB->
semStat == OS_SEM_USED) {
226 SCHEDULER_UNLOCK(intSave);
228 PRINTK(
"\r\n SemID Count\n ---------- -----\n");
232 SCHEDULER_UNLOCK(intSave);
234 PRINTK(
" SemUsingNum : %u\n\n", semCnt);
237 if (GET_SEM_INDEX(semID) >= LOSCFG_BASE_IPC_SEM_LIMIT) {
238 PRINTK(
"\nInvalid semaphore id!\n");
242 semCB = GET_SEM(semID);
243 SCHEDULER_LOCK(intSave);
245 SCHEDULER_UNLOCK(intSave);
246 if ((semNode.
semID != semID) || (semNode.
semStat != OS_SEM_USED)) {
247 PRINTK(
"\nThe semaphore is not in use!\n");
251 PRINTK(
"\r\n SemID Count\n ---------- -----\n");
255 PRINTK(
"No task is pended on this semaphore!\n");
271#ifdef LOSCFG_DEBUG_SEMAPHORE
272 PRINTK(
"\nUsage: sem [fulldata|ID]\n");
274 PRINTK(
"\nUsage: sem [ID]\n");
280 semID = OS_ALL_SEM_MASK;
282#ifdef LOSCFG_DEBUG_SEMAPHORE
283 if (strcmp(argv[0],
"fulldata") == 0) {
288 semID = strtoul(argv[0], &endPtr, 0);
289 if ((endPtr == NULL) || (*endPtr != 0)) {
290 PRINTK(
"\nsem ID can't access %s.\n", argv[0]);
@ CMD_TYPE_EX
不支持标准命令参数输入,会把用户填写的命令关键字屏蔽掉,例如:输入ls /ramfs,传入给注册函数的参数只有/ramfs,而ls命令关键字并不会被传入。
LITE_OS_SEC_ALW_INLINE STATIC INLINE BOOL LOS_ListEmpty(LOS_DL_LIST *list)
Identify whether a specified doubly linked list is empty. | 判断链表是否为空
VOID * LOS_MemAlloc(VOID *pool, UINT32 size)
从指定内存池中申请size长度的内存,注意这可不是从内核堆空间中申请内存
UINT8 * m_aucSysMem1
系统动态内存池地址的起始地址 @note_thinking 能否不要用 0,1来命名核心变量 ???
UINT32 LOS_MemFree(VOID *pool, VOID *ptr)
释放从指定动态内存中申请的内存
LITE_OS_SEC_TEXT_MINOR UINT64 LOS_TickCountGet(VOID)
获取自系统启动以来的Tick数
VOID *(* TSK_ENTRY_FUNC)(UINTPTR param1, UINTPTR param2, UINTPTR param3, UINTPTR param4)
Define the type of a task entrance function.
VOID OsArraySortByTime(UINT32 *sortArray, UINT32 start, UINT32 end, const IpcSortParam *sortParam, OsCompareFunc compareFunc)
VOID OsSemDbgTimeUpdate(UINT32 semID)
更新最后访问时间
STATIC UINT32 OsSemInfoOutput(size_t semID)
STATIC VOID OsSemPendedTaskNamePrint(LosSemCB *semNode)
STATIC SemDebugCB * g_semDebugArray
SHELLCMD_ENTRY(sem_shellcmd, CMD_TYPE_EX, "sem", 1,(CmdCallBackFunc) OsShellCmdSemInfoGet)
STATIC BOOL SemCompareValue(const IpcSortParam *sortParam, UINT32 left, UINT32 right)
UINT32 OsSemDbgInit(VOID)
STATIC VOID OsSemSort(UINT32 *semIndexArray, UINT32 usedCount)
按信号量访问时间排序
VOID OsSemDbgUpdate(UINT32 semID, TSK_ENTRY_FUNC creater, UINT16 count)
更新信号量
UINT32 OsSemInfoGetFullData(VOID)
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdSemInfoGet(UINT32 argc, const CHAR **argv)
CHAR taskName[OS_TCB_NAME_LEN]
u32_t(* CmdCallBackFunc)(u32_t argc, const char **argv)