FreeRTOS学习

FreeRTOS介绍

在平时在单片机上程序开发中,通常都是裸机开发,函数按设定好的顺序执行,很少遇到需要多个任务同时进行的情况,大部分都是单个函数的功能在很短的时间内就能完成,不太需要考虑同时运行的问题;但随着需要加入功能的增多,需求变的更加复杂,我们不得不面对这样的问题,这时我们可以使用操作系统来解决这个问题。

  • 前后台系统:应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为。前台程序通过中断来处理事件;后台程序则掌管整个嵌入式系统软、硬件资源的分配、管理以及任务的调度,是一个系统管理调度程序。

  • **实时操作系统(RTOS Real Time Operating System)**:

    实时操作系统是保证在一定时间限制内完成特定功能的操作系统。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可。

在实时操作系统中,我们可以把要实现的功能划分成多个任务,每个任务负责实现其中的一个部分,每个任务都是一个简单的程序,通常是一个死循环。

FreeRTOS使用了可剥夺内核来管理任务的运行状态,始终保证优先级最高的任务优运行。

  • 可剥夺型内核:最高优先级的任务一旦就绪,总能得到 CPU 的控制权。

    当一个运行着的任务使一个比它优先级高的任务进入了就绪态, 当前任务的 CPU 使用权就被剥夺了, 或者说被挂起了, 那个高优先级的任务立刻得到了 CPU 的控制权。 如果是中断服务子程序使一个高优先级的任务进入就绪态, 中断完成时, 中断了的任务被挂起, 优先级高的那个任务开始运行。

  • 不可剥夺型内核:不可剥夺型内核要求每个任务自我放弃 CPU 的所有权。

    不可剥夺型调度法也称作合作型多任务,各个任务彼此合作共享一个CPU。异步事件还是由中断服务来处理。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。 但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃 CPU 的使用权时, 那个高优先级的任务才能获得 CPU的使用权。

来到FreeRTOS官网可以查找相关的资料及系统的源码。

其中涉及到了一些内核的操作,可以参考《Cortex-m3权威指南》。

FreeRTOS在STM32F103上的移植