OpenHarmony(3) —— SMP调度理解

本文探讨了OpenHarmony操作系统的SMP调度机制,重点分析了时间片的概念、定时器的使用以及不同平台下的定时器初始化。通过代码分析,解释了如何在多核环境中进行任务调度,特别提到了中断处理和硬件中断接口。文章还讨论了系统时钟频率的设定以及主核与从核的启动流程。
摘要由CSDN通过智能技术生成

代码仓:https://codechina.csdn.net/fu851523125/rtos

现代调度执行都是基于时间片(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<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值