fix: 解决定时器超时但还在队列中无法删除的问题
利用每次创建时,软件定时器timerId都是唯一的(0~0xffffffff循环),在超时写队列时,同时记录软件定时器id,删除的时候更新软件定时器id,那么在处理软件定时器前, 通过队列中记录的id获取软件定时器控制块,如果控制块的id不等于记录的id,那么说明该软件定时器被删除过,将不执行对应回调函数,表现为删除该定时器。 BREAKING CHANGE: SwtmrHandlerItem结构体新增swtmrID字段,用于标识超时队列中软件定时器id Close #I4LFVD Signed-off-by: JerryH <huangjieliang@huawei.com> Change-Id: I716176f177c4bc07adb348936d5568fbadcbebe7
This commit is contained in:
parent
d3bf180b7f
commit
ecce17ea48
|
@ -448,6 +448,7 @@ typedef struct {
|
|||
SWTMR_PROC_FUNC handler; /**< Callback function that handles software timer timeout */
|
||||
UINT32 arg; /**< Parameter passed in when the callback function
|
||||
that handles software timer timeout is called */
|
||||
UINT32 swtmrID; /**< The id used to obtain the software timer handle */
|
||||
} SwtmrHandlerItem;
|
||||
|
||||
extern SWTMR_CTRL_S *g_swtmrCBArray;
|
||||
|
|
|
@ -61,6 +61,8 @@ LITE_OS_SEC_BSS SwtmrAlignData g_swtmrAlignID[LOSCFG_BASE_CORE_SWTMR_LIMIT]
|
|||
#define SWTMR_MAX_RUNNING_TICKS 2
|
||||
#define OS_SWTMR_MAX_TIMERID ((0xFFFFFFFF / LOSCFG_BASE_CORE_SWTMR_LIMIT) * LOSCFG_BASE_CORE_SWTMR_LIMIT)
|
||||
|
||||
STATIC VOID OsSwtmrDelete(SWTMR_CTRL_S *swtmr);
|
||||
|
||||
/*****************************************************************************
|
||||
Function : OsSwtmrTask
|
||||
Description : Swtmr task main loop, handle time-out timer.
|
||||
|
@ -71,6 +73,8 @@ Return : None
|
|||
LITE_OS_SEC_TEXT VOID OsSwtmrTask(VOID)
|
||||
{
|
||||
SwtmrHandlerItem swtmrHandle;
|
||||
SWTMR_CTRL_S *swtmr = NULL;
|
||||
UINT32 intSave;
|
||||
UINT32 readSize;
|
||||
UINT32 ret;
|
||||
UINT64 tick;
|
||||
|
@ -79,10 +83,21 @@ LITE_OS_SEC_TEXT VOID OsSwtmrTask(VOID)
|
|||
readSize = sizeof(SwtmrHandlerItem);
|
||||
ret = LOS_QueueReadCopy(g_swtmrHandlerQueue, &swtmrHandle, &readSize, LOS_WAIT_FOREVER);
|
||||
if ((ret == LOS_OK) && (readSize == sizeof(SwtmrHandlerItem))) {
|
||||
if (swtmrHandle.handler == NULL) {
|
||||
if ((swtmrHandle.handler == NULL) || (swtmrHandle.swtmrID >= OS_SWTMR_MAX_TIMERID)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
intSave = LOS_IntLock();
|
||||
swtmr = g_swtmrCBArray + swtmrHandle.swtmrID % LOSCFG_BASE_CORE_SWTMR_LIMIT;
|
||||
if (swtmr->usTimerID != swtmrHandle.swtmrID) {
|
||||
LOS_IntRestore(intSave);
|
||||
continue;
|
||||
}
|
||||
if (swtmr->ucMode == LOS_SWTMR_MODE_ONCE) {
|
||||
OsSwtmrDelete(swtmr);
|
||||
}
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
tick = LOS_TickCountGet();
|
||||
swtmrHandle.handler(swtmrHandle.arg);
|
||||
tick = LOS_TickCountGet() - tick;
|
||||
|
@ -233,8 +248,14 @@ Input : swtmr --- Need to delete Software Timer, When using, Ensure that i
|
|||
Output : None
|
||||
Return : None
|
||||
*****************************************************************************/
|
||||
STATIC_INLINE VOID OsSwtmrDelete(SWTMR_CTRL_S *swtmr)
|
||||
STATIC VOID OsSwtmrDelete(SWTMR_CTRL_S *swtmr)
|
||||
{
|
||||
if (swtmr->usTimerID < (OS_SWTMR_MAX_TIMERID - LOSCFG_BASE_CORE_SWTMR_LIMIT)) {
|
||||
swtmr->usTimerID += LOSCFG_BASE_CORE_SWTMR_LIMIT;
|
||||
} else {
|
||||
swtmr->usTimerID %= LOSCFG_BASE_CORE_SWTMR_LIMIT;
|
||||
}
|
||||
|
||||
/* insert to free list */
|
||||
swtmr->pstNext = g_swtmrFreeList;
|
||||
g_swtmrFreeList = swtmr;
|
||||
|
@ -264,16 +285,10 @@ STATIC VOID OsSwtmrTimeoutHandle(UINT64 currTime, SWTMR_CTRL_S *swtmr)
|
|||
|
||||
swtmrHandler.handler = swtmr->pfnHandler;
|
||||
swtmrHandler.arg = swtmr->uwArg;
|
||||
swtmrHandler.swtmrID = swtmr->usTimerID;
|
||||
|
||||
(VOID)LOS_QueueWriteCopy(g_swtmrHandlerQueue, &swtmrHandler, sizeof(SwtmrHandlerItem), LOS_NO_WAIT);
|
||||
if (swtmr->ucMode == LOS_SWTMR_MODE_ONCE) {
|
||||
OsSwtmrDelete(swtmr);
|
||||
if (swtmr->usTimerID < (OS_SWTMR_MAX_TIMERID - LOSCFG_BASE_CORE_SWTMR_LIMIT)) {
|
||||
swtmr->usTimerID += LOSCFG_BASE_CORE_SWTMR_LIMIT;
|
||||
} else {
|
||||
swtmr->usTimerID %= LOSCFG_BASE_CORE_SWTMR_LIMIT;
|
||||
}
|
||||
} else if (swtmr->ucMode == LOS_SWTMR_MODE_PERIOD) {
|
||||
if (swtmr->ucMode == LOS_SWTMR_MODE_PERIOD) {
|
||||
OsSwtmrStart(currTime, swtmr);
|
||||
} else if (swtmr->ucMode == LOS_SWTMR_MODE_NO_SELFDELETE) {
|
||||
swtmr->ucState = OS_SWTMR_STATUS_CREATED;
|
||||
|
@ -503,7 +518,7 @@ LITE_OS_SEC_TEXT UINT32 LOS_SwtmrStart(UINT32 swtmrId)
|
|||
SWTMR_CTRL_S *swtmr = g_swtmrCBArray + swtmrId % LOSCFG_BASE_CORE_SWTMR_LIMIT;
|
||||
if (swtmr->usTimerID != swtmrId) {
|
||||
LOS_IntRestore(intSave);
|
||||
return LOS_ERRNO_SWTMR_ID_INVALID;
|
||||
return LOS_ERRNO_SWTMR_NOT_CREATED;
|
||||
}
|
||||
|
||||
#if (LOSCFG_BASE_CORE_SWTMR_ALIGN == 1)
|
||||
|
@ -560,7 +575,7 @@ LITE_OS_SEC_TEXT UINT32 LOS_SwtmrStop(UINT32 swtmrId)
|
|||
swtmr = g_swtmrCBArray + swtmrCbId;
|
||||
if (swtmr->usTimerID != swtmrId) {
|
||||
LOS_IntRestore(intSave);
|
||||
return LOS_ERRNO_SWTMR_ID_INVALID;
|
||||
return LOS_ERRNO_SWTMR_NOT_CREATED;
|
||||
}
|
||||
|
||||
switch (swtmr->ucState) {
|
||||
|
@ -601,10 +616,9 @@ LITE_OS_SEC_TEXT UINT32 LOS_SwtmrTimeGet(UINT32 swtmrId, UINT32 *tick)
|
|||
intSave = LOS_IntLock();
|
||||
swtmrCbId = swtmrId % LOSCFG_BASE_CORE_SWTMR_LIMIT;
|
||||
swtmr = g_swtmrCBArray + swtmrCbId;
|
||||
|
||||
if (swtmr->usTimerID != swtmrId) {
|
||||
LOS_IntRestore(intSave);
|
||||
return LOS_ERRNO_SWTMR_ID_INVALID;
|
||||
return LOS_ERRNO_SWTMR_NOT_CREATED;
|
||||
}
|
||||
switch (swtmr->ucState) {
|
||||
case OS_SWTMR_STATUS_UNUSED:
|
||||
|
@ -646,7 +660,7 @@ LITE_OS_SEC_TEXT UINT32 LOS_SwtmrDelete(UINT32 swtmrId)
|
|||
swtmr = g_swtmrCBArray + swtmrCbId;
|
||||
if (swtmr->usTimerID != swtmrId) {
|
||||
LOS_IntRestore(intSave);
|
||||
return LOS_ERRNO_SWTMR_ID_INVALID;
|
||||
return LOS_ERRNO_SWTMR_NOT_CREATED;
|
||||
}
|
||||
|
||||
switch (swtmr->ucState) {
|
||||
|
|
|
@ -808,6 +808,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskResume(UINT32 taskID)
|
|||
LosTaskCB *taskCB = NULL;
|
||||
UINT16 tempStatus;
|
||||
UINT32 retErr = OS_ERROR;
|
||||
BOOL needSched = FALSE;
|
||||
|
||||
if (taskID > LOSCFG_BASE_CORE_TSK_LIMIT) {
|
||||
return LOS_ERRNO_TSK_ID_INVALID;
|
||||
|
@ -825,7 +826,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskResume(UINT32 taskID)
|
|||
OS_GOTO_ERREND();
|
||||
}
|
||||
|
||||
BOOL needSched = OsSchedResume(taskCB);
|
||||
needSched = OsSchedResume(taskCB);
|
||||
if (needSched && g_taskScheduled) {
|
||||
LOS_IntRestore(intSave);
|
||||
LOS_Schedule();
|
||||
|
|
|
@ -40,7 +40,7 @@ static VOID SwtmrF01(VOID)
|
|||
ret = LOS_EventWrite(&g_pevent, 0xF);
|
||||
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
|
||||
|
||||
ret = LOS_EventRead(&g_pevent, 0xF, LOS_WAITMODE_AND, LOS_WAIT_FOREVER);
|
||||
ret = LOS_EventPoll(&g_pevent.uwEventID, 0xF, LOS_WAITMODE_AND);
|
||||
ICUNIT_ASSERT_EQUAL_VOID(ret, g_pevent.uwEventID, ret);
|
||||
ICUNIT_ASSERT_EQUAL_VOID(ret, 0xF, ret);
|
||||
|
||||
|
|
|
@ -113,6 +113,7 @@ VOID ItSuiteLosSwtmr(void)
|
|||
ItLosSwtmr076();
|
||||
ItLosSwtmr077();
|
||||
ItLosSwtmr078();
|
||||
ItLosSwtmr079();
|
||||
#if (LOSCFG_BASE_CORE_SWTMR_ALIGN == 1)
|
||||
ItLosSwtmrAlign005();
|
||||
ItLosSwtmrAlign006();
|
||||
|
|
|
@ -147,6 +147,7 @@ extern VOID ItLosSwtmr075(VOID);
|
|||
extern VOID ItLosSwtmr076(VOID);
|
||||
extern VOID ItLosSwtmr077(VOID);
|
||||
extern VOID ItLosSwtmr078(VOID);
|
||||
extern VOID ItLosSwtmr079(VOID);
|
||||
|
||||
extern VOID ItLosSwtmrAlign001(VOID);
|
||||
extern VOID ItLosSwtmrAlign002(VOID);
|
||||
|
|
|
@ -39,7 +39,7 @@ static UINT32 Testcase(VOID)
|
|||
UINT32 swTmrID = 0xfffffff; // LOSCFG_BASE_CORE_SWTMR_LIMIT.
|
||||
|
||||
ret = LOS_SwtmrDelete(swTmrID);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_ID_INVALID, ret, EXIT);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_NOT_CREATED, ret, EXIT);
|
||||
|
||||
return LOS_OK;
|
||||
EXIT:
|
||||
|
|
|
@ -74,7 +74,7 @@ static UINT32 Testcase(VOID)
|
|||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
|
||||
ret = LOS_SwtmrTimeGet(swTmrID, &tick);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_ID_INVALID, ret, EXIT);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_NOT_CREATED, ret, EXIT);
|
||||
|
||||
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ static VOID SwtmrF01(UINT32 arg)
|
|||
}
|
||||
|
||||
ret = LOS_SwtmrTimeGet(g_swtmrId1, &tick);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_ID_INVALID, ret, EXIT);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_NOT_CREATED, ret, EXIT);
|
||||
|
||||
g_testCount++;
|
||||
return;
|
||||
|
@ -80,7 +80,7 @@ static UINT32 Testcase(VOID)
|
|||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
|
||||
ret = LOS_SwtmrTimeGet(g_swtmrId1, &tick);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_ID_INVALID, ret, EXIT);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_NOT_CREATED, ret, EXIT);
|
||||
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
|
||||
|
||||
#if (TIMER_LOS_SELF_DELETED == 0)
|
||||
|
|
|
@ -93,10 +93,10 @@ static UINT32 Testcase(VOID)
|
|||
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
|
||||
|
||||
ret = LOS_SwtmrDelete(g_swtmrId1);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_ID_INVALID, ret, EXIT);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_NOT_CREATED, ret, EXIT);
|
||||
|
||||
ret = LOS_SwtmrTimeGet(g_swtmrId1, &tick);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_ID_INVALID, ret, EXIT);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_NOT_CREATED, ret, EXIT);
|
||||
|
||||
#if (TIMER_LOS_SELF_DELETED == 0)
|
||||
ret = LOS_SwtmrDelete(g_swtmrId1);
|
||||
|
|
|
@ -101,7 +101,7 @@ static UINT32 Testcase(VOID)
|
|||
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
|
||||
|
||||
ret = LOS_SwtmrTimeGet(swTmrID, &tick);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_ID_INVALID, ret, EXIT);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_NOT_CREATED, ret, EXIT);
|
||||
|
||||
#if (TIMER_LOS_SELF_DELETED == 0)
|
||||
ret = LOS_SwtmrDelete(swTmrID);
|
||||
|
|
|
@ -60,13 +60,13 @@ static UINT32 Testcase(VOID)
|
|||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_MODE_INVALID, ret, EXIT);
|
||||
|
||||
ret = LOS_SwtmrStart(swTmrID);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_ID_INVALID, ret, EXIT);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_NOT_CREATED, ret, EXIT);
|
||||
|
||||
ret = LOS_TaskDelay(10); // 10, set delay time.
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
|
||||
ret = LOS_SwtmrDelete(swTmrID);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_ID_INVALID, ret, EXIT);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_NOT_CREATED, ret, EXIT);
|
||||
|
||||
ICUNIT_GOTO_EQUAL(g_testCount, 0, g_testCount, EXIT);
|
||||
|
||||
|
|
|
@ -59,13 +59,13 @@ static UINT32 Testcase(VOID)
|
|||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_MODE_INVALID, ret, EXIT);
|
||||
|
||||
ret = LOS_SwtmrStart(swTmrID);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_ID_INVALID, ret, EXIT);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_NOT_CREATED, ret, EXIT);
|
||||
|
||||
ret = LOS_TaskDelay(10); // 10, set delay time.
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
|
||||
ret = LOS_SwtmrDelete(swTmrID);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_ID_INVALID, ret, EXIT);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_SWTMR_NOT_CREATED, ret, EXIT);
|
||||
|
||||
ICUNIT_GOTO_EQUAL(g_testCount, 0, g_testCount, EXIT);
|
||||
|
||||
|
|
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* 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_swtmr.h"
|
||||
|
||||
static UINT32 g_swTmrID1;
|
||||
static UINT32 g_swTmrID2;
|
||||
|
||||
static VOID SwtmrF01(UINT32 arg)
|
||||
{
|
||||
if (arg != TIMER_LOS_HANDLER_PARAMETER) {
|
||||
return;
|
||||
}
|
||||
|
||||
LOS_SwtmrDelete(g_swTmrID2);
|
||||
|
||||
g_testCount++;
|
||||
return;
|
||||
}
|
||||
|
||||
static VOID SwtmrF02(UINT32 arg)
|
||||
{
|
||||
if (arg != TIMER_LOS_HANDLER_PARAMETER) {
|
||||
return;
|
||||
}
|
||||
|
||||
g_testCount++;
|
||||
return;
|
||||
}
|
||||
|
||||
static UINT32 Testcase(VOID)
|
||||
{
|
||||
UINT32 ret;
|
||||
g_testCount = 0;
|
||||
|
||||
#if (LOSCFG_BASE_CORE_SWTMR_ALIGN == 1)
|
||||
ret = LOS_SwtmrCreate(TIMER_LOS_EXPIRATION1, LOS_SWTMR_MODE_ONCE,
|
||||
(SWTMR_PROC_FUNC)SwtmrF01, &g_swTmrID1, TIMER_LOS_HANDLER_PARAMETER,
|
||||
OS_SWTMR_ROUSES_ALLOW, OS_SWTMR_ALIGN_INSENSITIVE);
|
||||
#else
|
||||
ret = LOS_SwtmrCreate(TIMER_LOS_EXPIRATION1, LOS_SWTMR_MODE_ONCE,
|
||||
(SWTMR_PROC_FUNC)SwtmrF01, &g_swTmrID1, TIMER_LOS_HANDLER_PARAMETER);
|
||||
#endif
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
|
||||
#if (LOSCFG_BASE_CORE_SWTMR_ALIGN == 1)
|
||||
ret = LOS_SwtmrCreate(TIMER_LOS_EXPIRATION1, LOS_SWTMR_MODE_ONCE,
|
||||
(SWTMR_PROC_FUNC)SwtmrF02, &g_swTmrID2, TIMER_LOS_HANDLER_PARAMETER,
|
||||
OS_SWTMR_ROUSES_ALLOW, OS_SWTMR_ALIGN_INSENSITIVE);
|
||||
#else
|
||||
ret = LOS_SwtmrCreate(TIMER_LOS_EXPIRATION1, LOS_SWTMR_MODE_ONCE,
|
||||
(SWTMR_PROC_FUNC)SwtmrF02, &g_swTmrID2, TIMER_LOS_HANDLER_PARAMETER);
|
||||
#endif
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
|
||||
ret = LOS_SwtmrStart(g_swTmrID1);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
|
||||
ret = LOS_SwtmrStart(g_swTmrID2);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
|
||||
ret = LOS_TaskDelay(10); // 10, set delay time.
|
||||
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
|
||||
|
||||
return LOS_OK;
|
||||
|
||||
EXIT:
|
||||
LOS_SwtmrDelete(g_swTmrID1);
|
||||
LOS_SwtmrDelete(g_swTmrID2);
|
||||
return LOS_NOK;
|
||||
}
|
||||
|
||||
VOID ItLosSwtmr079(VOID)
|
||||
{
|
||||
TEST_ADD_CASE("ItLosSwtmr079", Testcase, TEST_LOS, TEST_SWTMR, TEST_LEVEL0, TEST_FUNCTION);
|
||||
}
|
|
@ -31,13 +31,13 @@
|
|||
#include "osTest.h"
|
||||
#include "It_los_task.h"
|
||||
|
||||
static VOID *TaskDeatchf01(void *argument)
|
||||
static int TaskDeatchf01(UINT32 argument)
|
||||
{
|
||||
int ret = LOS_TaskDetach(LOS_CurTaskIDGet());
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_ERRNO_TSK_NOT_JOIN, ret);
|
||||
|
||||
g_testCount++;
|
||||
return NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static UINT32 TestCase(VOID)
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include "osTest.h"
|
||||
#include "It_los_task.h"
|
||||
|
||||
static VOID *TaskDeatchf01(void *argument)
|
||||
static int TaskDeatchf01(UINT32 argument)
|
||||
{
|
||||
UINT32 ret = LOS_TaskDetach(LOS_CurTaskIDGet());
|
||||
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
|
||||
|
@ -39,7 +39,7 @@ static VOID *TaskDeatchf01(void *argument)
|
|||
g_testCount++;
|
||||
|
||||
LOS_TaskDelay(1000); /* 1000 ticks */
|
||||
return NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static UINT32 TestCase(VOID)
|
||||
|
@ -64,6 +64,8 @@ static UINT32 TestCase(VOID)
|
|||
ret = LOS_TaskJoin(taskID, NULL);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_NOK, ret);
|
||||
|
||||
LOS_TaskDelay(1500); /* 1500 ticks wait for the end of child task. */
|
||||
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include "osTest.h"
|
||||
#include "It_los_task.h"
|
||||
|
||||
static VOID *TaskDeatchf01(void *argument)
|
||||
static int TaskDeatchf01(UINT32 argument)
|
||||
{
|
||||
UINT32 ret = LOS_TaskDetach(LOS_CurTaskIDGet());
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_NOK, ret);
|
||||
|
@ -39,7 +39,7 @@ static VOID *TaskDeatchf01(void *argument)
|
|||
g_testCount++;
|
||||
|
||||
LOS_TaskDelay(1000); /* 1000 ticks */
|
||||
return NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static UINT32 TestCase(VOID)
|
||||
|
@ -63,6 +63,8 @@ static UINT32 TestCase(VOID)
|
|||
ret = LOS_TaskJoin(taskID, NULL);
|
||||
ICUNIT_ASSERT_EQUAL(ret, LOS_NOK, ret);
|
||||
|
||||
LOS_TaskDelay(1500); /* 1500 ticks wait for the end of child task. */
|
||||
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -39,12 +39,12 @@ static VOID *TaskJoinf01(void *argument)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static VOID *TaskJoinf02(VOID *argument)
|
||||
static int TaskJoinf02(VOID *argument)
|
||||
{
|
||||
UINT32 ret = LOS_TaskDelete(g_joinTaskID);
|
||||
ICUNIT_ASSERT_EQUAL(ret, 0, ret);
|
||||
|
||||
return NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static UINT32 TestCase(VOID)
|
||||
|
|
Loading…
Reference in New Issue