From b3841ed1ddbfb3359c7a0ceca04fc0f645d440c3 Mon Sep 17 00:00:00 2001 From: zhushengle Date: Fri, 16 Jul 2021 14:47:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=9C=A8=E5=86=85=E6=A0=B8=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E5=89=8D=E6=9C=9F=E5=90=AF=E5=8A=A8tick=20ti?= =?UTF-8?q?mer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 解决系统未初始化完成前无timer可用的问题。 Close #I410F0 Signed-off-by: zhushengle Change-Id: I3799b9b0ff03cb1dfe80a97816a484df28ae49fd --- kernel/arch/arm/arm9/gcc/los_context.c | 15 ++++++++------- kernel/arch/arm/arm9/gcc/los_timer.c | 2 +- kernel/arch/arm/cortex-m3/keil/los_context.c | 15 +++++++++------ kernel/arch/arm/cortex-m3/keil/los_timer.c | 2 +- .../arch/arm/cortex-m33/gcc/NTZ/los_context.c | 15 +++++++++------ kernel/arch/arm/cortex-m33/gcc/NTZ/los_timer.c | 2 +- .../cortex-m33/gcc/TZ/non_secure/los_context.c | 15 +++++++++------ kernel/arch/arm/cortex-m33/gcc/los_context.c | 16 ++++++++++------ kernel/arch/arm/cortex-m33/gcc/los_timer.c | 2 +- .../arch/arm/cortex-m33/iar/NTZ/los_context.c | 15 +++++++++------ kernel/arch/arm/cortex-m33/iar/NTZ/los_timer.c | 2 +- .../cortex-m33/iar/TZ/non_secure/los_context.c | 15 +++++++++------ .../cortex-m33/iar/TZ/non_secure/los_timer.c | 2 +- kernel/arch/arm/cortex-m4/gcc/los_context.c | 17 ++++++++++------- kernel/arch/arm/cortex-m4/gcc/los_timer.c | 2 +- kernel/arch/arm/cortex-m4/iar/los_context.c | 16 ++++++++++------ kernel/arch/arm/cortex-m4/iar/los_timer.c | 2 +- kernel/arch/arm/cortex-m7/gcc/los_context.c | 15 +++++++++------ kernel/arch/arm/cortex-m7/gcc/los_timer.c | 2 +- kernel/arch/arm/cortex-m7/iar/los_context.c | 15 +++++++++------ kernel/arch/arm/cortex-m7/iar/los_timer.c | 2 +- kernel/arch/include/los_arch.h | 2 +- kernel/arch/include/los_context.h | 2 +- kernel/arch/risc-v/nuclei/gcc/los_context.c | 17 +++++++++-------- kernel/arch/risc-v/riscv32/gcc/los_context.c | 16 +++++++++------- kernel/arch/risc-v/riscv32/gcc/los_timer.c | 2 +- kernel/src/los_init.c | 2 +- kernel/src/los_sched.c | 8 +++----- 28 files changed, 136 insertions(+), 102 deletions(-) diff --git a/kernel/arch/arm/arm9/gcc/los_context.c b/kernel/arch/arm/arm9/gcc/los_context.c index 92c8ec1c..c4715162 100644 --- a/kernel/arch/arm/arm9/gcc/los_context.c +++ b/kernel/arch/arm/arm9/gcc/los_context.c @@ -46,9 +46,15 @@ Output : None Return : None **************************************************************************** */ -LITE_OS_SEC_TEXT_INIT VOID HalArchInit() +LITE_OS_SEC_TEXT_INIT VOID HalArchInit(VOID) { + UINT32 ret; HalHwiInit(); + + ret = HalTickStart(OsTickHandler); + if (ret != LOS_OK) { + PRINT_ERR("Tick start failed!\n"); + } } /* **************************************************************************** @@ -116,14 +122,9 @@ LITE_OS_SEC_TEXT_INIT VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOI return (VOID *)context; } -LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(OS_TICK_HANDLER handler) +LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(VOID) { (VOID)LOS_IntLock(); - UINT32 ret = HalTickStart(handler); - if (ret != LOS_OK) { - return ret; - } - OsSchedStart(); HalStartToRun(); diff --git a/kernel/arch/arm/arm9/gcc/los_timer.c b/kernel/arch/arm/arm9/gcc/los_timer.c index 62f6990d..972dfe6b 100644 --- a/kernel/arch/arm/arm9/gcc/los_timer.c +++ b/kernel/arch/arm/arm9/gcc/los_timer.c @@ -67,7 +67,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER *handler) value &= ~(OS_TIMER_32K_CLK_BIT); WRITE_UINT32(value, OS_TIMER_CLK_PWD_ADDR); - value = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; + value = LOSCFG_BASE_CORE_TICK_RESPONSE_MAX; WRITE_UINT32(value, OS_TIMER_PERIOD_REG_ADDR); READ_UINT32(value, OS_TIMER_CTL_REG_ADDR); diff --git a/kernel/arch/arm/cortex-m3/keil/los_context.c b/kernel/arch/arm/cortex-m3/keil/los_context.c index 19ed8888..92778991 100644 --- a/kernel/arch/arm/cortex-m3/keil/los_context.c +++ b/kernel/arch/arm/cortex-m3/keil/los_context.c @@ -38,6 +38,7 @@ #include "los_sched.h" #include "los_interrupt.h" #include "los_arch_timer.h" +#include "los_debug.h" /* **************************************************************************** Function : HalArchInit @@ -46,9 +47,15 @@ Output : None Return : None **************************************************************************** */ -LITE_OS_SEC_TEXT_INIT VOID HalArchInit() +LITE_OS_SEC_TEXT_INIT VOID HalArchInit(VOID) { + UINT32 ret; HalHwiInit(); + + ret = HalTickStart(OsTickHandler); + if (ret != LOS_OK) { + PRINT_ERR("Tick start failed!\n"); + } } /* **************************************************************************** @@ -147,13 +154,9 @@ LITE_OS_SEC_TEXT_INIT VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOI return (VOID *)context; } -LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(OS_TICK_HANDLER handler) +LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(VOID) { (VOID)LOS_IntLock(); - UINT32 ret = HalTickStart(handler); - if (ret != LOS_OK) { - return ret; - } OsSchedStart(); HalStartToRun(); return LOS_OK; /* never return */ diff --git a/kernel/arch/arm/cortex-m3/keil/los_timer.c b/kernel/arch/arm/cortex-m3/keil/los_timer.c index f51faf35..388ed5f9 100644 --- a/kernel/arch/arm/cortex-m3/keil/los_timer.c +++ b/kernel/arch/arm/cortex-m3/keil/los_timer.c @@ -66,7 +66,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER *handler) g_sysClock = OS_SYS_CLOCK; g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(g_cyclesPerTick); + ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; } diff --git a/kernel/arch/arm/cortex-m33/gcc/NTZ/los_context.c b/kernel/arch/arm/cortex-m33/gcc/NTZ/los_context.c index 19df61ce..b058362c 100755 --- a/kernel/arch/arm/cortex-m33/gcc/NTZ/los_context.c +++ b/kernel/arch/arm/cortex-m33/gcc/NTZ/los_context.c @@ -37,6 +37,7 @@ #include "los_sched.h" #include "los_interrupt.h" #include "los_arch_timer.h" +#include "los_debug.h" /* **************************************************************************** Function : HalArchInit @@ -45,9 +46,15 @@ Output : None Return : None **************************************************************************** */ -LITE_OS_SEC_TEXT_INIT VOID HalArchInit() +LITE_OS_SEC_TEXT_INIT VOID HalArchInit(VOID) { + UINT32 ret; HalHwiInit(); + + ret = HalTickStart(OsTickHandler); + if (ret != LOS_OK) { + PRINT_ERR("Tick start failed!\n"); + } } /* **************************************************************************** @@ -146,13 +153,9 @@ LITE_OS_SEC_TEXT_INIT VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOI return (VOID *)context; } -LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(OS_TICK_HANDLER handler) +LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(VOID) { (VOID)LOS_IntLock(); - UINT32 ret = HalTickStart(handler); - if (ret != LOS_OK) { - return ret; - } OsSchedStart(); HalStartToRun(); return LOS_OK; /* never return */ diff --git a/kernel/arch/arm/cortex-m33/gcc/NTZ/los_timer.c b/kernel/arch/arm/cortex-m33/gcc/NTZ/los_timer.c index 9e27972d..09802def 100755 --- a/kernel/arch/arm/cortex-m33/gcc/NTZ/los_timer.c +++ b/kernel/arch/arm/cortex-m33/gcc/NTZ/los_timer.c @@ -65,7 +65,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER *handler) g_sysClock = OS_SYS_CLOCK; g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(g_cyclesPerTick); + ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; } diff --git a/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_context.c b/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_context.c index 45fecf89..4aa333d8 100755 --- a/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_context.c +++ b/kernel/arch/arm/cortex-m33/gcc/TZ/non_secure/los_context.c @@ -37,6 +37,7 @@ #include "los_sched.h" #include "los_interrupt.h" #include "los_arch_timer.h" +#include "los_debug.h" /* **************************************************************************** Function : HalArchInit @@ -45,9 +46,15 @@ Output : None Return : None **************************************************************************** */ -LITE_OS_SEC_TEXT_INIT VOID HalArchInit() +LITE_OS_SEC_TEXT_INIT VOID HalArchInit(VOID) { + UINT32 ret; HalHwiInit(); + + ret = HalTickStart(OsTickHandler); + if (ret != LOS_OK) { + PRINT_ERR("Tick start failed!\n"); + } } /* **************************************************************************** @@ -150,13 +157,9 @@ LITE_OS_SEC_TEXT_INIT VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOI return (VOID *)context; } -LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(OS_TICK_HANDLER handler) +LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(VOID) { (VOID)LOS_IntLock(); - UINT32 ret = HalTickStart(handler); - if (ret != LOS_OK) { - return ret; - } OsSchedStart(); HalStartToRun(); return LOS_OK; /* never return */ diff --git a/kernel/arch/arm/cortex-m33/gcc/los_context.c b/kernel/arch/arm/cortex-m33/gcc/los_context.c index 19df61ce..cf69d52e 100644 --- a/kernel/arch/arm/cortex-m33/gcc/los_context.c +++ b/kernel/arch/arm/cortex-m33/gcc/los_context.c @@ -37,6 +37,7 @@ #include "los_sched.h" #include "los_interrupt.h" #include "los_arch_timer.h" +#include "los_debug.h" /* **************************************************************************** Function : HalArchInit @@ -45,9 +46,16 @@ Output : None Return : None **************************************************************************** */ -LITE_OS_SEC_TEXT_INIT VOID HalArchInit() +LITE_OS_SEC_TEXT_INIT VOID HalArchInit(VOID) { + UINT32 ret; + HalHwiInit(); + + ret = HalTickStart(OsTickHandler); + if (ret != LOS_OK) { + PRINT_ERR("Tick start failed!\n"); + } } /* **************************************************************************** @@ -146,13 +154,9 @@ LITE_OS_SEC_TEXT_INIT VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOI return (VOID *)context; } -LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(OS_TICK_HANDLER handler) +LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(VOID) { (VOID)LOS_IntLock(); - UINT32 ret = HalTickStart(handler); - if (ret != LOS_OK) { - return ret; - } OsSchedStart(); HalStartToRun(); return LOS_OK; /* never return */ diff --git a/kernel/arch/arm/cortex-m33/gcc/los_timer.c b/kernel/arch/arm/cortex-m33/gcc/los_timer.c index 9e27972d..09802def 100644 --- a/kernel/arch/arm/cortex-m33/gcc/los_timer.c +++ b/kernel/arch/arm/cortex-m33/gcc/los_timer.c @@ -65,7 +65,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER *handler) g_sysClock = OS_SYS_CLOCK; g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(g_cyclesPerTick); + ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; } diff --git a/kernel/arch/arm/cortex-m33/iar/NTZ/los_context.c b/kernel/arch/arm/cortex-m33/iar/NTZ/los_context.c index 19df61ce..b058362c 100644 --- a/kernel/arch/arm/cortex-m33/iar/NTZ/los_context.c +++ b/kernel/arch/arm/cortex-m33/iar/NTZ/los_context.c @@ -37,6 +37,7 @@ #include "los_sched.h" #include "los_interrupt.h" #include "los_arch_timer.h" +#include "los_debug.h" /* **************************************************************************** Function : HalArchInit @@ -45,9 +46,15 @@ Output : None Return : None **************************************************************************** */ -LITE_OS_SEC_TEXT_INIT VOID HalArchInit() +LITE_OS_SEC_TEXT_INIT VOID HalArchInit(VOID) { + UINT32 ret; HalHwiInit(); + + ret = HalTickStart(OsTickHandler); + if (ret != LOS_OK) { + PRINT_ERR("Tick start failed!\n"); + } } /* **************************************************************************** @@ -146,13 +153,9 @@ LITE_OS_SEC_TEXT_INIT VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOI return (VOID *)context; } -LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(OS_TICK_HANDLER handler) +LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(VOID) { (VOID)LOS_IntLock(); - UINT32 ret = HalTickStart(handler); - if (ret != LOS_OK) { - return ret; - } OsSchedStart(); HalStartToRun(); return LOS_OK; /* never return */ diff --git a/kernel/arch/arm/cortex-m33/iar/NTZ/los_timer.c b/kernel/arch/arm/cortex-m33/iar/NTZ/los_timer.c index 72792526..78a9e5a1 100644 --- a/kernel/arch/arm/cortex-m33/iar/NTZ/los_timer.c +++ b/kernel/arch/arm/cortex-m33/iar/NTZ/los_timer.c @@ -65,7 +65,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER *handler) g_sysClock = OS_SYS_CLOCK; g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(g_cyclesPerTick); + ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; } diff --git a/kernel/arch/arm/cortex-m33/iar/TZ/non_secure/los_context.c b/kernel/arch/arm/cortex-m33/iar/TZ/non_secure/los_context.c index 45fecf89..4aa333d8 100644 --- a/kernel/arch/arm/cortex-m33/iar/TZ/non_secure/los_context.c +++ b/kernel/arch/arm/cortex-m33/iar/TZ/non_secure/los_context.c @@ -37,6 +37,7 @@ #include "los_sched.h" #include "los_interrupt.h" #include "los_arch_timer.h" +#include "los_debug.h" /* **************************************************************************** Function : HalArchInit @@ -45,9 +46,15 @@ Output : None Return : None **************************************************************************** */ -LITE_OS_SEC_TEXT_INIT VOID HalArchInit() +LITE_OS_SEC_TEXT_INIT VOID HalArchInit(VOID) { + UINT32 ret; HalHwiInit(); + + ret = HalTickStart(OsTickHandler); + if (ret != LOS_OK) { + PRINT_ERR("Tick start failed!\n"); + } } /* **************************************************************************** @@ -150,13 +157,9 @@ LITE_OS_SEC_TEXT_INIT VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOI return (VOID *)context; } -LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(OS_TICK_HANDLER handler) +LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(VOID) { (VOID)LOS_IntLock(); - UINT32 ret = HalTickStart(handler); - if (ret != LOS_OK) { - return ret; - } OsSchedStart(); HalStartToRun(); return LOS_OK; /* never return */ diff --git a/kernel/arch/arm/cortex-m33/iar/TZ/non_secure/los_timer.c b/kernel/arch/arm/cortex-m33/iar/TZ/non_secure/los_timer.c index 7212e2c4..29a0f4ed 100644 --- a/kernel/arch/arm/cortex-m33/iar/TZ/non_secure/los_timer.c +++ b/kernel/arch/arm/cortex-m33/iar/TZ/non_secure/los_timer.c @@ -65,7 +65,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER *handler) g_sysClock = OS_SYS_CLOCK; g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(g_cyclesPerTick); + ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; } diff --git a/kernel/arch/arm/cortex-m4/gcc/los_context.c b/kernel/arch/arm/cortex-m4/gcc/los_context.c index 770ba1b0..89551317 100644 --- a/kernel/arch/arm/cortex-m4/gcc/los_context.c +++ b/kernel/arch/arm/cortex-m4/gcc/los_context.c @@ -38,7 +38,7 @@ #include "los_interrupt.h" #include "los_arch_timer.h" #include "los_timer.h" - +#include "los_debug.h" /* **************************************************************************** Function : HalArchInit @@ -47,9 +47,16 @@ Output : None Return : None **************************************************************************** */ -LITE_OS_SEC_TEXT_INIT VOID HalArchInit() +LITE_OS_SEC_TEXT_INIT VOID HalArchInit(VOID) { + UINT32 ret; + HalHwiInit(); + + ret = HalTickStart(OsTickHandler); + if (ret != LOS_OK) { + PRINT_ERR("Tick start failed!\n"); + } } /* **************************************************************************** @@ -148,13 +155,9 @@ LITE_OS_SEC_TEXT_INIT VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOI return (VOID *)context; } -LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(OS_TICK_HANDLER handler) +LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(VOID) { (VOID)LOS_IntLock(); - UINT32 ret = HalTickStart(handler); - if (ret != LOS_OK) { - return ret; - } OsSchedStart(); HalStartToRun(); return LOS_OK; /* never return */ diff --git a/kernel/arch/arm/cortex-m4/gcc/los_timer.c b/kernel/arch/arm/cortex-m4/gcc/los_timer.c index 24f9b09d..008725db 100644 --- a/kernel/arch/arm/cortex-m4/gcc/los_timer.c +++ b/kernel/arch/arm/cortex-m4/gcc/los_timer.c @@ -66,7 +66,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER *handler) g_sysClock = OS_SYS_CLOCK; g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(g_cyclesPerTick); + ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; } diff --git a/kernel/arch/arm/cortex-m4/iar/los_context.c b/kernel/arch/arm/cortex-m4/iar/los_context.c index 770ba1b0..42538288 100644 --- a/kernel/arch/arm/cortex-m4/iar/los_context.c +++ b/kernel/arch/arm/cortex-m4/iar/los_context.c @@ -38,6 +38,7 @@ #include "los_interrupt.h" #include "los_arch_timer.h" #include "los_timer.h" +#include "los_debug.h" /* **************************************************************************** @@ -47,9 +48,16 @@ Output : None Return : None **************************************************************************** */ -LITE_OS_SEC_TEXT_INIT VOID HalArchInit() +LITE_OS_SEC_TEXT_INIT VOID HalArchInit(VOID) { + UINT32 ret; HalHwiInit(); + + ret = HalTickStart(OsTickHandler); + if (ret != LOS_OK) { + PRINT_ERR("Tick start failed!\n"); + return; + } } /* **************************************************************************** @@ -148,13 +156,9 @@ LITE_OS_SEC_TEXT_INIT VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOI return (VOID *)context; } -LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(OS_TICK_HANDLER handler) +LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(VOID) { (VOID)LOS_IntLock(); - UINT32 ret = HalTickStart(handler); - if (ret != LOS_OK) { - return ret; - } OsSchedStart(); HalStartToRun(); return LOS_OK; /* never return */ diff --git a/kernel/arch/arm/cortex-m4/iar/los_timer.c b/kernel/arch/arm/cortex-m4/iar/los_timer.c index 70bbc091..bd0cf516 100644 --- a/kernel/arch/arm/cortex-m4/iar/los_timer.c +++ b/kernel/arch/arm/cortex-m4/iar/los_timer.c @@ -66,7 +66,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER *handler) g_sysClock = OS_SYS_CLOCK; g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(g_cyclesPerTick); + ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; } diff --git a/kernel/arch/arm/cortex-m7/gcc/los_context.c b/kernel/arch/arm/cortex-m7/gcc/los_context.c index 19df61ce..b058362c 100644 --- a/kernel/arch/arm/cortex-m7/gcc/los_context.c +++ b/kernel/arch/arm/cortex-m7/gcc/los_context.c @@ -37,6 +37,7 @@ #include "los_sched.h" #include "los_interrupt.h" #include "los_arch_timer.h" +#include "los_debug.h" /* **************************************************************************** Function : HalArchInit @@ -45,9 +46,15 @@ Output : None Return : None **************************************************************************** */ -LITE_OS_SEC_TEXT_INIT VOID HalArchInit() +LITE_OS_SEC_TEXT_INIT VOID HalArchInit(VOID) { + UINT32 ret; HalHwiInit(); + + ret = HalTickStart(OsTickHandler); + if (ret != LOS_OK) { + PRINT_ERR("Tick start failed!\n"); + } } /* **************************************************************************** @@ -146,13 +153,9 @@ LITE_OS_SEC_TEXT_INIT VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOI return (VOID *)context; } -LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(OS_TICK_HANDLER handler) +LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(VOID) { (VOID)LOS_IntLock(); - UINT32 ret = HalTickStart(handler); - if (ret != LOS_OK) { - return ret; - } OsSchedStart(); HalStartToRun(); return LOS_OK; /* never return */ diff --git a/kernel/arch/arm/cortex-m7/gcc/los_timer.c b/kernel/arch/arm/cortex-m7/gcc/los_timer.c index 9e27972d..09802def 100644 --- a/kernel/arch/arm/cortex-m7/gcc/los_timer.c +++ b/kernel/arch/arm/cortex-m7/gcc/los_timer.c @@ -65,7 +65,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER *handler) g_sysClock = OS_SYS_CLOCK; g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(g_cyclesPerTick); + ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; } diff --git a/kernel/arch/arm/cortex-m7/iar/los_context.c b/kernel/arch/arm/cortex-m7/iar/los_context.c index 19df61ce..b058362c 100644 --- a/kernel/arch/arm/cortex-m7/iar/los_context.c +++ b/kernel/arch/arm/cortex-m7/iar/los_context.c @@ -37,6 +37,7 @@ #include "los_sched.h" #include "los_interrupt.h" #include "los_arch_timer.h" +#include "los_debug.h" /* **************************************************************************** Function : HalArchInit @@ -45,9 +46,15 @@ Output : None Return : None **************************************************************************** */ -LITE_OS_SEC_TEXT_INIT VOID HalArchInit() +LITE_OS_SEC_TEXT_INIT VOID HalArchInit(VOID) { + UINT32 ret; HalHwiInit(); + + ret = HalTickStart(OsTickHandler); + if (ret != LOS_OK) { + PRINT_ERR("Tick start failed!\n"); + } } /* **************************************************************************** @@ -146,13 +153,9 @@ LITE_OS_SEC_TEXT_INIT VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOI return (VOID *)context; } -LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(OS_TICK_HANDLER handler) +LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(VOID) { (VOID)LOS_IntLock(); - UINT32 ret = HalTickStart(handler); - if (ret != LOS_OK) { - return ret; - } OsSchedStart(); HalStartToRun(); return LOS_OK; /* never return */ diff --git a/kernel/arch/arm/cortex-m7/iar/los_timer.c b/kernel/arch/arm/cortex-m7/iar/los_timer.c index 9e27972d..09802def 100644 --- a/kernel/arch/arm/cortex-m7/iar/los_timer.c +++ b/kernel/arch/arm/cortex-m7/iar/los_timer.c @@ -65,7 +65,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER *handler) g_sysClock = OS_SYS_CLOCK; g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(g_cyclesPerTick); + ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; } diff --git a/kernel/arch/include/los_arch.h b/kernel/arch/include/los_arch.h index af753638..359bc7f4 100644 --- a/kernel/arch/include/los_arch.h +++ b/kernel/arch/include/los_arch.h @@ -33,7 +33,7 @@ #define _LOS_ARCH_H #include "los_config.h" -#include "los_compiler.h" +#include "los_timer.h" #ifdef __cplusplus #if __cplusplus diff --git a/kernel/arch/include/los_context.h b/kernel/arch/include/los_context.h index 9fc30c62..022f2f61 100755 --- a/kernel/arch/include/los_context.h +++ b/kernel/arch/include/los_context.h @@ -105,7 +105,7 @@ LITE_OS_SEC_TEXT_MINOR NORETURN VOID HalSysExit(VOID); extern VOID HalTaskSchedule(VOID); typedef VOID (*OS_TICK_HANDLER)(VOID); -UINT32 HalStartSchedule(OS_TICK_HANDLER handler); +UINT32 HalStartSchedule(VOID); #ifdef __cplusplus #if __cplusplus diff --git a/kernel/arch/risc-v/nuclei/gcc/los_context.c b/kernel/arch/risc-v/nuclei/gcc/los_context.c index 0e1fcb0e..83fd2a49 100644 --- a/kernel/arch/risc-v/nuclei/gcc/los_context.c +++ b/kernel/arch/risc-v/nuclei/gcc/los_context.c @@ -24,6 +24,7 @@ #include "los_timer.h" #include "los_sched.h" #include "los_interrupt.h" +#include "los_debug.h" #include "nuclei_sdk_soc.h" extern VOID HalHwiInit(VOID); @@ -40,7 +41,14 @@ extern "C" { LITE_OS_SEC_TEXT_INIT VOID HalArchInit(VOID) { + UINT32 ret; HalHwiInit(); + + ret = HalTickStart(OsTickHandler); + if (ret != LOS_OK) { + PRINT_ERR("Tick start failed!\n"); + return; + } } LITE_OS_SEC_TEXT_MINOR VOID HalSysExit(VOID) @@ -77,16 +85,9 @@ LITE_OS_SEC_TEXT_INIT VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOI } extern LosTask g_losTask; -LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(OS_TICK_HANDLER handler) +LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(VOID) { - UINT32 ret; - (VOID)LOS_IntLock(); - ret = HalTickStart(handler); - if (ret != LOS_OK) { - return ret; - } - OsSchedStart(); HalStartToRun(); return LOS_OK; /* never return */ diff --git a/kernel/arch/risc-v/riscv32/gcc/los_context.c b/kernel/arch/risc-v/riscv32/gcc/los_context.c index f0a1148c..e9bb51a0 100644 --- a/kernel/arch/risc-v/riscv32/gcc/los_context.c +++ b/kernel/arch/risc-v/riscv32/gcc/los_context.c @@ -36,14 +36,21 @@ #include "los_sched.h" #include "los_memory.h" #include "los_timer.h" +#include "los_debug.h" #include "soc.h" - STATIC UINT32 g_sysNeedSched = FALSE; LITE_OS_SEC_TEXT_INIT VOID HalArchInit(VOID) { + UINT32 ret; HalHwiInit(); + + ret = HalTickStart(OsTickHandler); + if (ret != LOS_OK) { + PRINT_ERR("Tick start failed!\n"); + return; + } } VOID HalIrqEndCheckNeedSched(VOID) @@ -129,14 +136,9 @@ LITE_OS_SEC_TEXT_INIT VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOI return (VOID *)context; } -LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(OS_TICK_HANDLER handler) +LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(VOID) { (VOID)LOS_IntLock(); - UINT32 ret = HalTickStart(handler); - if (ret != LOS_OK) { - return ret; - } - OsSchedStart(); HalStartToRun(); return LOS_OK; /* never return */ diff --git a/kernel/arch/risc-v/riscv32/gcc/los_timer.c b/kernel/arch/risc-v/riscv32/gcc/los_timer.c index 38f27706..ffb98543 100644 --- a/kernel/arch/risc-v/riscv32/gcc/los_timer.c +++ b/kernel/arch/risc-v/riscv32/gcc/los_timer.c @@ -45,7 +45,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) g_cyclesPerTick = g_sysClock / LOSCFG_BASE_CORE_TICK_PER_SECOND; g_intCount = 0; - HalClockInit(handler, g_cyclesPerTick); + HalClockInit(handler, LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); return LOS_OK; /* never return */ } diff --git a/kernel/src/los_init.c b/kernel/src/los_init.c index 93b7e01a..8aa848b5 100644 --- a/kernel/src/los_init.c +++ b/kernel/src/los_init.c @@ -101,7 +101,7 @@ LITE_OS_SEC_TEXT_INIT static VOID OsRegister(VOID) LITE_OS_SEC_TEXT_INIT UINT32 LOS_Start(VOID) { - return HalStartSchedule(OsTickHandler); + return HalStartSchedule(); } /***************************************************************************** diff --git a/kernel/src/los_sched.c b/kernel/src/los_sched.c index d0b27435..bd95f9d4 100644 --- a/kernel/src/los_sched.c +++ b/kernel/src/los_sched.c @@ -91,10 +91,6 @@ VOID OsSchedTimerBaseReset(UINT64 currTime) UINT64 OsGetCurrSchedTimeCycle(VOID) { - if (!g_taskScheduled) { - return 0; - } - #if (LOSCFG_BASE_CORE_TICK_WTIMER == 1) return HalGetTickCycle(NULL); #else @@ -527,7 +523,9 @@ VOID LOS_SchedTickHandler(VOID) UINT64 currTime; BOOL needSched = FALSE; - LOS_ASSERT(g_taskScheduled); + if (!g_taskScheduled) { + return; + } UINT32 intSave = LOS_IntLock();