FreeRTOS学习笔记
FreeRTOS
来源:同济大学SuperPower战队电控组培训课程
中断
定义
单片机处理程序运行中出现的“紧急事件”的整个过程。
程序运行过程中,系统外部、系统内部或者现行程序本身若出现紧急事件,单片机立即中止线性程序的运行,自动转入相应的处理程序,待处理完后,再返回原来的程序运行,这整个过程称为程序中断。
每一种中断都有对应的中断函数,当中断发生时,程序会自动跳转到处理函数处运行,而不需要人为进行调用

优先级
优先级分为抢占优先级和响应优先级,抢占优先级高的无论是否有任务再执行都会先进入(插队能力),而响应优先级是排在未执行任务的前面(排队的先后)
FreeRTOS任务调度
核心机制
-
优先级调度
高优先级如果就绪,会直接抢占CPU,正在运行的低优先级任务挂起
-
FirstComeFirstServe
与FIFO队列处理方式同理,同优先级任务,按就绪的先后顺序,先就绪的先执行
-
时间片轮询
如果有两个相同优先级任务,其中一直没有被抢占,运行时间达到一个时间片主动让出CPU
FreeeRTOS的编程方法
vTaskDelay函数
任务调用该函数后,被剥夺CPU使用权,进入阻塞状态,直到延时结束,任务重新获取CPU使用权后才可以继续运行,延时从函数调用开始计算。
如果执行任务过程中发生中断,那么任务的执行周期就会变长,故 vTaskDelay 是相对延时函数,不能精确周期性执行任务。

HAL_Delay() 与 vTaskDelay() 的区别
-
HAL_Delay()
使用系统始终来进行演示,并且在延时期间会阻塞整个处理器,也就是说,它会使处理器暂时停止执行其他任务和代码。
-
vTaskDelay()
vTaskDelay函数允许任务挂起一段时间,然后由操作系统调度器在指定的任务后重新运行该任务。在多任务情况下,使用vTaskDelay可以更好地利用系统资源,避免空闲时间的浪费。

配置FreeRTOS
在freeRTOS中找到右下角的add选项,选择优先级,分配栈空间,执行任务的函数名


浙公网安备 33010602011771号