IssueNo:#I3IK07
Description:liteos_m scheduling optimization and low power design. Sig:kernel Feature or Bugfix:Feature Binary Source:No Change-Id: I5b692a503ce6128626eec8f9a37742d7caa1fea9
This commit is contained in:
parent
f685eeb97d
commit
cd30e62998
|
@ -45,9 +45,7 @@ extern "C" {
|
||||||
extern UINT32 g_taskScheduled;
|
extern UINT32 g_taskScheduled;
|
||||||
typedef BOOL (*SchedScan)(VOID);
|
typedef BOOL (*SchedScan)(VOID);
|
||||||
|
|
||||||
VOID OsSchedUpdateTimeBase(VOID);
|
VOID OsSchedUpdateSchedTimeBase(VOID);
|
||||||
|
|
||||||
UINT64 OsGetCurrTimeCycle(VOID);
|
|
||||||
|
|
||||||
UINT64 OsGetCurrSchedTimeCycle(VOID);
|
UINT64 OsGetCurrSchedTimeCycle(VOID);
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,6 @@ STATIC UINT32 g_queueBitmap;
|
||||||
|
|
||||||
STATIC UINT32 g_schedResponseID = 0;
|
STATIC UINT32 g_schedResponseID = 0;
|
||||||
STATIC UINT64 g_schedResponseTime = OS_SCHED_MAX_RESPONSE_TIME;
|
STATIC UINT64 g_schedResponseTime = OS_SCHED_MAX_RESPONSE_TIME;
|
||||||
STATIC UINT64 g_schedStartTime;
|
|
||||||
#if (LOSCFG_BASE_CORE_SCHED_SLEEP == 1)
|
#if (LOSCFG_BASE_CORE_SCHED_SLEEP == 1)
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SchedSleepInit init;
|
SchedSleepInit init;
|
||||||
|
@ -78,7 +77,7 @@ STATIC SchedSleep g_schedSleepCB;
|
||||||
#if (LOSCFG_BASE_CORE_TICK_WTIMER == 0)
|
#if (LOSCFG_BASE_CORE_TICK_WTIMER == 0)
|
||||||
STATIC UINT64 g_schedTimerBase;
|
STATIC UINT64 g_schedTimerBase;
|
||||||
|
|
||||||
VOID OsSchedUpdateTimeBase(VOID)
|
VOID OsSchedUpdateSchedTimeBase(VOID)
|
||||||
{
|
{
|
||||||
UINT32 period = 0;
|
UINT32 period = 0;
|
||||||
|
|
||||||
|
@ -87,8 +86,12 @@ VOID OsSchedUpdateTimeBase(VOID)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
UINT64 OsGetCurrTimeCycle(VOID)
|
UINT64 OsGetCurrSchedTimeCycle(VOID)
|
||||||
{
|
{
|
||||||
|
if (!g_taskScheduled) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#if (LOSCFG_BASE_CORE_TICK_WTIMER == 1)
|
#if (LOSCFG_BASE_CORE_TICK_WTIMER == 1)
|
||||||
return HalGetTickCycle(NULL);
|
return HalGetTickCycle(NULL);
|
||||||
#else
|
#else
|
||||||
|
@ -111,15 +114,6 @@ UINT64 OsGetCurrTimeCycle(VOID)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT64 OsGetCurrSchedTimeCycle(VOID)
|
|
||||||
{
|
|
||||||
if (!g_taskScheduled) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return OsGetCurrTimeCycle() - g_schedStartTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
STATIC INLINE VOID OsTimeSliceUpdate(LosTaskCB *taskCB, UINT64 currTime)
|
STATIC INLINE VOID OsTimeSliceUpdate(LosTaskCB *taskCB, UINT64 currTime)
|
||||||
{
|
{
|
||||||
LOS_ASSERT(currTime >= taskCB->startTime);
|
LOS_ASSERT(currTime >= taskCB->startTime);
|
||||||
|
@ -177,7 +171,7 @@ STATIC INLINE VOID OsSchedSetNextExpireTime(UINT64 startTime, UINT32 responseID,
|
||||||
|
|
||||||
g_schedResponseTime = nextExpireTime;
|
g_schedResponseTime = nextExpireTime;
|
||||||
#if (LOSCFG_BASE_CORE_TICK_WTIMER == 0)
|
#if (LOSCFG_BASE_CORE_TICK_WTIMER == 0)
|
||||||
g_schedTimerBase = OsGetCurrTimeCycle();
|
g_schedTimerBase = OsGetCurrSchedTimeCycle();
|
||||||
#endif
|
#endif
|
||||||
HalSysTickReload(nextResponseTime);
|
HalSysTickReload(nextResponseTime);
|
||||||
}
|
}
|
||||||
|
@ -459,7 +453,6 @@ VOID OsSchedStart(VOID)
|
||||||
OsSchedSetNextExpireTime(newTask->startTime, newTask->taskID, newTask->startTime + newTask->timeSlice);
|
OsSchedSetNextExpireTime(newTask->startTime, newTask->taskID, newTask->startTime + newTask->timeSlice);
|
||||||
|
|
||||||
PRINTK("Entering scheduler\n");
|
PRINTK("Entering scheduler\n");
|
||||||
g_schedStartTime = OsGetCurrTimeCycle();
|
|
||||||
g_taskScheduled = 1;
|
g_taskScheduled = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -510,7 +503,6 @@ VOID LOS_SchedTickHandler(VOID)
|
||||||
|
|
||||||
UINT32 intSave = LOS_IntLock();
|
UINT32 intSave = LOS_IntLock();
|
||||||
|
|
||||||
if (g_taskScheduled) {
|
|
||||||
if (g_schedResponseID == OS_INVALID) {
|
if (g_schedResponseID == OS_INVALID) {
|
||||||
if (g_swtmrScan != NULL) {
|
if (g_swtmrScan != NULL) {
|
||||||
needSched = g_swtmrScan();
|
needSched = g_swtmrScan();
|
||||||
|
@ -520,16 +512,13 @@ VOID LOS_SchedTickHandler(VOID)
|
||||||
}
|
}
|
||||||
|
|
||||||
g_schedResponseTime = OS_SCHED_MAX_RESPONSE_TIME;
|
g_schedResponseTime = OS_SCHED_MAX_RESPONSE_TIME;
|
||||||
if (needSched && LOS_CHECK_SCHEDULE) {
|
if (g_taskScheduled && needSched && LOS_CHECK_SCHEDULE) {
|
||||||
HalTaskSchedule();
|
HalTaskSchedule();
|
||||||
} else {
|
} else {
|
||||||
currTime = OsGetCurrSchedTimeCycle();
|
currTime = OsGetCurrSchedTimeCycle();
|
||||||
OsTimeSliceUpdate(g_losTask.runTask, currTime);
|
OsTimeSliceUpdate(g_losTask.runTask, currTime);
|
||||||
OsSchedUpdateExpireTime(currTime);
|
OsSchedUpdateExpireTime(currTime);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
OsSchedUpdateExpireTime(OsGetCurrSchedTimeCycle());
|
|
||||||
}
|
|
||||||
|
|
||||||
LOS_IntRestore(intSave);
|
LOS_IntRestore(intSave);
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@ extern VOID platform_tick_handler(VOID);
|
||||||
LITE_OS_SEC_TEXT VOID OsTickHandler(VOID)
|
LITE_OS_SEC_TEXT VOID OsTickHandler(VOID)
|
||||||
{
|
{
|
||||||
#if (LOSCFG_BASE_CORE_TICK_WTIMER == 0)
|
#if (LOSCFG_BASE_CORE_TICK_WTIMER == 0)
|
||||||
OsSchedUpdateTimeBase();
|
OsSchedUpdateSchedTimeBase();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (LOSCFG_BASE_CORE_TICK_HW_TIME == 1)
|
#if (LOSCFG_BASE_CORE_TICK_HW_TIME == 1)
|
||||||
|
@ -78,7 +78,7 @@ Return : current tick
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
LITE_OS_SEC_TEXT_MINOR UINT64 LOS_TickCountGet(VOID)
|
LITE_OS_SEC_TEXT_MINOR UINT64 LOS_TickCountGet(VOID)
|
||||||
{
|
{
|
||||||
return OsGetCurrTimeCycle() / OS_CYCLE_PER_TICK;
|
return OsGetCurrSchedTimeCycle() / OS_CYCLE_PER_TICK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
Loading…
Reference in New Issue