未验证 提交 021e5299 编写于 作者: O openharmony_ci 提交者: Gitee

!593 feat: 支持任务栈可配置

Merge pull request !593 from zhushengle/task_stack
......@@ -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)
......
......@@ -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) {
......
......@@ -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)
......
......@@ -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.
......
......@@ -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);
......
......@@ -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";
......
......@@ -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";
......
......@@ -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);
......
......@@ -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";
......
......@@ -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";
......
......@@ -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";
......
......@@ -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";
......
......@@ -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";
......
......@@ -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;
......
......@@ -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);
......
......@@ -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);
......
......@@ -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);
......
......@@ -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);
......
......@@ -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);
......
......@@ -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;
......
......@@ -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;
......
......@@ -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;
......
......@@ -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;
......
......@@ -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);
......
......@@ -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);
......
......@@ -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);
......
......@@ -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);
......
......@@ -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);
......
......@@ -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);
......
......@@ -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";
......
......@@ -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" ]
......
......@@ -128,6 +128,9 @@ VOID ItSuiteLosTask()
ItLosTask126();
ItLosTask127();
ItLosTask128();
ItLosTask129();
ItLosTask130();
#if (LOS_KERNEL_TEST_FULL == 1)
ItLosTask039();
ItLosTask040();
......
......@@ -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
......
/*
* 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);
}
/*
* 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);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册