提交 56dfd80e 编写于 作者: O openharmony_ci 提交者: Gitee

!242 cmsis添加ThreadFlags接口支持

Merge pull request !242 from 野生毛霉君/master
......@@ -1649,3 +1649,120 @@ const char *osMemoryPoolGetName(osMemoryPoolId_t mp_id)
return p;
}
// ==== Thread Flags Functions ====
uint32_t osThreadFlagsSet(osThreadId_t thread_id, uint32_t flags)
{
UINT32 ret;
LosTaskCB *taskCB = (LosTaskCB *)thread_id;
EVENT_CB_S *eventCB = NULL;
UINT32 curFlags;
if (taskCB == NULL) {
return (uint32_t)osFlagsErrorParameter;
}
eventCB = &(taskCB->event);
curFlags = eventCB->uwEventID | flags;
ret = LOS_EventWrite(eventCB, (UINT32)flags);
if (ret == LOS_ERRNO_EVENT_SETBIT_INVALID) {
return (uint32_t)osFlagsErrorParameter;
}
if (ret != LOS_OK) {
return (uint32_t)osFlagsErrorResource;
}
if (curFlags & taskCB->eventMask) {
return curFlags & (~taskCB->eventMask);
}
return curFlags;
}
uint32_t osThreadFlagsClear(uint32_t flags)
{
UINT32 ret;
UINT32 saveFlags;
LosTaskCB *runTask = NULL;
EVENT_CB_S *eventCB = NULL;
if (OS_INT_ACTIVE) {
return (uint32_t)osFlagsErrorUnknown;
}
runTask = g_losTask.runTask;
eventCB = &(runTask->event);
saveFlags = eventCB->uwEventID;
ret = LOS_EventClear(eventCB, ~(UINT32)flags);
if (ret == LOS_OK) {
return (uint32_t)saveFlags;
}
return (uint32_t)osFlagsErrorResource;
}
uint32_t osThreadFlagsGet(void)
{
LosTaskCB *runTask = NULL;
EVENT_CB_S *eventCB = NULL;
if (OS_INT_ACTIVE) {
return (uint32_t)osFlagsErrorUnknown;
}
runTask = g_losTask.runTask;
eventCB = &(runTask->event);
return (uint32_t)(eventCB->uwEventID);
}
uint32_t osThreadFlagsWait(uint32_t flags, uint32_t options, uint32_t timeout)
{
UINT32 ret;
UINT32 mode = 0;
LosTaskCB *runTask = NULL;
EVENT_CB_S *eventCB = NULL;
if (OS_INT_ACTIVE) {
return (uint32_t)osFlagsErrorUnknown;
}
if (options > (osFlagsWaitAny | osFlagsWaitAll | osFlagsNoClear)) {
return (uint32_t)osFlagsErrorParameter;
}
if ((options & osFlagsWaitAll) == osFlagsWaitAll) {
mode |= LOS_WAITMODE_AND;
} else {
mode |= LOS_WAITMODE_OR;
}
if ((options & osFlagsNoClear) == osFlagsNoClear) {
mode &= ~LOS_WAITMODE_CLR;
} else {
mode |= LOS_WAITMODE_CLR;
}
runTask = g_losTask.runTask;
eventCB = &(runTask->event);
ret = LOS_EventRead(eventCB, (UINT32)flags, mode, (UINT32)timeout);
if (!(ret & LOS_ERRTYPE_ERROR)) {
return (uint32_t)eventCB->uwEventID | ret;
}
switch (ret) {
case LOS_ERRNO_EVENT_PTR_NULL:
case LOS_ERRNO_EVENT_SETBIT_INVALID:
case LOS_ERRNO_EVENT_EVENTMASK_INVALID:
case LOS_ERRNO_EVENT_FLAGS_INVALID:
return (uint32_t)osFlagsErrorParameter;
case LOS_ERRNO_EVENT_READ_TIMEOUT:
return (uint32_t)osFlagsErrorTimeout;
default:
return (uint32_t)osFlagsErrorResource;
}
}
......@@ -668,6 +668,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsNewTaskInit(LosTaskCB *taskCB, TSK_INIT_PARAM_S *
taskCB->msg = NULL;
taskCB->stackPointer = HalTskStackInit(taskCB->taskID, taskInitParam->uwStackSize, topOfStack);
SET_SORTLIST_VALUE(&taskCB->sortList, OS_SORT_LINK_INVALID_TIME);
LOS_EventInit(&(taskCB->event));
return LOS_OK;
}
......@@ -920,6 +921,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskDelete(UINT32 taskID)
OsHookCall(LOS_HOOK_TYPE_TASK_DELETE, taskCB);
OsSchedTaskExit(taskCB);
LOS_EventDestroy(&(taskCB->event));
taskCB->event.uwEventID = OS_NULL_INT;
taskCB->eventMask = 0;
#if (LOSCFG_BASE_CORE_CPUP == 1)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册