feat: synchronous los_hwicreate interface
BREAKING CHANGE:
涉及接口修改:
LOS_HwiCreate
LOS_HwiDelete
改动内容:
中断处理函数参数类型由HWI_ARG_T统一改为HwiIrqParam,封装原有arg参数及riscv部分实际使用变量pDevId, 这样一方面统一LiteOS接口,也统一了中断处理函数的arg参数
同步LOS_HwiDelete接口入参,新增HWI_IRQ_PARAM_S *irqParam参数,为后续共享中断功能的添加预留
Signed-off-by: LiteOS2021 <dinglu@huawei.com>
This commit is contained in:
@@ -63,18 +63,20 @@ static UINT32 Testcase(VOID)
|
||||
UINT32 ret;
|
||||
HWI_PRIOR_T hwiPrio = 3;
|
||||
HWI_MODE_T hwiMode;
|
||||
HWI_ARG_T arg = 0;
|
||||
HwiIrqParam irqParam;
|
||||
(void)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
|
||||
irqParam.pDevId = 0;
|
||||
|
||||
g_testCount1 = 0;
|
||||
// 1, Timeout interval of a periodic software timer.
|
||||
ret = LOS_SwtmrCreate(1, LOS_SWTMR_MODE_ONCE, (SWTMR_PROC_FUNC)Case2, &g_swtmrId1, arg
|
||||
ret = LOS_SwtmrCreate(1, LOS_SWTMR_MODE_ONCE, (SWTMR_PROC_FUNC)Case2, &g_swtmrId1, &irqParam
|
||||
#if (LOSCFG_BASE_CORE_SWTMR_ALIGN == 1)
|
||||
, OS_SWTMR_ROUSES_ALLOW, OS_SWTMR_ALIGN_INSENSITIVE
|
||||
#endif
|
||||
);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
hwiMode = 0;
|
||||
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, hwiMode, (HWI_PROC_FUNC)Case1, arg);
|
||||
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, hwiMode, (HWI_PROC_FUNC)Case1, &irqParam);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
TestHwiTrigger(HWI_NUM_TEST);
|
||||
LOS_TaskDelay(5); // 5, set delay time.
|
||||
|
||||
@@ -62,11 +62,13 @@ static UINT32 Testcase(VOID)
|
||||
UINT32 ret;
|
||||
HWI_PRIOR_T hwiPrio = 1;
|
||||
HWI_MODE_T hwiMode;
|
||||
HWI_ARG_T arg = 0;
|
||||
HwiIrqParam irqParam;
|
||||
(void)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
|
||||
irqParam.pDevId = 0;
|
||||
|
||||
g_testCount1 = 0;
|
||||
// 1, Timeout interval of a periodic software timer.
|
||||
ret = LOS_SwtmrCreate(1, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)Case2, &g_swtmrId1, arg
|
||||
ret = LOS_SwtmrCreate(1, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)Case2, &g_swtmrId1, &irqParam
|
||||
#if (LOSCFG_BASE_CORE_SWTMR_ALIGN == 1)
|
||||
, OS_SWTMR_ROUSES_ALLOW, OS_SWTMR_ALIGN_INSENSITIVE
|
||||
#endif
|
||||
@@ -74,7 +76,7 @@ static UINT32 Testcase(VOID)
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
|
||||
hwiMode = 0;
|
||||
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, hwiMode, (HWI_PROC_FUNC)Case1, arg);
|
||||
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, hwiMode, (HWI_PROC_FUNC)Case1, &irqParam);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
|
||||
TestHwiTrigger(HWI_NUM_TEST);
|
||||
|
||||
@@ -74,25 +74,28 @@ static UINT32 Testcase(VOID)
|
||||
UINT32 ret;
|
||||
HWI_PRIOR_T hwiPrio = 3;
|
||||
HWI_MODE_T hwiMode = 0;
|
||||
HWI_ARG_T arg = 0;
|
||||
HwiIrqParam irqParam;
|
||||
(void)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
|
||||
irqParam.pDevId = 0;
|
||||
|
||||
g_testCount1 = 0;
|
||||
|
||||
TestHwiClear(HWI_NUM_TEST);
|
||||
// 10, Timeout interval of a periodic software timer.
|
||||
ret = LOS_SwtmrCreate(10, LOS_SWTMR_MODE_ONCE, (SWTMR_PROC_FUNC)Case3, &g_swtmrId1, arg
|
||||
ret = LOS_SwtmrCreate(10, LOS_SWTMR_MODE_ONCE, (SWTMR_PROC_FUNC)Case3, &g_swtmrId1, &irqParam
|
||||
#if (LOSCFG_BASE_CORE_SWTMR_ALIGN == 1)
|
||||
, OS_SWTMR_ROUSES_ALLOW, OS_SWTMR_ALIGN_INSENSITIVE
|
||||
#endif
|
||||
);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
// 20, Timeout interval of a periodic software timer.
|
||||
ret = LOS_SwtmrCreate(20, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)Case2, &g_swtmrId2, arg
|
||||
ret = LOS_SwtmrCreate(20, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)Case2, &g_swtmrId2, &irqParam
|
||||
#if (LOSCFG_BASE_CORE_SWTMR_ALIGN == 1)
|
||||
, OS_SWTMR_ROUSES_ALLOW, OS_SWTMR_ALIGN_INSENSITIVE
|
||||
#endif
|
||||
);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, hwiMode, (HWI_PROC_FUNC)Case1, arg);
|
||||
ret = LOS_HwiCreate(HWI_NUM_TEST, hwiPrio, hwiMode, (HWI_PROC_FUNC)Case1, &irqParam);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
ret = LOS_SwtmrStart(g_swtmrId2);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
|
||||
@@ -60,7 +60,9 @@ static UINT32 Testcase(VOID)
|
||||
UINT32 ret;
|
||||
HWI_PRIOR_T hwiPrio = 3;
|
||||
HWI_MODE_T hwiMode;
|
||||
HWI_ARG_T arg = 0;
|
||||
HwiIrqParam irqParam;
|
||||
(void)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
|
||||
irqParam.pDevId = 0;
|
||||
|
||||
g_testCount = 0;
|
||||
|
||||
@@ -73,7 +75,7 @@ static UINT32 Testcase(VOID)
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
|
||||
hwiMode = 0;
|
||||
ret = TEST_HwiCreate(HWI_NUM_TEST, hwiPrio, hwiMode, (HWI_PROC_FUNC)HwiF01, arg);
|
||||
ret = TEST_HwiCreate(HWI_NUM_TEST, hwiPrio, hwiMode, (HWI_PROC_FUNC)HwiF01, &irqParam);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT1);
|
||||
|
||||
ret = LOS_SwtmrStart(g_swtmrId1);
|
||||
|
||||
@@ -58,7 +58,9 @@ static UINT32 Testcase(VOID)
|
||||
UINT32 ret;
|
||||
HWI_PRIOR_T hwiPrio = 1;
|
||||
HWI_MODE_T hwiMode;
|
||||
HWI_ARG_T arg = 0;
|
||||
HwiIrqParam irqParam;
|
||||
(void)memset_s(&irqParam, sizeof(HwiIrqParam), 0, sizeof(HwiIrqParam));
|
||||
irqParam.pDevId = 0;
|
||||
|
||||
g_testCount = 0;
|
||||
ret = LOS_SwtmrCreate(TIMER_LOS_EXPIRATION1, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)SwtmrF01, &g_swtmrId1,
|
||||
@@ -70,7 +72,7 @@ static UINT32 Testcase(VOID)
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
|
||||
hwiMode = 0;
|
||||
ret = TEST_HwiCreate(HWI_NUM_TEST, hwiPrio, hwiMode, (HWI_PROC_FUNC)HwiF01, arg);
|
||||
ret = TEST_HwiCreate(HWI_NUM_TEST, hwiPrio, hwiMode, (HWI_PROC_FUNC)HwiF01, &irqParam);
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT1);
|
||||
|
||||
ret = LOS_SwtmrStart(g_swtmrId1);
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
#include "osTest.h"
|
||||
#include "It_los_swtmr.h"
|
||||
|
||||
#define SWTMR_PERIOD 4 // 4, Timeout interval of a periodic software timer ticks.
|
||||
|
||||
static UINT32 g_testCount1 = 0;
|
||||
static VOID Case1(UINT32 arg)
|
||||
{
|
||||
@@ -41,15 +43,15 @@ static VOID Case1(UINT32 arg)
|
||||
|
||||
static UINT32 Testcase(VOID)
|
||||
{
|
||||
UINT32 ret;
|
||||
UINT32 ret = LOS_NOK;
|
||||
g_testCount1 = 0;
|
||||
UINT64 tickRecord;
|
||||
UINT64 tickUpdate;
|
||||
UINT64 delayTicks;
|
||||
const UINT64 delayMs = 10; // delay 10 MS
|
||||
const UINT64 delayMs = 80; // delay 80 ms.
|
||||
delayTicks = delayMs * LOSCFG_BASE_CORE_TICK_PER_SECOND / OS_SYS_MS_PER_SECOND;
|
||||
|
||||
// 4, Timeout interval of a periodic software timer.
|
||||
ret = LOS_SwtmrCreate(4, LOS_SWTMR_MODE_PERIOD, Case1, &g_swtmrId1, 0xffff
|
||||
ret = LOS_SwtmrCreate(SWTMR_PERIOD, LOS_SWTMR_MODE_PERIOD, Case1, &g_swtmrId1, 0xffff
|
||||
#if (LOSCFG_BASE_CORE_SWTMR_ALIGN == 1)
|
||||
, OS_SWTMR_ROUSES_ALLOW, OS_SWTMR_ALIGN_INSENSITIVE
|
||||
#endif
|
||||
@@ -63,18 +65,21 @@ static UINT32 Testcase(VOID)
|
||||
LOS_MDelay(delayMs);
|
||||
tickUpdate = LOS_TickCountGet();
|
||||
|
||||
// 0, Here, assert that g_testCount is equal to this.
|
||||
ICUNIT_ASSERT_EQUAL(g_testCount1, 0, g_testCount);
|
||||
if ((g_testCount1 >= delayTicks / SWTMR_PERIOD - 1)
|
||||
|| (g_testCount1 <= delayTicks / SWTMR_PERIOD + 1)) {
|
||||
ret = LOS_OK;
|
||||
}
|
||||
|
||||
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
|
||||
|
||||
delayTicks = delayMs * LOSCFG_BASE_CORE_TICK_PER_SECOND / OS_SYS_MS_PER_SECOND;
|
||||
ICUNIT_ASSERT_WITHIN_EQUAL(delayTicks, tickUpdate - tickRecord - 1, tickUpdate - tickRecord + 1, delayTicks);
|
||||
|
||||
// 10, set task delay time.
|
||||
LOS_TaskDelay(10);
|
||||
|
||||
// 2, Here, assert that g_testCount is equal to this.
|
||||
ICUNIT_ASSERT_EQUAL(g_testCount1, 2, g_testCount);
|
||||
|
||||
|
||||
// delayTicks / SWTMR_PERIOD + 2, Here, g_testCount1 is equal to this.
|
||||
ICUNIT_GOTO_EQUAL(g_testCount1, delayTicks / SWTMR_PERIOD + 2, g_testCount1, EXIT);
|
||||
|
||||
EXIT:
|
||||
LOS_SwtmrDelete(g_swtmrId1);
|
||||
return LOS_OK;
|
||||
|
||||
Reference in New Issue
Block a user