当前位置:网站首页>Zephyr 学习笔记2,Scheduling

Zephyr 学习笔记2,Scheduling

2022-07-04 07:16:00 mayiQX

第二章:调度器(Scheduling)。

内核基于优先级的调度器允许应用程序的线程共享CPU。

线程从运行状态转换为挂起或等待状态,例如通过k_sem_take()或者k_sleep()。

线程转换到就绪状态,例如使用k_sem_give()或者k_thread_start()。

处理中断后返回线程上下文,当运行的线程调用k_yield()时。

当线程主动启动一个将自身转换为挂起或等待状态的操作时,它将休眠。

协作式

抢占式

Scheduler Locking

在执行关键操作时不希望被抢占的可抢占线程可以通过调用k_sched_lock().一旦关键操作完成,可抢占线程必须调用k_sched_unlock()以恢复其正常的可抢占状态。

Thread Sleeping

k_sleep()

k_wakeup()

线程可以调用k_busy_wait()来执行繁忙等待,该等待将其处理延迟指定的时间段,而不会将CPU放弃给另一个就绪线程。

CPU Idling

static k_sem my_sem;

void my_isr(void *unused)
{
    k_sem_give(&my_sem);
}

void main(void)
{
    k_sem_init(&my_sem, 0, 1);

    /* wait for semaphore from ISR, then do related work */

    for (;;) {

        /* wait for ISR to trigger work to perform */
        if (k_sem_take(&my_sem, K_NO_WAIT) == 0) {

            /* ... do processing */

        }

        /* put CPU to sleep to save power */
        k_cpu_idle();
    }
}

原网站

版权声明
本文为[mayiQX]所创,转载请带上原文链接,感谢
https://blog.csdn.net/liujie49992/article/details/125391764