1.1 FreeRTOS是什么?
操作系统(operation system,简称OS):是管理计算机硬件和软件资源的计算机程序。
实时操作系统(Real Time Operating System,简称RTOS):是指当外界时间或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实施任务,并控制所有实时任务协调一致运行的操作系统。快速响应和高可靠性是主要特点。
FreeRTOS:是RTOS系统中的一种(UCOS,TRX,RT-Thread),FreeRTOS十分的小巧,可以在资源有限的微控制器中运行。
特点:
- FreeRTOS的内核支持抢占式,合作式和时间片调度
- 提供了一个用于低功耗的Tickless模式
- 系统的组件在创建时可以选择动态或静态的RAM,比如任务、消息队列、信号量、软件定时器等等
- 系统简单、小巧、易用,通常情况下内核占用4k-9k字节的空间
- 高可移植性,代码主要C语言编写
- 任务与任务、任务与中断之间可用使用任务通知、消息队列、二值信号量、数值型信号量、递归互斥信号量和互斥信号量进行通信和同步
1.2 操作系统怎么实现?
操作系统允许多个任务同时执行,而实际上,一个处理器核心在同一时间内只能运行一个任务。其中,通过任务调度器来决定同意时刻究竟运行了哪个任务。任务调度在各个任务之间切换非常快,给人造成同个时刻多个任务运行的错觉。
eg:一个人边和A聊天,边和B聊天。
结果:如果t1和t2的时间足够并切换足够快。A会觉得你一直和他在聊天,B会觉得你一直在和他下棋。
1.3 FreeRTOS基础知识
1.3.1 FreeRTOS任务特性
- 简单
- 没有使用限制
- 支持抢占
- 支持优先级
- 每个任务都拥有堆栈导致了 RAM 使用量增大。
- 如果使用抢占的话的必须仔细的考虑重入的问题
1.3.2 FreeRTOS四种任务状态
- 运行态:程序正在运行的任务
- 就绪态:所有东西都准备好了,就等待CPU来调用它
- 阻塞态:可能在等待锁或信号量,获取后就能进入就绪态
- 挂起态:离CPU执行最远
1.3.3 FreeRTOS任务优先级
范围:0 ~ configMAX_PRIORITIES-1
数字越大,优先级别越高
1.3.4 FreeRTOS任务实现
void vATaskFunction(void *pvParameters)
{
for(;;)
{
//任务执行程序
vTaskDelay();
}
}
1.3.5 任务控制块
定义:任务控制块(TCB_t):描述任务属性的数据结构
typedef struct tskTaskControlBlock
{
volatile StackType_t *pxTopOfStack;
#if ( portUSING_MPU_WRAPPERS == 1 )
xMPU_SETTINGS xMPUSettings;
#endif
ListItem_t xStateListItem;
ListItem_t xEventListItem;
UBaseType_t uxPriority;
………
} tskTCB;
typedef tskTCB TCB_t;
1.3.6 任务堆栈
定义:任务堆栈用来保存任务现场(CPU寄存器值),创建任务的时候需要指定任务堆栈,任务堆栈的变量类型为StackType_t
#define portSTACK_TYPE uint32_t
#define portBASE_TYPE long
typedef portSTACK_TYPE StackType_t;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)