|
|
/* ----------------------------------------------------------------------------
|
|
|
* Copyright (c) Huawei Technologies Co., Ltd. 2013-2020. All rights reserved.
|
|
|
* Description : LiteOS Cpu Usage Calculation Module Implementation
|
|
|
* Author: Huawei LiteOS Team
|
|
|
* Create: 2013-01-01
|
|
|
* 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 "los_cpup_pri.h"
|
|
|
#include "los_task_pri.h"
|
|
|
#include "los_base.h"
|
|
|
#include "los_swtmr.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
#if __cplusplus
|
|
|
extern "C" {
|
|
|
#endif /* __cplusplus */
|
|
|
#endif /* __cplusplus */
|
|
|
|
|
|
#ifdef LOSCFG_KERNEL_CPUP
|
|
|
|
|
|
LITE_OS_SEC_BSS STATIC UINT16 g_cpupSwtmrId; //<2F><><EFBFBD>ڼ<EFBFBD>¼CPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD>ƶ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ID//
|
|
|
LITE_OS_SEC_BSS STATIC UINT16 g_cpupInitFlg = 0; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>CPUʹ<55><CAB9><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>Ƿ<EFBFBD><C7B7>Ѿ<EFBFBD><D1BE><EFBFBD>ʼ<EFBFBD><CABC>//
|
|
|
LITE_OS_SEC_BSS OsCpupCB *g_cpup = NULL; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>CPUʹ<55><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>Ϣ//
|
|
|
LITE_OS_SEC_BSS STATIC UINT16 g_cpupMaxNum; //<2F><>ʾCPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
LITE_OS_SEC_BSS STATIC UINT16 g_cpupTaskMaxNum; //<2F><>ʾCPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
LITE_OS_SEC_BSS STATIC UINT16 g_hisPos = 0; /* current Sampling point of historyTime */
|
|
|
LITE_OS_SEC_DATA_INIT STATIC UINT32 runningTasks[LOSCFG_KERNEL_CORE_NUM] = {
|
|
|
[0 ... (LOSCFG_KERNEL_CORE_NUM - 1)] = (UINT32)-1
|
|
|
}; //<2F><><EFBFBD>ڼ<EFBFBD>¼ÿ<C2BC><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID//
|
|
|
LITE_OS_SEC_BSS STATIC UINT64 cpuHistoryTime[OS_CPUP_HISTORY_RECORD_NUM + 1];
|
|
|
//<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>CPU<50><55>ʷʱ<CAB7><CAB1><EFBFBD><EFBFBD>¼//
|
|
|
LITE_OS_SEC_BSS STATIC UINT64 g_startCycles = 0; //<2F><><EFBFBD>ڼ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>ǰ<EFBFBD><C7B0>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
#ifdef LOSCFG_CPUP_INCLUDE_IRQ //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>صĹ<D8B5><C4B9><EFBFBD>//
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
LITE_OS_SEC_BSS UINT64 g_timeInIrqPerTskSwitch[LOSCFG_KERNEL_CORE_NUM]; //<2F><><EFBFBD>ڼ<EFBFBD>¼ÿ<C2BC><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB>ڼ䷢<DABC><E4B7A2><EFBFBD><EFBFBD><EFBFBD>жϵ<D0B6>ʱ<EFBFBD><CAB1>//
|
|
|
LITE_OS_SEC_BSS STATIC UINT64 g_intTimeStart[LOSCFG_KERNEL_CORE_NUM]; //<2F><><EFBFBD>ڼ<EFBFBD>¼ÿ<C2BC><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϿ<D0B6>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1>//
|
|
|
#endif
|
|
|
|
|
|
#define HIGH_BITS 32
|
|
|
|
|
|
#define CPUP_PRE_POS(pos) (((pos) == 0) ? (OS_CPUP_HISTORY_RECORD_NUM - 1) : ((pos) - 1))
|
|
|
#define CPUP_POST_POS(pos) (((pos) == (OS_CPUP_HISTORY_RECORD_NUM - 1)) ? 0 : ((pos) + 1))
|
|
|
|
|
|
LITE_OS_SEC_TEXT_INIT OsCpupCB *OsCpupCBGet(UINT32 index)
|
|
|
{
|
|
|
return &g_cpup[index];
|
|
|
}
|
|
|
|
|
|
/*<2A><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD>ʷʱ<CAB7><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPUʹ<55><CAB9><EFBFBD><EFBFBD>*/
|
|
|
LITE_OS_SEC_TEXT_INIT VOID OsCpupGuard(VOID)
|
|
|
{
|
|
|
UINT16 prevPos = g_hisPos;
|
|
|
UINT16 loop;
|
|
|
UINT16 runTaskId;
|
|
|
UINT64 curCycle;
|
|
|
UINT32 intSave;
|
|
|
|
|
|
if (g_cpupInitFlg == 0) { //<2F><>ʾCPUʹ<55><CAB9><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>//
|
|
|
return;
|
|
|
}
|
|
|
//<2F><><EFBFBD>ѳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
intSave = LOS_IntLock();
|
|
|
curCycle = OsCpupGetCycle();
|
|
|
|
|
|
g_hisPos = CPUP_POST_POS(g_hisPos); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷʱ<CAB7><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>//
|
|
|
cpuHistoryTime[prevPos] = curCycle; //<2F><>¼<EFBFBD><C2BC><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPU<50><55><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>*/
|
|
|
for (loop = 0; loop < g_cpupMaxNum; loop++) {
|
|
|
g_cpup[loop].historyTime[prevPos] = g_cpup[loop].allTime;
|
|
|
}
|
|
|
|
|
|
for (loop = 0; loop < LOSCFG_KERNEL_CORE_NUM; loop++) {
|
|
|
runTaskId = runningTasks[loop]; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>ID//
|
|
|
/* reacquire the cycle to prevent flip */
|
|
|
curCycle = OsCpupGetCycle();
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷʱ<CAB7><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>*/
|
|
|
g_cpup[runTaskId].historyTime[prevPos] += curCycle - g_cpup[runTaskId].startTime;
|
|
|
#ifdef LOSCFG_CPUP_INCLUDE_IRQ //<2F>ж<EFBFBD><D0B6>жϹ<D0B6><CFB9><EFBFBD><EFBFBD>Ƿ<C7B7><F1B1BBB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
/*<2A>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>м<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB>ڼ䷢<DABC><E4B7A2><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>õ<EFBFBD>ʱ<EFBFBD><CAB1>*/
|
|
|
g_cpup[runTaskId].historyTime[prevPos] -= g_timeInIrqPerTskSwitch[loop];
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
LOS_IntRestore(intSave); //<2F>ָ<EFBFBD><D6B8>ж<EFBFBD>״̬//
|
|
|
}
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Ա㶨<D4B1>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD>ʷʱ<CAB7><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD>Ӷ<EFBFBD>ʵ<EFBFBD><CAB5>CPUʹ<55><CAB9><EFBFBD>ʵ<EFBFBD>ͳ<EFBFBD><CDB3>*/
|
|
|
LITE_OS_SEC_TEXT_INIT VOID OsCpupGuardCreator(VOID)
|
|
|
{
|
|
|
/*<2A><><EFBFBD>溯<EFBFBD><E6BAAF><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>ֱ<EFBFBD>Ϊ*/
|
|
|
//<2F>趨<EFBFBD><E8B6A8>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ӵĻ<D3B5><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ӵδ<D3B5><CEB4><EFBFBD>//
|
|
|
//<2F><><EFBFBD><EFBFBD>ģʽΪ<CABD><CEAA><EFBFBD><EFBFBD>ģʽ//
|
|
|
//<2F>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
//<2F><>ʱ<EFBFBD><CAB1>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>g_cpupSwtmrId<49><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30>ʾ<EFBFBD><CABE>Я<EFBFBD><D0AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
(VOID)LOS_SwtmrCreate(LOSCFG_BASE_CORE_TICK_PER_SECOND, LOS_SWTMR_MODE_PERIOD,
|
|
|
(SWTMR_PROC_FUNC)OsCpupGuard, &g_cpupSwtmrId, 0);
|
|
|
|
|
|
(VOID)LOS_SwtmrStart(g_cpupSwtmrId); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>//
|
|
|
}
|
|
|
|
|
|
/*<2A><>ʼ<EFBFBD><CABC>CPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>ģ<EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>ΪOsCpupGuardCreator<EFBFBD><EFBFBD>
|
|
|
<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD>OsCpupGuard()<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>*/
|
|
|
LITE_OS_SEC_TEXT_INIT VOID OsCpupGuardInit(VOID)
|
|
|
{
|
|
|
TSK_INIT_PARAM_S taskInitParam;
|
|
|
UINT32 tempId;
|
|
|
//<2F><>ʼ<EFBFBD><CABC>taskInitParam<61><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
(VOID)memset_s((void *)(&taskInitParam), sizeof(TSK_INIT_PARAM_S), 0, sizeof(TSK_INIT_PARAM_S));
|
|
|
taskInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)OsCpupGuardCreator; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD>ΪOsCpupGuardCreator<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>//
|
|
|
taskInitParam.uwStackSize = LOS_TASK_MIN_STACK_SIZE; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD>Ĵ<EFBFBD>СΪ<D0A1><CEAA>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB>С//
|
|
|
taskInitParam.pcName = "CpupGuardCreator"; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ"CpupGuardCreator"//
|
|
|
taskInitParam.usTaskPrio = OS_TASK_PRIORITY_HIGHEST; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>//
|
|
|
taskInitParam.uwResved = LOS_TASK_STATUS_DETACHED; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ΪLOS_TASK_STATUS_DETACHED//
|
|
|
#ifdef LOSCFG_KERNEL_SMP //<2F>жϲ<D0B6><CFB2><EFBFBD>ϵͳ<CFB5>Ƿ<EFBFBD>֧<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>//
|
|
|
taskInitParam.usCpuAffiMask = CPUID_TO_AFFI_MASK(ArchCurrCpuid()); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPU<50><EFBFBD><D7BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
#endif
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>õIJ<C3B5><C4B2><EFBFBD>taskInitParam<61><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tempId<49><64>*/
|
|
|
(VOID)LOS_TaskCreate(&tempId, &taskInitParam);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Description: initialization of CPUP
|
|
|
* Return : LOS_OK or Error Information
|
|
|
*/
|
|
|
LITE_OS_SEC_TEXT_INIT UINT32 OsCpupInit(VOID)
|
|
|
{
|
|
|
UINT32 size;
|
|
|
|
|
|
g_cpupTaskMaxNum = g_taskMaxNum;
|
|
|
g_cpupMaxNum = g_cpupTaskMaxNum;
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˰<EFBFBD><CBB0><EFBFBD><EFBFBD>жϵ<D0B6>CPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD>ƣ<EFBFBD>LOSCFG_CPUP_INCLUDE_IRQ<52><51><EFBFBD><EFBFBD>
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>g_cpupMaxNum<EFBFBD><EFBFBD><EFBFBD><EFBFBD>LOSCFG_PLATFORM_HWI_LIMIT*/
|
|
|
#ifdef LOSCFG_CPUP_INCLUDE_IRQ
|
|
|
g_cpupMaxNum += LOSCFG_PLATFORM_HWI_LIMIT;
|
|
|
#endif
|
|
|
|
|
|
/* every task has only one record, and it won't operated at the same time */
|
|
|
size = g_cpupMaxNum * sizeof(OsCpupCB); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ռ<EFBFBD><D5BC><EFBFBD>С//
|
|
|
g_cpup = (OsCpupCB *)LOS_MemAlloc(m_aucSysMem0, size); //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ棬<DAB4><E6A3AC><EFBFBD>ڴ洢OsCpupCB<43>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
if (g_cpup == NULL) { //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>//
|
|
|
return LOS_ERRNO_CPUP_NO_MEMORY;
|
|
|
}
|
|
|
|
|
|
OsCpupGuardInit(); //<2F><>ʼ<EFBFBD><CABC>CPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>ģ<EFBFBD><C4A3>//
|
|
|
|
|
|
(VOID)memset_s(g_cpup, size, 0, size); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
g_cpupInitFlg = 1; //<2F><>ʾCPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>ģ<EFBFBD><C4A3><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
|
|
|
return LOS_OK; //<2F><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>//
|
|
|
}
|
|
|
|
|
|
LITE_OS_SEC_TEXT_INIT VOID LOS_CpupReset(VOID) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>ģ<EFBFBD><C4A3>//
|
|
|
{
|
|
|
UINT32 cpupIndex;
|
|
|
UINT32 maxNum = g_cpupMaxNum;
|
|
|
UINT64 curCycle;
|
|
|
UINT16 loop;
|
|
|
UINT32 intSave;
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>g_cpup<75>Ƿ<EFBFBD>ΪNULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7>أ<EFBFBD><D8A3><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>κβ<CEBA><CEB2><EFBFBD>*/
|
|
|
if (g_cpup == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
g_cpupInitFlg = 0; //<2F><>ʾCPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>ģ<EFBFBD><C4A3>δ<EFBFBD><CEB4>ʼ<EFBFBD><CABC>//
|
|
|
intSave = LOS_IntLock(); //<2F><><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD>ж<EFBFBD>//
|
|
|
(VOID)LOS_SwtmrStop(g_cpupSwtmrId); //ֹͣCPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD>ƶ<EFBFBD>ʱ<EFBFBD><CAB1>//
|
|
|
curCycle = OsCpupGetCycle(); //<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>CPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
|
|
|
/*<2A><>cpuHistoryTime<6D><65><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD>ΪcurCycle<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷʱ<CAB7><CAB1><EFBFBD><EFBFBD>¼*/
|
|
|
for (loop = 0; loop < (OS_CPUP_HISTORY_RECORD_NUM + 1); loop++) {
|
|
|
cpuHistoryTime[loop] = curCycle;
|
|
|
}
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>CPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD>ƽṹ<C6BD>壬
|
|
|
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼʱ<CABC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䶼<EFBFBD><E4B6BC><EFBFBD><EFBFBD>ΪcurCycle<6C><65>
|
|
|
ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD>е<EFBFBD><D0B5><EFBFBD>ʷʱ<CAB7><CAB1><EFBFBD><EFBFBD>¼*/
|
|
|
for (cpupIndex = 0; cpupIndex < maxNum; cpupIndex++) {
|
|
|
g_cpup[cpupIndex].startTime = curCycle;
|
|
|
g_cpup[cpupIndex].allTime = curCycle;
|
|
|
for (loop = 0; loop < (OS_CPUP_HISTORY_RECORD_NUM + 1); loop++) {
|
|
|
g_cpup[cpupIndex].historyTime[loop] = curCycle;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˰<EFBFBD><CBB0><EFBFBD><EFBFBD>жϵ<D0B6>CPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD>ƣ<EFBFBD>
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>g_timeInIrqPerTskSwitch<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<EFBFBD><EFBFBD>
|
|
|
<EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><EFBFBD>*/
|
|
|
#ifdef LOSCFG_CPUP_INCLUDE_IRQ
|
|
|
for (loop = 0; loop < LOSCFG_KERNEL_CORE_NUM; loop++) {
|
|
|
g_timeInIrqPerTskSwitch[loop] = 0;
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
(VOID)LOS_SwtmrStart(g_cpupSwtmrId); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD>ƶ<EFBFBD>ʱ<EFBFBD><CAB1>//
|
|
|
LOS_IntRestore(intSave); //<2F>ָ<EFBFBD><D6B8>ж<EFBFBD>״̬//
|
|
|
g_cpupInitFlg = 1; //<2F><>ʾCPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>ģ<EFBFBD><C4A3><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼֵ<CABC><D6B5><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼ʱ<C2BC><CAB1>ʱ
|
|
|
<EFBFBD>ܹ<EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><EFBFBD>õ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
LITE_OS_SEC_TEXT_MINOR VOID OsCpupSetCycle(UINT64 startCycles)
|
|
|
{
|
|
|
g_startCycles = startCycles;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Description: get current cycles count
|
|
|
* Return : current cycles count
|
|
|
*/
|
|
|
LITE_OS_SEC_TEXT_MINOR UINT64 OsCpupGetCycle(VOID)
|
|
|
{
|
|
|
UINT32 high;
|
|
|
UINT32 low;
|
|
|
UINT64 cycles;
|
|
|
|
|
|
LOS_GetCpuCycle(&high, &low);
|
|
|
cycles = ((UINT64)high << HIGH_BITS) + low; //<2F><><EFBFBD><EFBFBD>λ<EFBFBD>͵<EFBFBD>λ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ֵ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>һ<EFBFBD><D2BB>64λ<34><CEBB><EFBFBD><EFBFBD>ֵ//
|
|
|
if (g_startCycles == 0) {
|
|
|
g_startCycles = cycles;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* The cycles should keep growing, if the checking failed,
|
|
|
* it mean LOS_GetCpuCycle has the problem which should be fixed.
|
|
|
*/
|
|
|
LOS_ASSERT(cycles >= g_startCycles);
|
|
|
|
|
|
return (cycles - g_startCycles);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Description: start task to get cycles count in current task beginning
|
|
|
*/
|
|
|
LITE_OS_SEC_TEXT_MINOR VOID OsTaskCycleStart(VOID) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼʱ<CABC><CAB1>ȡCPU<50><55><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>//
|
|
|
{
|
|
|
UINT32 taskId;
|
|
|
LosTaskCB *runTask = NULL;
|
|
|
|
|
|
if (g_cpupInitFlg == 0) { //<2F><><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>CPU<50><55><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>//
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
runTask = OsCurrTaskGet(); //<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
taskId = runTask->taskId; //<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID//
|
|
|
|
|
|
g_cpup[taskId].id = taskId;
|
|
|
g_cpup[taskId].startTime = OsCpupGetCycle();
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Description: quit task and get cycle count
|
|
|
*/
|
|
|
LITE_OS_SEC_TEXT_MINOR VOID OsTaskCycleEnd(VOID)
|
|
|
{
|
|
|
UINT32 taskId;
|
|
|
UINT64 cpuCycle;
|
|
|
LosTaskCB *runTask = NULL;
|
|
|
|
|
|
if (g_cpupInitFlg == 0) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
runTask = OsCurrTaskGet();
|
|
|
taskId = runTask->taskId;
|
|
|
|
|
|
if (g_cpup[taskId].startTime == 0) { //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>Ѿ<EFBFBD><D1BE><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>ʼʱ<CABC>䣬//
|
|
|
return; //<2F><>Ϊ0<CEAA><30><EFBFBD><EFBFBD>ʾδ<CABE><CEB4>¼<EFBFBD><C2BC>ʼʱ<CABC>䣬ֱ<E4A3AC>ӷ<EFBFBD><D3B7><EFBFBD>//
|
|
|
}
|
|
|
|
|
|
cpuCycle = OsCpupGetCycle();
|
|
|
g_cpup[taskId].allTime += cpuCycle - g_cpup[taskId].startTime; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
|
|
|
#ifdef LOSCFG_CPUP_INCLUDE_IRQ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˰<EFBFBD><CBB0><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ͳ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
UINT32 cpuId = ArchCurrCpuid();
|
|
|
g_cpup[taskId].allTime -= g_timeInIrqPerTskSwitch[cpuId]; //<2F><>ȥ<EFBFBD><C8A5>ǰCPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>õ<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
g_timeInIrqPerTskSwitch[cpuId] = 0;
|
|
|
#endif
|
|
|
g_cpup[taskId].startTime = 0; //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ͳ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>//
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Description: start task to get cycles count in current task ending
|
|
|
*/
|
|
|
LITE_OS_SEC_TEXT_MINOR VOID OsTaskCycleEndStart(const LosTaskCB *newTask)
|
|
|
{
|
|
|
UINT64 cpuCycle;
|
|
|
LosTaskCB *runTask = NULL;
|
|
|
OsCpupCB *cpup = NULL;
|
|
|
UINT32 cpuId = ArchCurrCpuid();
|
|
|
|
|
|
if ((g_cpupInitFlg == 0) || (newTask == NULL)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
runTask = OsCurrTaskGet();
|
|
|
cpuCycle = OsCpupGetCycle();
|
|
|
|
|
|
cpup = &g_cpup[runTask->taskId];
|
|
|
if (cpup->startTime != 0) {
|
|
|
cpup->allTime += cpuCycle - cpup->startTime; //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<D6AE>Ѿ<EFBFBD><D1BE><EFBFBD>ʼ<EFBFBD><CABC>CPU<50><55><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><D0B8><EFBFBD>//
|
|
|
#ifdef LOSCFG_CPUP_INCLUDE_IRQ //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
cpup->allTime -= g_timeInIrqPerTskSwitch[cpuId];
|
|
|
g_timeInIrqPerTskSwitch[cpuId] = 0;
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
cpup = &g_cpup[newTask->taskId];
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49>͵<EFBFBD>ǰCPU<50><55><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>棬<EFBFBD><E6A3AC>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPU<50><55><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD>ʼ*/
|
|
|
cpup->id = newTask->taskId;
|
|
|
cpup->startTime = cpuCycle;
|
|
|
runningTasks[cpuId] = newTask->taskId; //<2F><><EFBFBD>µ<EFBFBD>ǰCPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>ID//
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
/*<2A><><EFBFBD>ڻ<EFBFBD>ȡCPU<50><55><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>λ<EFBFBD><CEBB>*/
|
|
|
LITE_OS_SEC_TEXT_MINOR STATIC VOID OsCpupGetPos(UINT32 mode, UINT16 *curPosPointer, UINT16 *prePosPointer)
|
|
|
{
|
|
|
UINT16 curPos;
|
|
|
UINT16 tmpPos;
|
|
|
UINT16 prePos;
|
|
|
|
|
|
tmpPos = g_hisPos; //<2F><>ȡ<EFBFBD><C8A1>ǰλ<C7B0><CEBB>//
|
|
|
curPos = CPUP_PRE_POS(tmpPos); //<2F><>ȡǰһ<C7B0><D2BB>λ<EFBFBD><CEBB>//
|
|
|
|
|
|
/*
|
|
|
* The current position has nothing to do with the CPUP modes,
|
|
|
* however, the previous position differs.
|
|
|
*/
|
|
|
switch (mode) {
|
|
|
/*<2A><>ʾ<EFBFBD><CABE>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD>CPU<50><55><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
|
|
<20><>ʱ<EFBFBD><CAB1>ǰһ<C7B0><D2BB>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ǰλ<C7B0>õ<EFBFBD>ǰһ<C7B0><D2BB>λ<EFBFBD><CEBB>*/
|
|
|
case CPUP_LAST_ONE_SECONDS:
|
|
|
prePos = CPUP_PRE_POS(curPos);
|
|
|
break;
|
|
|
/*<2A><>ʾ<EFBFBD><CABE>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD>ڵ<EFBFBD>CPU<50><55><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
|
|
<20><>ʱ<EFBFBD><CAB1>ǰһ<C7B0><D2BB>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ǰλ<C7B0><CEBB>*/
|
|
|
case CPUP_LAST_TEN_SECONDS:
|
|
|
prePos = tmpPos;
|
|
|
break;
|
|
|
/*<2A><>ʾ<EFBFBD><CABE>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ڵ<EFBFBD>CPU<50><55><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
|
|
<20><>ʱ<EFBFBD><CAB1>ǰһ<C7B0><D2BB>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>λ<EFBFBD><CEBB>*/
|
|
|
case CPUP_ALL_TIME:
|
|
|
/* fall-through */
|
|
|
default:
|
|
|
prePos = OS_CPUP_HISTORY_RECORD_NUM;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
*curPosPointer = curPos; //<2F><><EFBFBD>浱ǰλ<C7B0><CEBB>//
|
|
|
*prePosPointer = prePos; //<2F><><EFBFBD><EFBFBD>ǰһ<C7B0><D2BB>λ<EFBFBD><CEBB>//
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
/*<2A><><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>CPUʹ<55><CAB9><EFBFBD><EFBFBD>ͳ<EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD>ĺϷ<C4BA><CFB7><EFBFBD>*/
|
|
|
LITE_OS_SEC_TEXT_MINOR STATIC INLINE UINT32 OsCpuUsageParaCheck(UINT32 taskId)
|
|
|
{
|
|
|
if (g_cpupInitFlg == 0) {
|
|
|
return LOS_ERRNO_CPUP_NO_INIT;
|
|
|
}
|
|
|
|
|
|
if (OS_TSK_GET_INDEX(taskId) >= g_taskMaxNum) { //<2F><><EFBFBD><EFBFBD>ID<49><44><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
return LOS_ERRNO_CPUP_TSK_ID_INVALID; //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ID<49><44>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
}
|
|
|
|
|
|
/* weather the task is created */
|
|
|
if (g_cpup[taskId].id != taskId) {
|
|
|
return LOS_ERRNO_CPUP_THREAD_NO_CREATED; //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
}
|
|
|
|
|
|
if ((g_cpup[taskId].status & OS_TASK_STATUS_UNUSED) || (g_cpup[taskId].status == 0)) {
|
|
|
return LOS_ERRNO_CPUP_THREAD_NO_CREATED; //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
}
|
|
|
|
|
|
return LOS_OK; //<2F><>ʾͨ<CABE><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
}
|
|
|
|
|
|
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistorySysCpuUsage(UINT32 mode) //<2F><><EFBFBD>ڻ<EFBFBD>ȡ<EFBFBD><C8A1>ʷϵͳCPUʹ<55><CAB9><EFBFBD><EFBFBD>//
|
|
|
{
|
|
|
UINT64 cpuCycleAll;
|
|
|
UINT64 idleCycleAll = 0;
|
|
|
UINT32 cpup = 0;
|
|
|
UINT16 pos;
|
|
|
UINT16 prePos;
|
|
|
UINT32 intSave;
|
|
|
UINT32 idleTaskId;
|
|
|
#ifdef LOSCFG_KERNEL_SMP
|
|
|
UINT32 cpuId = 0;
|
|
|
#endif
|
|
|
|
|
|
if (g_cpupInitFlg == 0) {
|
|
|
return LOS_ERRNO_CPUP_NO_INIT;
|
|
|
}
|
|
|
|
|
|
/* get end time of current task */
|
|
|
intSave = LOS_IntLock(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>״̬//
|
|
|
OsTaskCycleEnd(); //<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>ʱ<EFBFBD><CAB1>//
|
|
|
|
|
|
OsCpupGetPos(mode, &pos, &prePos); //<2F><>ȡ<EFBFBD><C8A1>ʷCPUʹ<55><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϣ//
|
|
|
cpuCycleAll = cpuHistoryTime[pos] - cpuHistoryTime[prePos]; //<2F><><EFBFBD><EFBFBD>CPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
|
|
|
#ifdef LOSCFG_KERNEL_SMP //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD>ΪSMPϵͳ//
|
|
|
/* For SMP system, each idle task needs to be accounted */
|
|
|
while (cpuId < LOSCFG_KERNEL_CORE_NUM) {
|
|
|
idleTaskId = g_percpu[cpuId].idleTaskId;
|
|
|
//<2F>ۼӸ<DBBC><D3B8><EFBFBD><EFBFBD>ĵĿ<C4B5><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>idleCycleAll<6C><6C>//
|
|
|
idleCycleAll += g_cpup[idleTaskId].historyTime[pos] - g_cpup[idleTaskId].historyTime[prePos];
|
|
|
cpuId++;
|
|
|
}
|
|
|
cpuCycleAll *= LOSCFG_KERNEL_CORE_NUM;
|
|
|
#else
|
|
|
idleTaskId = OsGetIdleTaskId(); //ֱ<>ӻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
idleCycleAll = g_cpup[idleTaskId].historyTime[pos] - g_cpup[idleTaskId].historyTime[prePos];
|
|
|
#endif
|
|
|
|
|
|
if (cpuCycleAll) {
|
|
|
cpup = (LOS_CPUP_PRECISION - (UINT32)((LOS_CPUP_PRECISION * idleCycleAll) / cpuCycleAll));
|
|
|
} //<2F>ó<EFBFBD>CPUʹ<55><CAB9><EFBFBD><EFBFBD>//
|
|
|
|
|
|
OsTaskCycleStart(); //<2F><><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ͳ<EFBFBD><CDB3>//
|
|
|
LOS_IntRestore(intSave); //<2F>ָ<EFBFBD><D6B8>ж<EFBFBD>״̬//
|
|
|
|
|
|
return cpup;
|
|
|
}
|
|
|
|
|
|
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_HistoryTaskCpuUsage(UINT32 taskId, UINT32 mode)
|
|
|
{
|
|
|
UINT64 cpuCycleAll;
|
|
|
UINT64 cpuCycleCurTask;
|
|
|
UINT16 pos;
|
|
|
UINT16 prePos;
|
|
|
UINT32 intSave;
|
|
|
UINT32 cpup = 0;
|
|
|
UINT32 ret;
|
|
|
|
|
|
if (g_cpupInitFlg == 0) {
|
|
|
return LOS_ERRNO_CPUP_NO_INIT;
|
|
|
}
|
|
|
|
|
|
//<2F>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LOS_OK<4F><4B><EFBFBD><EFBFBD><F2B7B5BB><EFBFBD>Ӧ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
ret = OsCpuUsageParaCheck(taskId);
|
|
|
if (ret != LOS_OK) {
|
|
|
return ret;
|
|
|
}
|
|
|
OsCpupCB *taskCpup = &g_cpup[taskId];
|
|
|
|
|
|
intSave = LOS_IntLock();
|
|
|
OsTaskCycleEnd();
|
|
|
|
|
|
OsCpupGetPos(mode, &pos, &prePos); //<2F><>ȡ<EFBFBD><C8A1>ʷCPUʹ<55><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϣ//
|
|
|
cpuCycleAll = cpuHistoryTime[pos] - cpuHistoryTime[prePos]; //<2F><><EFBFBD><EFBFBD>CPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
cpuCycleCurTask = taskCpup->historyTime[pos] - taskCpup->historyTime[prePos]; //<2F><><EFBFBD>㵱ǰ<E3B5B1><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
if (cpuCycleAll) {
|
|
|
cpup = (UINT32)((LOS_CPUP_PRECISION * cpuCycleCurTask) / cpuCycleAll);
|
|
|
} //<2F><><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>CPUʹ<55><CAB9><EFBFBD><EFBFBD>//
|
|
|
|
|
|
OsTaskCycleStart();
|
|
|
LOS_IntRestore(intSave);
|
|
|
|
|
|
return cpup;
|
|
|
}
|
|
|
|
|
|
//<2F><><EFBFBD>ڻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷCPUʹ<55><CAB9><EFBFBD><EFBFBD>//
|
|
|
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_AllCpuUsage(UINT16 maxNum, CPUP_INFO_S *cpupInfo, UINT32 mode, UINT16 flag)
|
|
|
{
|
|
|
UINT16 loop;
|
|
|
UINT16 pos;
|
|
|
UINT16 prePos;
|
|
|
UINT32 intSave;
|
|
|
UINT64 cpuCycleAll;
|
|
|
UINT64 cpuCycleCurTask;
|
|
|
UINT16 numTmpMax = maxNum;
|
|
|
UINT16 numTmpMin = 0;
|
|
|
UINT16 numMax = g_cpupTaskMaxNum;
|
|
|
|
|
|
if (g_cpupInitFlg == 0) {
|
|
|
return LOS_ERRNO_CPUP_NO_INIT;
|
|
|
}
|
|
|
|
|
|
if (cpupInfo == NULL) { //<2F><><EFBFBD>鴫<EFBFBD><E9B4AB><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>cpupInfo<66>Ƿ<EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
return LOS_ERRNO_CPUP_TASK_PTR_NULL;
|
|
|
}
|
|
|
|
|
|
if (maxNum == 0) { //<2F><><EFBFBD>鴫<EFBFBD><E9B4AB><EFBFBD><EFBFBD>maxNum<75>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
return LOS_ERRNO_CPUP_MAXNUM_INVALID;
|
|
|
}
|
|
|
|
|
|
#ifdef LOSCFG_CPUP_INCLUDE_IRQ //<2F><><EFBFBD><EFBFBD><EFBFBD>걻<EFBFBD><EAB1BB><EFBFBD><EFBFBD>//
|
|
|
if (flag == 0) {
|
|
|
numTmpMax += g_cpupTaskMaxNum;
|
|
|
numTmpMin += g_cpupTaskMaxNum;
|
|
|
numMax = g_cpupMaxNum;
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
if (numTmpMax > numMax) {
|
|
|
numTmpMax = numMax;
|
|
|
}
|
|
|
|
|
|
intSave = LOS_IntLock();
|
|
|
OsTaskCycleEnd();
|
|
|
|
|
|
OsCpupGetPos(mode, &pos, &prePos); //<2F><>ȡ<EFBFBD><C8A1>ʷCPUʹ<55><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϣ//
|
|
|
cpuCycleAll = cpuHistoryTime[pos] - cpuHistoryTime[prePos]; //<2F><><EFBFBD><EFBFBD>CPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
|
|
|
/*ͨ<><CDA8>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPUʹ<55><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>㵱ǰ<E3B5B1><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
for (loop = numTmpMin; loop < numTmpMax; loop++) {
|
|
|
if ((g_cpup[loop].status & OS_TASK_STATUS_UNUSED) || (g_cpup[loop].status == 0)) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
cpuCycleCurTask = g_cpup[loop].historyTime[pos] - g_cpup[loop].historyTime[prePos];
|
|
|
cpupInfo[loop - numTmpMin].usStatus = g_cpup[loop].status;
|
|
|
|
|
|
if (cpuCycleAll) {
|
|
|
cpupInfo[loop - numTmpMin].uwUsage = (UINT32)((LOS_CPUP_PRECISION * cpuCycleCurTask) / cpuCycleAll);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
OsTaskCycleStart();
|
|
|
LOS_IntRestore(intSave);
|
|
|
|
|
|
return LOS_OK;
|
|
|
}
|
|
|
|
|
|
#ifdef LOSCFG_CPUP_INCLUDE_IRQ
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϿ<D0B6>ʼʱ<CABC><CAB1>¼<EFBFBD><C2BC>ǰ<EFBFBD><C7B0>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ͳ<EFBFBD>ƺͷ<C6BA><CDB7><EFBFBD>*/
|
|
|
LITE_OS_SEC_TEXT_MINOR VOID OsCpupIrqStart(VOID)
|
|
|
{
|
|
|
g_intTimeStart[ArchCurrCpuid()] = OsCpupGetCycle();
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
/*<2A><><EFBFBD>жϽ<D0B6><CFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ͳ<EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD>
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>жϺš<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>ۼ<EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>*/
|
|
|
LITE_OS_SEC_TEXT_MINOR VOID OsCpupIrqEnd(UINT32 intNum)
|
|
|
{
|
|
|
UINT64 intTimeEnd = OsCpupGetCycle(); //<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
UINT32 cpuId = ArchCurrCpuid(); //<2F><>ȡ<EFBFBD><C8A1>ǰCPU<50><55>ID//
|
|
|
|
|
|
if (g_cpupInitFlg == 0) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
g_cpup[g_taskMaxNum + intNum].id = intNum;
|
|
|
g_cpup[g_taskMaxNum + intNum].status = OS_TASK_STATUS_RUNNING; //<2F><><EFBFBD>ж<EFBFBD>״̬<D7B4><CCAC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
|
|
|
g_timeInIrqPerTskSwitch[cpuId] += (intTimeEnd - g_intTimeStart[cpuId]); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ʱ<EFBFBD><CAB1>//
|
|
|
g_cpup[g_taskMaxNum + intNum].allTime += (intTimeEnd - g_intTimeStart[cpuId]);
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
#endif /* LOSCFG_KERNEL_CPUP */
|
|
|
#ifdef __cplusplus
|
|
|
#if __cplusplus
|
|
|
}
|
|
|
#endif /* __cplusplus */
|
|
|
#endif /* __cplusplus */
|
|
|
|