1 FreeRTOS基础知识
1 FreeRTOS基础知识
1.1 什么是操作系统?
-
直接对硬件层面进行操作的开发叫做裸机开发。需要直接管理CPU、内存和IO资源。操作系统介于硬件和应用程序之间,通调度算法和内存管理算法来协调计算机资源给到不同程序。应用程序通过调用操作系统API接口来获得资源执行任务;
-
操作系统分为通用操作系统(Windows、Linux、MACOS等)和实时操作系统(RTOS)。
-
实时操作系统的定义是:任务(Task)、对应功能的线程(Tread)必须在给定的时间(Deadline)内完成;为了保证任务能在规定时间内完成。任务调度包括:a.对中断和内部异常的处理;
b.对安全相关的事件的处理;
c.任务调度机制; -
FreeROTS始于美国的 Richard Barry 于 2003 年发布;其主要特点是开源免费、可商用、应用范围广泛、支持多平台。
1.2 FreeRTOS实现原理
-
多任务处理。通过类时间片的形式,让多个任务实现并发(一段时间内,多个任务同时进行;“并行”指有多个处理器同时处理多个任务);
-
任务模式。FreeRTOS默认是固定优先级的抢占式调度策略,同等优先级任务进行时间片轮询调度;
抢占式调度:高优先级任务可以打断低优先级任务,先执行自己;
时间片轮询:相同任务优先级,每个任务执行一个时间片占用CPU等资源;
补充:当高优先级任务等待资源(延时或等待信号量时),调度器会选择其他高优先级任务执行; -
任务状态。FreeRTOS存在4种状态:
运行态:任务正在运行,处理器内核数量决定了任务数量,stm32只能有一个任务处于运行态;
就绪态:任务够随时执行,等待优先级任务执行完或等时间片;
阻塞态:任务在等待延时或外部事件;
挂起态:任务被“暂停”,调用vTaskSuspend()进入挂起状态,要用vTaskResume()才能解除进入就绪态;除了运行态,其他三种任务状态都有对应的任务状态列表,pxReadyTaskLists[x],就绪列表,x表示任务优先级;pxDelayTaskList,阻塞列表;xSuspendedTaskList,挂起列表;
转换关系如下图,只有就绪态可转变为运行态:
-
滴答计时Systick。FreeRTOS实时内核通过滴答计数变量测量时间。定时器中断(RTOS滴答中断)以严格的时间精度增加滴答数--允许实时内核以所选择的定时器中断频率的分辨率来测量时间。每次滴答数增加时,实时内核必须检查是否现在是解除阻塞或唤醒任务的时间。在滴答 ISR 期间唤醒或解除阻塞的任务的优先级可能高于被中断任务的优先级。相当于一个计时器,计量每个时间片。
-
上下文切换。每个任务都要有之间的任务堆栈,当任务挂起时,任务对应的处理器寄存器中的上下文要保存到任务堆栈中。当任务恢复时,要将上下文从其任务堆栈中恢复到相应的处理器寄存器中。上下文切换在PendSV的ISR中执行,PendSV为最低优先级中断。
触发PendSV异常产生切换的条件:a.RTOS滴答中断:处理就绪列表,判断是否要切换任务(抢占式、时间片)
b.任务执行完毕:主动调用任务切换函数进行强制切换。
-
空闲任务。RTOS调度器启动时,自动创建空间任务,保证始终有任务在运行。创建的空闲任务优先级为最低。同时在空闲任务中释放被删除的任务的内存。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战