FreeRTOS笔记(三)调度机制

本文介绍了FreeRTOS的调度机制,包括抢占与合作模式、时间片轮转、优先级设置以及同步与互斥。在抢占式模式下,高优先级任务可以抢占低优先级任务;时间片轮转使得同等优先级的任务轮流执行;同步与互斥则涉及到临界资源的管理,如任务通知、队列等。FreeRTOSConfig.h配置文件决定了调度器的行为。

在单处理系统中,任何时间里只能有一个任务处于运行状态。 非运行状态的任务,它处于这 3 中状态之一:阻塞(Blocked)、暂停(Suspended)、就绪(Ready)。就绪态的任务,可以被调度器挑选出来切换为运行状态,调度器永远都是挑选最高优先级的就绪态任务并让它进入运行状态。

阻塞状态的任务,它在等待"事件",当事件发生时任务就会进入就绪状态。事件分为两类:时间相关的事件、同步事件。所谓时间相关的事件,就是设置超时时间:在指定时间内阻塞,时间到了就进入就绪状态。

使用时间相关的事件,可以实现周期性的功能、可以实现超时功能。同步事件就是:某个任务在等待某些信息,别的任务或者中断服务程序会给它发送信息。

同步事件发起:process_post_synch(&test3_process, temp_event_s, NULL); //同步事件发生,理解就是:当程序运行至此函数时,temp_event_s事件发出,会立即去执行test3_process等待事件下面的函数,就是抢占了优先级提前执行.

异步事件发起:process_post(&test3_process, temp_event_3, NULL); //事件temp_event_3发出,会等待其他进程执行完毕,将test3_process进程设置就绪态,随后按优先级先后执行.

怎么"发送信息"?方法很多,有:任务通知(task notification)、队列 (queue)、事件组(event group)、信号量(semaphoe)、互斥量(mutex)等。这些方法用来发送同步信息,比如表示某个外设得到了数据。

调度器(scheduler)简单来说是一个决定哪个任务应该执行的算法代码。在FreeRTOS中采用了round-robin的调度算法,包含抢占式(preemptive)和合作式<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值