RTOS
一、定义与特点
最近两年RTOS操作系统在嵌入式领域越来越流行和受欢迎了,身边也有很多人在RTOS上构建项目。所以很有必要,来了解一下RTOS操作系统到底什么,这个操作系统有哪些特点,以及我们如何使用它。
RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性。实时操作系统又分为硬实时和软实时。硬实时要求在规定的时间内必须完成操作,硬实时系统不允许超时,在软实时里面处理过程超时的后果就没有那么严格。
在实时操作系统中,我们可以把要实现的功能划分为多个任务,每个任务负责实现其中的一部分,每个任务都是一个很简单的程序,通常是一个死循环。
但是我们应该注意的是RTOS本身并不是代表某一个操作系统,而是代表着某一类操作系统。常见的RTOS操作系统:FreeRTOS,UCOS,RTX,RT-Thread,DJYOS等。
RTOS操作系统的核心内容在于:实时内核。
RTOS CPU的工作原理是:
下面以FreeRTOS为例来讲一下RTOS先关的特点。
二、FreeRTOS
FreeRTOS是一个可裁剪、可剥夺型的多任务内核,而且没有任务数限制。FreeRTOS提供了实时操作系统所需的所有功能,包括资源管理、同步、任务通信等。
FreeRTOS特点
- FreeROTS 开源
- FreeRTOS 免费
- FreeRTOS 是很多第三方组件钦定的系统!
- FreeRTOS下载:http://www.freertos.org/
FreeRTOS特点
FreeRTOS 任务特点
- 简单
- 没有使用限制
- 支持抢占
- 支持优先级
- 每个任务都拥有堆栈导致了RAM使用量增大
FreeRTOS 任务状态
- 运行态
- 就绪态
- 阻塞态
- 挂起态
FreeRTOS 任务优先级
任务优先级决定了任务的执行优先级别,在FreeRTOS中任务优先级可选范围为:0 ~ configMAX_PRIORITIES-1,数字越大,优先级越高!
FreeRTOS 任务创建
头文件:task.h
portBASE_TYPE xTaskCreate(pdTASK_CODE pvTaskCode,
const portCHAR* onstpcNane,
unsigned portSHORT usStackDepth,
void *pvParameters,
unsigned portBASE_TYPE uxPriority,
xTaskHandle* pvCreatedTask);
// pdTASK_CODE pvTaskCode 指向任务的实现函数的指针,效果上仅仅是函数名 // const portCHAR* onstpcNane 具有描述性的任务名。FreeRTOS不会使用它 // unsigned portSHORT usStackDepth 指定任务堆栈的大小
// void *pvParameters 指针用于作为一个参数传向创建的任务
// unsigned portBASE_TYPE uxPriority 任务运行时的优先级
// xTaskHandle* pvCreatedTask 用于传递任务的句柄,可以引用从而对任务进行其他操作
FreeRTOS 任务延时
头文件:task.h
void vTaskDelay (portTickType xTicksToDelay);
// portTickType xTicksToDelay 时间数量,调用任务应该锁住的时间片周期
void vTaskDelayUntil (portTickType *pxPreviousWakeTime,
portTickType xTimeIncrement);
//portTickType *pxPreviousWakeTime, 指定一个变量来掌握任务最后开启的时间, 第一次使用时必须使用当前时间来初始化, 在 vTaskDelayUntil 中,这个变量是自动修改的
//portTickType xTimeIncrement 循环周期时间
RreeRTOS 任务删除
头文件:task.h
void vTaskDelete (xTaskHandlepxTask);
//xTaskHandlepxTask 处理要删除的任务,传递NULL将删除自己