赞
踩
现代调度执行都是基于时间片(Time Slice)概念的。
启动一个定时器,一个时间片时隙就是定时器的计数周期。
在kernel\liteos_a\kernel\base\core\los_timeslice.c中VOID OsTimesliceCheck(VOID),一个时间片过去后进行检测是否改变当前调度Task
OsTimesliceCheck()
<<=== OsTickHandler()
<<=== OsTickEntry()
VOID HalClockInit(VOID)
{
UINT32 ret;
g_sysClock = HalClockFreqRead();
ret = LOS_HwiCreate(OS_TICK_INT_NUM, MIN_INTERRUPT_PRIORITY, 0, OsTickEntry, 0);
if (ret != LOS_OK) {
PRINT_ERR("%s, %d create tick irq failed, ret:0x%x\n", __FUNCTION__, __LINE__, ret);
}
}
HalClockInit()
<<=== OsTickInit()
<<=== OsMain()
<<=== main()
LITE_OS_SEC_TEXT_INIT VOID HalClockStart(VOID)
{
HalIrqUnmask(OS_TICK_INT_NUM);
/* triggle the first tick */
TimerCtlWrite(0);
TimerTvalWrite(OS_CYCLE_PER_TICK);
TimerCtlWrite(1);
}
HalClockStart()
<<=== OsTickStart()
<<== OsStart()
<<=== main()
<<=== secondary_cpu_start()
这里HalClockInit()有三处,
1. platform\hw\hisoc\timer\timer.c (宏定义 STATIC_ASSERT(LOSCFG_KERNEL_SMP != YES, "hisoc timer does not suppot on SMP mode!");)
SMP是不使用这个
2. platform\hw\arm\timer\arm_private\arm_private_timer.c<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。