From 413b08295d94b540211473285ab5d52258673910 Mon Sep 17 00:00:00 2001 From: hw_llm Date: Wed, 28 Aug 2024 19:59:42 +0800 Subject: [PATCH] =?UTF-8?q?Description:=20liteos=5Fm=20cpup=20=E4=B8=AD?= =?UTF-8?q?=E6=96=AD=E7=B4=A2=E5=BC=95=E5=80=BC=E8=B6=8A=E7=95=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=20IssueNo:=20https://gitee.com/openharmony/kernel=5Fl?= =?UTF-8?q?iteos=5Fm/issues/I9RHZ7=20Feature=20Or=20Bugfix:=20Bugfix=20Bin?= =?UTF-8?q?ary=20Source:=20No=20Signed-off-by:=20hw=5Fllm=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- arch/risc-v/riscv32/gcc/los_arch_interrupt.h | 6 ++++ components/cpup/los_cpup.c | 35 ++++++++++---------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/arch/risc-v/riscv32/gcc/los_arch_interrupt.h b/arch/risc-v/riscv32/gcc/los_arch_interrupt.h index fe79fd20..90a911ba 100644 --- a/arch/risc-v/riscv32/gcc/los_arch_interrupt.h +++ b/arch/risc-v/riscv32/gcc/los_arch_interrupt.h @@ -110,6 +110,12 @@ typedef struct { */ #define OS_RISCV_VECTOR_CNT (OS_RISCV_SYS_VECTOR_CNT + OS_RISCV_CUSTOM_IRQ_VECTOR_CNT) +/** + * @ingroup los_arch_interrupt + * Count of risc-v system interrupt vector. + */ +#define OS_SYS_VECTOR_CNT 0 + /** * Maximum number of supported hardware devices that generate hardware interrupts. * The maximum number of hardware devices that generate hardware interrupts supported by hi3518ev200 is 32. diff --git a/components/cpup/los_cpup.c b/components/cpup/los_cpup.c index 0c3e2cf7..d9f31e4c 100644 --- a/components/cpup/los_cpup.c +++ b/components/cpup/los_cpup.c @@ -616,11 +616,11 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_CpupUsageMonitor(CPUP_TYPE_E type, CPUP_MODE_E #if (LOSCFG_CPUP_INCLUDE_IRQ == 1) LITE_OS_SEC_TEXT_MINOR VOID OsCpupIrqStart(UINT32 intNum) { - if (g_irqCpupInitFlg == 0) { + if ((g_irqCpupInitFlg == 0) || (intNum < OS_SYS_VECTOR_CNT)) { return; } - - g_irqCpup[intNum].startTime = CpupTimeUsGet(); + UINT32 cpupIntNum = intNum - OS_SYS_VECTOR_CNT; + g_irqCpup[cpupIntNum].startTime = CpupTimeUsGet(); return; } @@ -629,33 +629,34 @@ LITE_OS_SEC_TEXT_MINOR VOID OsCpupIrqEnd(UINT32 intNum) UINT64 cpuTime; UINT64 usedTime; - if (g_irqCpupInitFlg == 0) { + if ((g_irqCpupInitFlg == 0) || (intNum < OS_SYS_VECTOR_CNT)) { return; } - if (g_irqCpup[intNum].startTime == 0) { + UINT32 cpupIntNum = intNum - OS_SYS_VECTOR_CNT; + if (g_irqCpup[cpupIntNum].startTime == 0) { return; } cpuTime = CpupTimeUsGet(); - if (cpuTime < g_irqCpup[intNum].startTime) { + if (cpuTime < g_irqCpup[cpupIntNum].startTime) { cpuTime += OS_US_PER_TICK; } - g_irqCpup[intNum].cpupID = intNum; - g_irqCpup[intNum].status = OS_CPUP_USED; - usedTime = cpuTime - g_irqCpup[intNum].startTime; + g_irqCpup[cpupIntNum].cpupID = intNum; + g_irqCpup[cpupIntNum].status = OS_CPUP_USED; + usedTime = cpuTime - g_irqCpup[cpupIntNum].startTime; - if (g_irqCpup[intNum].count <= 1000) { /* 1000, Take 1000 samples */ - g_irqCpup[intNum].allTime += usedTime; - g_irqCpup[intNum].count++; + if (g_irqCpup[cpupIntNum].count <= 1000) { /* 1000, Take 1000 samples */ + g_irqCpup[cpupIntNum].allTime += usedTime; + g_irqCpup[cpupIntNum].count++; } else { - g_irqCpup[intNum].allTime = 0; - g_irqCpup[intNum].count = 0; + g_irqCpup[cpupIntNum].allTime = 0; + g_irqCpup[cpupIntNum].count = 0; } - g_irqCpup[intNum].startTime = 0; - if (usedTime > g_irqCpup[intNum].timeMax) { - g_irqCpup[intNum].timeMax = usedTime; + g_irqCpup[cpupIntNum].startTime = 0; + if (usedTime > g_irqCpup[cpupIntNum].timeMax) { + g_irqCpup[cpupIntNum].timeMax = usedTime; } return; }