diff --git a/kal/cmsis/cmsis_liteos2.c b/kal/cmsis/cmsis_liteos2.c index 997e336cf085e48acb1873aa007e7fd346c83072..dc8a529e1036a429fcdc25d68fbd14bd554ea5c4 100644 --- a/kal/cmsis/cmsis_liteos2.c +++ b/kal/cmsis/cmsis_liteos2.c @@ -244,37 +244,49 @@ osThreadId_t osThreadNew(osThreadFunc_t func, void *argument, const osThreadAttr { UINT32 tid; UINT32 ret; - LosTaskCB *pstTaskCB = NULL; - TSK_INIT_PARAM_S stTskInitParam = {NULL}; + osThreadAttr_t attrTemp = {0}; + TSK_INIT_PARAM_S stTskInitParam = {0}; UINT16 priority; if (OS_INT_ACTIVE || (func == NULL)) { return (osThreadId_t)NULL; } - priority = attr ? LOS_PRIORITY(attr->priority) : LOSCFG_BASE_CORE_TSK_DEFAULT_PRIO; + if (attr == NULL) { + attrTemp.priority = osPriorityNormal, + attr = &attrTemp; + } + + priority = LOS_PRIORITY(attr->priority); if (!ISVALID_LOS_PRIORITY(priority)) { /* unsupported priority */ return (osThreadId_t)NULL; } - stTskInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)func; stTskInitParam.uwArg = (UINT32)argument; - stTskInitParam.uwStackSize = attr ? attr->stack_size : LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE; - stTskInitParam.pcName = (CHAR *)(attr ? attr->name : "[NULL]"); - stTskInitParam.usTaskPrio = priority; - if ((attr != NULL) && (attr->attr_bits == osThreadJoinable)) { + if ((attr->stack_mem != NULL) && (attr->stack_size != 0)) { + stTskInitParam.stackAddr = (UINTPTR)attr->stack_mem; + stTskInitParam.uwStackSize = attr->stack_size; + } else if (attr->stack_size != 0) { + stTskInitParam.uwStackSize = attr->stack_size; + } else { + stTskInitParam.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE; + } + if (attr->name != NULL) { + stTskInitParam.pcName = (char *)attr->name; + } else { + stTskInitParam.pcName = "CmsisTask"; + } + if (attr->attr_bits == osThreadJoinable) { stTskInitParam.uwResved = LOS_TASK_ATTR_JOINABLE; } + stTskInitParam.usTaskPrio = priority; ret = LOS_TaskCreate(&tid, &stTskInitParam); - if (ret != LOS_OK) { return (osThreadId_t)NULL; } - pstTaskCB = OS_TCB_FROM_TID(tid); - - return (osThreadId_t)pstTaskCB; + return (osThreadId_t)OS_TCB_FROM_TID(tid); } const char *osThreadGetName(osThreadId_t thread_id) diff --git a/kal/posix/src/pthread.c b/kal/posix/src/pthread.c index 6a934ded841dc91ff795a17cf80ed34eaf746506..37296c6e03c88ad7b61625ae5306dc1628cc2394 100644 --- a/kal/posix/src/pthread.c +++ b/kal/posix/src/pthread.c @@ -92,27 +92,23 @@ static inline bool IsPthread(pthread_t thread) return true; } -static int PthreadCreateAttrInit(const pthread_attr_t *attr, void *(*startRoutine)(void *), void *arg, - TSK_INIT_PARAM_S *taskInitParam) +static int PthreadAttrCheck(const pthread_attr_t *threadAttr, TSK_INIT_PARAM_S *taskInitParam) { - const pthread_attr_t *threadAttr = attr; + INT32 ret; struct sched_param schedParam = { 0 }; INT32 policy = 0; - pthread_attr_t attrTmp; - INT32 ret; - - if (!attr) { - (VOID)pthread_attr_init(&attrTmp); - threadAttr = &attrTmp; - } - if (threadAttr->stackaddr_set != 0) { - return ENOTSUP; - } if (threadAttr->stacksize < PTHREAD_STACK_MIN) { return EINVAL; } - taskInitParam->uwStackSize = threadAttr->stacksize; + if ((threadAttr->stackaddr_set != 0) && (threadAttr->stacksize_set != 0)) { + taskInitParam->stackAddr = (UINTPTR)threadAttr->stackaddr; + } + if (threadAttr->stacksize_set != 0) { + taskInitParam->uwStackSize = threadAttr->stacksize; + } else { + taskInitParam->uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE; + } if (threadAttr->inheritsched == PTHREAD_EXPLICIT_SCHED) { taskInitParam->usTaskPrio = (UINT16)threadAttr->schedparam.sched_priority; } else if (IsPthread(pthread_self())) { @@ -124,6 +120,25 @@ static int PthreadCreateAttrInit(const pthread_attr_t *attr, void *(*startRoutin } else { taskInitParam->usTaskPrio = (UINT16)threadAttr->schedparam.sched_priority; } + return 0; +} + +static int PthreadCreateAttrInit(const pthread_attr_t *attr, void *(*startRoutine)(void *), void *arg, + TSK_INIT_PARAM_S *taskInitParam) +{ + const pthread_attr_t *threadAttr = attr; + pthread_attr_t attrTmp; + INT32 ret; + + if (attr == NULL) { + (VOID)pthread_attr_init(&attrTmp); + threadAttr = &attrTmp; + } + + ret = PthreadAttrCheck(threadAttr, taskInitParam); + if (ret != 0) { + return ret; + } PthreadData *pthreadData = (PthreadData *)malloc(sizeof(PthreadData)); if (pthreadData == NULL) { diff --git a/kal/posix/src/pthread_attr.c b/kal/posix/src/pthread_attr.c index f924f5412374c7a54d4b6a3ccd2387c33464fccf..7bd84a28d8431580a1cca9a6f6f9afbf985d138f 100644 --- a/kal/posix/src/pthread_attr.c +++ b/kal/posix/src/pthread_attr.c @@ -219,30 +219,32 @@ int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stackSize) attr->stacksize_set = 1; attr->stacksize = stackSize; - return 0; } int pthread_attr_setstack(pthread_attr_t *attr, void *stackAddr, size_t stackSize) { - (void)attr; - (void)stackAddr; - (void)stackSize; - PRINT_ERR("%s: Don't support the pthread stack func currently!\n", __FUNCTION__); - errno = ENOSYS; + if ((attr == NULL) || (stackAddr == NULL) || (stackSize < PTHREAD_STACK_MIN)) { + return EINVAL; + } - return -1; + attr->stacksize_set = 1; + attr->stacksize = stackSize; + attr->stackaddr_set = 1; + attr->stackaddr = stackAddr; + return 0; } int pthread_attr_getstack(const pthread_attr_t *attr, void **stackAddr, size_t *stackSize) { - (void)attr; - (void)stackAddr; - (void)stackSize; - PRINT_ERR("%s: Don't support the pthread stack func currently!\n", __FUNCTION__); - errno = ENOSYS; + if ((attr == NULL) || (stackAddr == NULL) || (stackSize == NULL) || + !attr->stacksize_set || !attr->stackaddr_set) { + return EINVAL; + } - return -1; + *stackAddr = attr->stackaddr; + *stackSize = attr->stacksize; + return 0; } int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stackSize) diff --git a/kernel/include/los_task.h b/kernel/include/los_task.h index 194636a9db87f99ed819d18e64c52bd7eee2d523..a5091bc21a8e9be01a9e5a8e68e5a6287ddfd84e 100644 --- a/kernel/include/los_task.h +++ b/kernel/include/los_task.h @@ -457,6 +457,7 @@ typedef struct tagTskInitParam { TSK_ENTRY_FUNC pfnTaskEntry; /**< Task entrance function */ UINT16 usTaskPrio; /**< Task priority */ UINT32 uwArg; /**< Task parameters */ + UINTPTR stackAddr; /**< Task satck memory */ UINT32 uwStackSize; /**< Task stack size */ CHAR *pcName; /**< Task name */ UINT32 uwResved; /**< Reserved */ @@ -1276,6 +1277,14 @@ extern UINT32 LOS_TaskDetach(UINT32 taskID); */ #define OS_TASK_STATUS_EXIT 0x0100 +/** + * @ingroup los_task + * Flag that indicates the task or task control block status. + * + * Task stack allocated by the system. + */ +#define OS_TASK_FLAG_STACK_FREE 0x0800 + /** * @ingroup los_task * Flag that indicates the task property. diff --git a/kernel/src/los_task.c b/kernel/src/los_task.c index ec110c974daeaf4d49afdf38b23c0f52d57cf2e3..95953cdaa9960aed702dfb11f823aa32990ce822 100644 --- a/kernel/src/los_task.c +++ b/kernel/src/los_task.c @@ -126,19 +126,28 @@ STATIC_INLINE UINT32 OsCheckTaskIDValid(UINT32 taskID) return ret; } +STATIC INLINE VOID OsInsertTCBToFreeList(LosTaskCB *taskCB) +{ + UINT32 taskID = taskCB->taskID; + (VOID)memset_s(taskCB, sizeof(LosTaskCB), 0, sizeof(LosTaskCB)); + taskCB->taskID = taskID; + taskCB->taskStatus = OS_TASK_STATUS_UNUSED; + LOS_ListAdd(&g_losFreeTask, &taskCB->pendList); +} + STATIC VOID OsRecycleTaskResources(LosTaskCB *taskCB, UINTPTR *stackPtr) { - if (!(taskCB->taskStatus & OS_TASK_STATUS_EXIT)) { - LOS_ListAdd(&g_losFreeTask, &taskCB->pendList); - taskCB->taskStatus = OS_TASK_STATUS_UNUSED; - } - if (taskCB->topOfStack != 0) { + if ((taskCB->taskStatus & OS_TASK_FLAG_STACK_FREE) && (taskCB->topOfStack != 0)) { #if (LOSCFG_EXC_HARDWARE_STACK_PROTECTION == 1) *stackPtr = taskCB->topOfStack - OS_TASK_STACK_PROTECT_SIZE; #else *stackPtr = taskCB->topOfStack; #endif taskCB->topOfStack = (UINT32)NULL; + taskCB->taskStatus &= ~OS_TASK_FLAG_STACK_FREE; + } + if (!(taskCB->taskStatus & OS_TASK_STATUS_EXIT)) { + OsInsertTCBToFreeList(taskCB); } } @@ -667,10 +676,9 @@ LITE_OS_SEC_TEXT_INIT STATIC_INLINE UINT32 OsTaskInitParamCheck(TSK_INIT_PARAM_S return LOS_OK; } -LITE_OS_SEC_TEXT_INIT UINT32 OsNewTaskInit(LosTaskCB *taskCB, TSK_INIT_PARAM_S *taskInitParam, VOID *topOfStack) +STATIC UINT32 OsNewTaskInit(LosTaskCB *taskCB, TSK_INIT_PARAM_S *taskInitParam) { taskCB->arg = taskInitParam->uwArg; - taskCB->topOfStack = (UINT32)(UINTPTR)topOfStack; taskCB->stackSize = taskInitParam->uwStackSize; taskCB->taskSem = NULL; taskCB->taskMux = NULL; @@ -695,9 +703,30 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsNewTaskInit(LosTaskCB *taskCB, TSK_INIT_PARAM_S * LOS_ListInit(&taskCB->joinList); } + if (taskInitParam->stackAddr == (UINTPTR)NULL) { +#if (LOSCFG_EXC_HARDWARE_STACK_PROTECTION == 1) + UINT32 stackSize = taskCB->stackSize + OS_TASK_STACK_PROTECT_SIZE; + UINTPTR stackPtr = (UINTPTR)LOS_MemAllocAlign(OS_TASK_STACK_ADDR, stackSize, OS_TASK_STACK_PROTECT_SIZE); + taskCB->topOfStack = stackPtr + OS_TASK_STACK_PROTECT_SIZE; +#else + taskCB->topOfStack = (UINTPTR)LOS_MemAllocAlign(OS_TASK_STACK_ADDR, taskCB->stackSize, + LOSCFG_STACK_POINT_ALIGN_SIZE); +#endif + if (taskCB->topOfStack == (UINTPTR)NULL) { + return LOS_ERRNO_TSK_NO_MEMORY; + } + taskCB->taskStatus |= OS_TASK_FLAG_STACK_FREE; + } else { + taskCB->topOfStack = LOS_Align(taskInitParam->stackAddr, LOSCFG_STACK_POINT_ALIGN_SIZE); + taskCB->stackSize = ALIGN(taskCB->stackSize, OS_TASK_STACK_ADDR_ALIGN); + } + + /* initialize the task stack, write magic num to stack top */ + (VOID)memset_s((VOID *)taskCB->topOfStack, taskCB->stackSize, + (INT32)(OS_TASK_STACK_INIT & 0xFF), taskCB->stackSize); + *((UINT32 *)taskCB->topOfStack) = OS_TASK_MAGIC_WORD; taskCB->stackPointer = ArchTskStackInit(taskCB->taskID, taskCB->stackSize, (VOID *)taskCB->topOfStack); - return LOS_OK; } @@ -711,7 +740,6 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsNewTaskInit(LosTaskCB *taskCB, TSK_INIT_PARAM_S * LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskCreateOnly(UINT32 *taskID, TSK_INIT_PARAM_S *taskInitParam) { UINT32 intSave; - VOID *topOfStack = NULL; LosTaskCB *taskCB = NULL; UINT32 retVal; @@ -734,29 +762,13 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskCreateOnly(UINT32 *taskID, TSK_INIT_PARAM_S taskCB = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&g_losFreeTask)); LOS_ListDelete(LOS_DL_LIST_FIRST(&g_losFreeTask)); - LOS_IntRestore(intSave); -#if (LOSCFG_EXC_HARDWARE_STACK_PROTECTION == 1) - UINTPTR stackPtr = (UINTPTR)LOS_MemAllocAlign(OS_TASK_STACK_ADDR, taskInitParam->uwStackSize + - OS_TASK_STACK_PROTECT_SIZE, OS_TASK_STACK_PROTECT_SIZE); - topOfStack = (VOID *)(stackPtr + OS_TASK_STACK_PROTECT_SIZE); -#else - topOfStack = (VOID *)LOS_MemAllocAlign(OS_TASK_STACK_ADDR, taskInitParam->uwStackSize, - LOSCFG_STACK_POINT_ALIGN_SIZE); -#endif - if (topOfStack == NULL) { + retVal = OsNewTaskInit(taskCB, taskInitParam); + if (retVal != LOS_OK) { intSave = LOS_IntLock(); - LOS_ListAdd(&g_losFreeTask, &taskCB->pendList); + OsInsertTCBToFreeList(taskCB); LOS_IntRestore(intSave); - return LOS_ERRNO_TSK_NO_MEMORY; - } - /* initialize the task stack, write magic num to stack top */ - (VOID)memset_s(topOfStack, taskInitParam->uwStackSize, - (INT32)(OS_TASK_STACK_INIT & 0xFF), taskInitParam->uwStackSize); - - retVal = OsNewTaskInit(taskCB, taskInitParam, topOfStack); - if (retVal != LOS_OK) { return retVal; } @@ -1110,7 +1122,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskDelete(UINT32 taskID) if (taskCB->taskStatus & OS_TASK_STATUS_RUNNING) { if (!(taskCB->taskStatus & OS_TASK_STATUS_EXIT)) { - taskCB->taskStatus = OS_TASK_STATUS_UNUSED; + taskCB->taskStatus |= OS_TASK_STATUS_UNUSED; OsRunningTaskDelete(taskID, taskCB); } LOS_IntRestore(intSave); diff --git a/testsuites/sample/kernel/hwi/it_los_hwi_015.c b/testsuites/sample/kernel/hwi/it_los_hwi_015.c index 51702f288f5cc0b1b1e31c84e21c8dabcbf4f9c5..e70edf2e74a8f24a549529fc7876f4d9f96a96b2 100644 --- a/testsuites/sample/kernel/hwi/it_los_hwi_015.c +++ b/testsuites/sample/kernel/hwi/it_los_hwi_015.c @@ -67,7 +67,7 @@ static UINT32 Testcase(VOID) HwiIrqParam irqParam; (void)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam)); irqParam.pDevId = 0; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; task.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01; task.pcName = "Tsk015A"; diff --git a/testsuites/sample/kernel/hwi/it_los_hwi_016.c b/testsuites/sample/kernel/hwi/it_los_hwi_016.c index 77471f834168a20f4ddb35a9d472585bef3a764e..5daa390037b2b018e3bf90f82df8966604ab5f27 100644 --- a/testsuites/sample/kernel/hwi/it_los_hwi_016.c +++ b/testsuites/sample/kernel/hwi/it_los_hwi_016.c @@ -102,7 +102,7 @@ static UINT32 Testcase(VOID) (void)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam)); irqParam.pDevId = 0; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; task.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01; task.pcName = "HwiTsk016A"; diff --git a/testsuites/sample/kernel/hwi/it_los_hwi_017.c b/testsuites/sample/kernel/hwi/it_los_hwi_017.c index 01b1fd492ea18f872f4cd9bb8b90541c7beb758a..2350fa375ee7c57b969ba61b6590daafbe645ffc 100644 --- a/testsuites/sample/kernel/hwi/it_los_hwi_017.c +++ b/testsuites/sample/kernel/hwi/it_los_hwi_017.c @@ -66,7 +66,7 @@ EXIT: static VOID HwiF01(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; TestHwiClear(HWI_NUM_TEST); diff --git a/testsuites/sample/kernel/hwi/it_los_hwi_018.c b/testsuites/sample/kernel/hwi/it_los_hwi_018.c index 0e91c53910144d3d86d42ddf201c752520310817..b0f398676e38f4a53c244c466b38da59cdc10043 100644 --- a/testsuites/sample/kernel/hwi/it_los_hwi_018.c +++ b/testsuites/sample/kernel/hwi/it_los_hwi_018.c @@ -73,7 +73,7 @@ static UINT32 Testcase(VOID) (void)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam)); irqParam.pDevId = 0; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; task.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01; task.pcName = "HwiTsk018A"; diff --git a/testsuites/sample/kernel/hwi/it_los_hwi_019.c b/testsuites/sample/kernel/hwi/it_los_hwi_019.c index 9a9ce57f6850fbb23c5ac3f392c6e51b9836b4ac..6e3a56836e5ef6884ead713bc25ec8eb3c17ea06 100644 --- a/testsuites/sample/kernel/hwi/it_los_hwi_019.c +++ b/testsuites/sample/kernel/hwi/it_los_hwi_019.c @@ -82,7 +82,7 @@ static UINT32 Testcase(VOID) (void)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam)); irqParam.pDevId = 0; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; task.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01; task.pcName = "HwiTsk019A"; diff --git a/testsuites/sample/kernel/hwi/it_los_hwi_020.c b/testsuites/sample/kernel/hwi/it_los_hwi_020.c index a526f08aaf2ebf6d3f9e1785d22151d30abdb7eb..b4e497b6519ccc50d71df4eda42a248e6477a4d9 100644 --- a/testsuites/sample/kernel/hwi/it_los_hwi_020.c +++ b/testsuites/sample/kernel/hwi/it_los_hwi_020.c @@ -52,7 +52,7 @@ EXIT: static VOID HwiF01(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; TestHwiClear(HWI_NUM_TEST); @@ -100,7 +100,7 @@ static UINT32 Testcase(VOID) (void)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam)); irqParam.pDevId = 0; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; task.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01; task.pcName = "HwiTsk020A"; diff --git a/testsuites/sample/kernel/hwi/it_los_hwi_021.c b/testsuites/sample/kernel/hwi/it_los_hwi_021.c index 0e36d0bee26b57f83a08001adee114e08271c5fd..2f9d1267623fb9583a9e2eab2eb59bd4c17bccdb 100644 --- a/testsuites/sample/kernel/hwi/it_los_hwi_021.c +++ b/testsuites/sample/kernel/hwi/it_los_hwi_021.c @@ -47,7 +47,7 @@ EXIT: static VOID HwiF01(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; TestHwiClear(HWI_NUM_TEST); @@ -92,7 +92,7 @@ static UINT32 Testcase(VOID) (void)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam)); irqParam.pDevId = 0; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; task.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01; task.pcName = "HwiTsk021A"; diff --git a/testsuites/sample/kernel/hwi/it_los_hwi_024.c b/testsuites/sample/kernel/hwi/it_los_hwi_024.c index 16ab3ff4cf00ebe8a2b4cbe874bf203c33005eae..7563bddd8b97911bf9e86e0d1c3f7f12ab61e069 100644 --- a/testsuites/sample/kernel/hwi/it_los_hwi_024.c +++ b/testsuites/sample/kernel/hwi/it_los_hwi_024.c @@ -86,7 +86,7 @@ static UINT32 Testcase(VOID) (void)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam)); irqParam.pDevId = 0; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; task.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01; task.pcName = "HwiTask024A"; diff --git a/testsuites/sample/kernel/mux/It_los_mutex_007.c b/testsuites/sample/kernel/mux/It_los_mutex_007.c index 1173cc160435c20d41b4acde441ef46d8bae477f..e35e79d4262ab7108267d16ccba4d2dd13fa8a3d 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_007.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_007.c @@ -74,8 +74,8 @@ static VOID TaskF02(void) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; - TSK_INIT_PARAM_S task2; + TSK_INIT_PARAM_S task = {0}; + TSK_INIT_PARAM_S task2 = {0}; g_testCount = 0; diff --git a/testsuites/sample/kernel/mux/It_los_mutex_009.c b/testsuites/sample/kernel/mux/It_los_mutex_009.c index 017cc9dd45eb5b468130b9b7f2cda476109239fb..702c8f14b60fcab28cc0d632937f963a2861dfe3 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_009.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_009.c @@ -46,7 +46,7 @@ static VOID TaskF01(void) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; ret = LOS_MuxCreate(&g_mutexTest); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); diff --git a/testsuites/sample/kernel/mux/It_los_mutex_011.c b/testsuites/sample/kernel/mux/It_los_mutex_011.c index 1ec646458dd8ac9fc8d21405463a4dd1e3bd33cd..0fbde21bda615f564f3854344e979828ee249ea5 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_011.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_011.c @@ -55,7 +55,7 @@ static VOID TaskF01(void) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; ret = LOS_MuxCreate(&g_mutexTest); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); diff --git a/testsuites/sample/kernel/mux/It_los_mutex_012.c b/testsuites/sample/kernel/mux/It_los_mutex_012.c index b75bed0de3502620400e3476a1b686c7dbbe2991..36c037aef5405ff6bb32c682a4a48270d3364134 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_012.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_012.c @@ -59,7 +59,7 @@ static VOID TaskF01(void) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; ret = LOS_MuxCreate(&g_mutexTest); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); diff --git a/testsuites/sample/kernel/mux/It_los_mutex_014.c b/testsuites/sample/kernel/mux/It_los_mutex_014.c index 9e812ad8bd95aa259e66b1bdbac635df1ec39a8e..4d7c0312d58c216b571cb28e871911a0b91cd896 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_014.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_014.c @@ -54,8 +54,8 @@ static VOID TaskF01(void) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; - TSK_INIT_PARAM_S task2; + TSK_INIT_PARAM_S task = {0}; + TSK_INIT_PARAM_S task2 = {0}; ret = LOS_MuxCreate(&g_mutexTest); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); diff --git a/testsuites/sample/kernel/mux/It_los_mutex_015.c b/testsuites/sample/kernel/mux/It_los_mutex_015.c index 538d18a3d3e395161a3fe5f78b5870046fa3ff98..9cd56edacd1e4c1ab5cfbc9270bac6afe893a893 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_015.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_015.c @@ -61,7 +61,7 @@ static VOID TaskF01(void) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; ret = LOS_MuxCreate(&g_mutexTest); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); diff --git a/testsuites/sample/kernel/mux/It_los_mutex_021.c b/testsuites/sample/kernel/mux/It_los_mutex_021.c index 42178f5f819ec007b7f1538e00c1d8ac251c59e9..71c244dfb3146017d82f69b1dc2af2dc073b2877 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_021.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_021.c @@ -56,7 +56,7 @@ static VOID TaskF01(void) VOID TaskF02(void) { UINT32 ret; - TSK_INIT_PARAM_S task1; + TSK_INIT_PARAM_S task1 = {0}; g_testCount++; @@ -83,7 +83,7 @@ VOID TaskF02(void) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; g_testCount = 0; diff --git a/testsuites/sample/kernel/mux/It_los_mutex_023.c b/testsuites/sample/kernel/mux/It_los_mutex_023.c index 0b5436c2ba0c99509a262f377d55c214f67567a3..f3e3d2280818344a1d99e26aad0eb41dda53f0b0 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_023.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_023.c @@ -57,7 +57,7 @@ static VOID TaskF01(void) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; g_testCount = 0; diff --git a/testsuites/sample/kernel/mux/It_los_mutex_024.c b/testsuites/sample/kernel/mux/It_los_mutex_024.c index f6881ef32872d537f53435a4db581d7c850156f1..9d174adf69e7761b78745181040b9548e6b2187f 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_024.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_024.c @@ -47,7 +47,7 @@ static VOID TaskF01(void) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; g_testCount = 0; diff --git a/testsuites/sample/kernel/mux/It_los_mutex_026.c b/testsuites/sample/kernel/mux/It_los_mutex_026.c index 352fac9eaf787eaf144440e7c98a842d77ee3d5f..5511d2e42d6f915f057d3835d827a411466fbf7a 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_026.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_026.c @@ -85,7 +85,8 @@ static VOID TaskFuncB(VOID) static VOID TaskFuncA(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task1, task2; + TSK_INIT_PARAM_S task1 = {0}; + TSK_INIT_PARAM_S task2 = {0}; g_testCount++; @@ -144,7 +145,7 @@ static VOID TaskFuncA(VOID) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; g_testCount = 0; diff --git a/testsuites/sample/kernel/mux/It_los_mutex_027.c b/testsuites/sample/kernel/mux/It_los_mutex_027.c index 95a1a6eb7d08bdb064d7fb30d49c8db16cff70b2..720f167fc70a6c45625e36359c70b24c8c57a363 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_027.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_027.c @@ -78,7 +78,8 @@ static VOID TaskFuncB(VOID) static VOID TaskFuncA(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task1, task2; + TSK_INIT_PARAM_S task1 = {0}; + TSK_INIT_PARAM_S task2 = {0}; g_testCount++; ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 1, g_testCount); // 1, Here, assert that g_testCount is equal to 1. @@ -123,7 +124,7 @@ static VOID TaskFuncA(VOID) static UINT32 Testcase(void) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; g_testCount = 0; ret = LOS_MuxCreate(&g_mutexTest1); diff --git a/testsuites/sample/kernel/mux/It_los_mutex_029.c b/testsuites/sample/kernel/mux/It_los_mutex_029.c index 6e7cd0874455fb6e67a06a3e58e080adce87769d..cbff8eb801284e28e7e2f517ec5d8ccf8c38b8cf 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_029.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_029.c @@ -78,7 +78,8 @@ static VOID TaskFuncC(VOID) static VOID TaskFuncA(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task1, task2; + TSK_INIT_PARAM_S task1 = {0}; + TSK_INIT_PARAM_S task2 = {0}; g_testCount++; ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 1, g_testCount); // 1, Here, assert that g_testCount is equal to 1. @@ -128,7 +129,7 @@ static VOID TaskFuncA(VOID) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; g_testCount = 0; ret = LOS_MuxCreate(&g_mutexTest1); diff --git a/testsuites/sample/kernel/mux/It_los_mutex_030.c b/testsuites/sample/kernel/mux/It_los_mutex_030.c index 08c0c2047442749917b94f06ff12ccc76059f0ec..64c5f61a0a97e8d95c3e10803a9782650aa74420 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_030.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_030.c @@ -73,7 +73,8 @@ static VOID TaskFuncB(VOID) static VOID TaskFuncA(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task1, task2; + TSK_INIT_PARAM_S task1 = {0}; + TSK_INIT_PARAM_S task2 = {0}; g_testCount++; ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 1, g_testCount); // 1, Here, assert that g_testCount is equal to 1. @@ -121,7 +122,7 @@ static VOID TaskFuncA(VOID) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; g_testCount = 0; ret = LOS_MuxCreate(&g_mutexTest1); diff --git a/testsuites/sample/kernel/mux/It_los_mutex_031.c b/testsuites/sample/kernel/mux/It_los_mutex_031.c index 78af4fe50267b211fdafd279f2d47d34c927ba28..9afd0804832e09835484c81df56676936a5fc8b0 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_031.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_031.c @@ -76,7 +76,8 @@ static VOID TaskFuncB(VOID) static VOID TaskFuncA(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task1, task2; + TSK_INIT_PARAM_S task1 = {0}; + TSK_INIT_PARAM_S task2 = {0}; g_testCount++; ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 1, g_testCount); // 1, Here, assert that g_testCount is equal to 1. @@ -127,7 +128,7 @@ static VOID TaskFuncA(VOID) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; g_testCount = 0; ret = LOS_MuxCreate(&g_mutexTest1); diff --git a/testsuites/sample/kernel/mux/It_los_mutex_033.c b/testsuites/sample/kernel/mux/It_los_mutex_033.c index ee74e5677bf2a87032783dd330d3892c276e24d6..f7315987bf38a06a6572381b456fe4ce2c2a27f3 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_033.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_033.c @@ -81,7 +81,8 @@ static VOID TaskFuncB(VOID) static VOID TaskFuncA(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task1, task2; + TSK_INIT_PARAM_S task1 = {0}; + TSK_INIT_PARAM_S task2 = {0}; g_testCount++; ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 1, g_testCount); // 1, Here, assert that g_testCount is equal to 1. @@ -123,7 +124,7 @@ static VOID TaskFuncA(VOID) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; g_testCount = 0; ret = LOS_MuxCreate(&g_mutexTest1); diff --git a/testsuites/sample/kernel/mux/It_los_mutex_034.c b/testsuites/sample/kernel/mux/It_los_mutex_034.c index 26fa214fa266a41115730c4f32f9143fbf9b60c1..62d876c076359ff61b64156ba3eb10801cf1d6ed 100644 --- a/testsuites/sample/kernel/mux/It_los_mutex_034.c +++ b/testsuites/sample/kernel/mux/It_los_mutex_034.c @@ -79,7 +79,8 @@ static VOID TaskFuncB(VOID) static VOID TaskFuncA(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task1, task2; + TSK_INIT_PARAM_S task1 = {0}; + TSK_INIT_PARAM_S task2 = {0}; g_testCount++; ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 1, g_testCount); // 1, Here, assert that g_testCount is equal to 1. @@ -121,7 +122,7 @@ static VOID TaskFuncA(VOID) static UINT32 Testcase(VOID) { UINT32 ret; - TSK_INIT_PARAM_S task; + TSK_INIT_PARAM_S task = {0}; g_testCount = 0; ret = LOS_MuxCreate(&g_mutexTest1); diff --git a/testsuites/sample/kernel/queue/It_los_queue_head_032.c b/testsuites/sample/kernel/queue/It_los_queue_head_032.c index 46714a04f1af6c6a4e1a6ee3450153e7fab4df7c..44bc82578ab95b91474ee5a263575d4f8de3c700 100644 --- a/testsuites/sample/kernel/queue/It_los_queue_head_032.c +++ b/testsuites/sample/kernel/queue/It_los_queue_head_032.c @@ -69,7 +69,7 @@ static UINT32 Testcase(VOID) CHAR buff1[8] = "UniDSP"; TSK_INIT_PARAM_S task1 = { 0 }; - TSK_INIT_PARAM_S task2; + TSK_INIT_PARAM_S task2 = { 0 }; task1.pfnTaskEntry = (TSK_ENTRY_FUNC)ItQueueHead032F01; task1.pcName = "TskName1"; diff --git a/testsuites/sample/kernel/task/BUILD.gn b/testsuites/sample/kernel/task/BUILD.gn index 47d0480f64fca48d1ab422fe7f6cf487fe7d76fb..e23897d0962f6044490c1ece416b238e6f79ae8e 100644 --- a/testsuites/sample/kernel/task/BUILD.gn +++ b/testsuites/sample/kernel/task/BUILD.gn @@ -155,6 +155,8 @@ static_library("test_task") { "It_los_task_126.c", "It_los_task_127.c", "It_los_task_128.c", + "It_los_task_129.c", + "It_los_task_130.c", ] configs += [ "//kernel/liteos_m/testsuites:include" ] diff --git a/testsuites/sample/kernel/task/It_los_task.c b/testsuites/sample/kernel/task/It_los_task.c index d22df821305b195df9d2d61f64e740c57c6ac461..2ecfb4accfe42199c0ec875e8d306127947724f3 100644 --- a/testsuites/sample/kernel/task/It_los_task.c +++ b/testsuites/sample/kernel/task/It_los_task.c @@ -128,6 +128,9 @@ VOID ItSuiteLosTask() ItLosTask126(); ItLosTask127(); ItLosTask128(); + ItLosTask129(); + ItLosTask130(); + #if (LOS_KERNEL_TEST_FULL == 1) ItLosTask039(); ItLosTask040(); diff --git a/testsuites/sample/kernel/task/It_los_task.h b/testsuites/sample/kernel/task/It_los_task.h index 13b92334dbb21f350cc4cd35641a4262b2255351..4d04643e09698c616f2a081cf8db5baa9a304d48 100644 --- a/testsuites/sample/kernel/task/It_los_task.h +++ b/testsuites/sample/kernel/task/It_los_task.h @@ -183,6 +183,8 @@ extern VOID ItLosTask125(VOID); extern VOID ItLosTask126(VOID); extern VOID ItLosTask127(VOID); extern VOID ItLosTask128(VOID); +extern VOID ItLosTask129(VOID); +extern VOID ItLosTask130(VOID); #ifdef __cplusplus #if __cplusplus diff --git a/testsuites/sample/kernel/task/It_los_task_129.c b/testsuites/sample/kernel/task/It_los_task_129.c new file mode 100644 index 0000000000000000000000000000000000000000..df41fea7ff11a8900defd5e7ff3f310e69d28928 --- /dev/null +++ b/testsuites/sample/kernel/task/It_los_task_129.c @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021-2021 Huawei Device Co., Ltd. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "osTest.h" +#include "It_los_task.h" + +static VOID *TaskDeatchf01(void *argument) +{ + g_testCount++; + return NULL; +} + +static UINT32 TestCase(VOID) +{ + UINT32 ret; + UINT32 taskID; + TSK_INIT_PARAM_S osTaskInitParam = { 0 }; + VOID *taskStack = NULL; + g_testCount = 0; + + osTaskInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskDeatchf01; + osTaskInitParam.uwStackSize = OS_TSK_TEST_STACK_SIZE; + osTaskInitParam.pcName = "deatch"; + osTaskInitParam.usTaskPrio = TASK_PRIO_TEST - 5; /* 5: Relatively high priority */ + osTaskInitParam.uwResved = LOS_TASK_ATTR_JOINABLE; + + taskStack = LOS_MemAlloc(OS_TASK_STACK_ADDR, osTaskInitParam.uwStackSize); + osTaskInitParam.stackAddr = (UINTPTR)taskStack; + ICUNIT_ASSERT_NOT_EQUAL(osTaskInitParam.stackAddr, 0, osTaskInitParam.stackAddr); + + ret = LOS_TaskCreate(&taskID, &osTaskInitParam); + ICUNIT_ASSERT_EQUAL(ret, 0, ret); + + ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount); + + ret = LOS_TaskJoin(taskID, NULL); + ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); + + ret = LOS_TaskDelete(taskID); + ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_TSK_NOT_CREATED, ret); + + ret = LOS_MemFree(OS_TASK_STACK_ADDR, taskStack); + ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); + return LOS_OK; +} + +VOID ItLosTask129(VOID) // IT_Layer_ModuleORFeature_No +{ + TEST_ADD_CASE("ItLosTask129", TestCase, TEST_LOS, TEST_TASK, TEST_LEVEL0, TEST_FUNCTION); +} + diff --git a/testsuites/sample/kernel/task/It_los_task_130.c b/testsuites/sample/kernel/task/It_los_task_130.c new file mode 100644 index 0000000000000000000000000000000000000000..5e11c42ddb1448f4428e5518301da48241edfa0c --- /dev/null +++ b/testsuites/sample/kernel/task/It_los_task_130.c @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "osTest.h" +#include "It_los_task.h" + + +static VOID TaskF02(VOID) +{ + UINT32 ret; + + ICUNIT_GOTO_EQUAL(g_testCount, 2, g_testCount, EXIT1); // 2, Here, assert that g_testCount is equal to 2. + g_testCount++; + + ret = LOS_TaskResume(g_testTaskID01); + ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret); + + ICUNIT_GOTO_EQUAL(g_testCount, 4, g_testCount, EXIT2); // 4, Here, assert that g_testCount is equal to 4. + g_testCount++; + + LOS_TaskDelete(g_testTaskID02); + + return; + +EXIT1: + LOS_TaskDelete(g_testTaskID01); +EXIT2: + LOS_TaskDelete(g_testTaskID02); + return; +} + +static VOID TaskF01(VOID) +{ + UINT32 ret; + + ICUNIT_GOTO_EQUAL(g_testCount, 0, g_testCount, EXIT2); + g_testCount++; + + ret = LOS_TaskSuspend(g_testTaskID01); + ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret); + + ICUNIT_GOTO_EQUAL(g_testCount, 3, g_testCount, EXIT1); // 3, Here, assert that g_testCount is equal to 3. + g_testCount++; + + LOS_TaskDelete(g_testTaskID01); + + return; + +EXIT1: + LOS_TaskDelete(g_testTaskID02); +EXIT2: + LOS_TaskDelete(g_testTaskID01); + + return; +} + +static UINT32 TestCase(VOID) +{ + UINT32 ret; + TSK_INIT_PARAM_S task1 = { 0 }; + VOID *taskStack1 = NULL; + VOID *taskStack2 = NULL; + task1.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF01; + task1.uwStackSize = TASK_STACK_SIZE_TEST; + task1.pcName = "Tsk058A"; + task1.usTaskPrio = TASK_PRIO_TEST - 2; // 2, set new task priority, it is higher than the current task. + + g_testCount = 0; + + taskStack1 = LOS_MemAlloc(OS_TASK_STACK_ADDR, task1.uwStackSize); + task1.stackAddr = (UINTPTR)taskStack1; + ICUNIT_ASSERT_NOT_EQUAL(task1.stackAddr, 0, task1.stackAddr); + + ret = LOS_TaskCreate(&g_testTaskID01, &task1); + ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); + + ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT); + g_testCount++; + + task1.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskF02; + task1.pcName = "Tsk058B"; + task1.usTaskPrio = TASK_PRIO_TEST - 1; + + taskStack2 = LOS_MemAlloc(OS_TASK_STACK_ADDR, task1.uwStackSize); + task1.stackAddr = (UINTPTR)taskStack2; + ICUNIT_GOTO_NOT_EQUAL(task1.stackAddr, 0, task1.stackAddr, EXIT); + + ret = LOS_TaskCreate(&g_testTaskID02, &task1); + ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); + + ICUNIT_GOTO_EQUAL(g_testCount, 5, g_testCount, EXIT); // 5, Here, assert that g_testCount is equal to 5. + + ret = LOS_MemFree(OS_TASK_STACK_ADDR, taskStack1); + ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); + ret = LOS_MemFree(OS_TASK_STACK_ADDR, taskStack2); + ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); + + return LOS_OK; + +EXIT: + LOS_TaskDelete(g_testTaskID01); + (VOID)LOS_MemFree(OS_TASK_STACK_ADDR, taskStack1); + (VOID)LOS_MemFree(OS_TASK_STACK_ADDR, taskStack2); + return LOS_OK; +} + +VOID ItLosTask130(VOID) // IT_Layer_ModuleORFeature_No +{ + TEST_ADD_CASE("ItLosTask130", TestCase, TEST_LOS, TEST_TASK, TEST_LEVEL1, TEST_FUNCTION); +} +