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:
LiteOS2021
2022-02-15 16:10:15 +08:00
parent b9830c61f5
commit 6c68adad4d
67 changed files with 541 additions and 329 deletions
@@ -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;