FreeRTOS简介
1. RTOS简介
RTOS全称为 Real Time Operation System,即实时操作系统。RTOS强调的是实时性,又分为硬实时和软实时。硬实时要求在规定的时间内必须完成操作,不允许超时;而软实时里对处理过程超时的要求则没有很严格。RTOS的核心就是任务调度

RTOS的多个工作流如下图示:

RTOS工作原理如下图示:

RTOS通用组件如下图示:

RTOS的特点:
- 更好的事件实时处理机制
- 更高效利用CPU资源
- 通用的任务管理框架
2. FreeRTOS介绍
FreeRTOS是RTOS的一种,尺寸非常小,可运行于微控制器上。微控制器是尺寸小,资源受限的处理器,它在单个芯片上包含了处理器本身、用于保存要执行的程序的只读存储器(ROM或Flash)、所执行程序需要的随机存取存储器(RAM),一般情况下程序直接从只读存储器执行
微控制器用于深度嵌入式应用,一般都有非常明确、专门的工作。尺寸的限制以及专用的终端应用等性质,令其很少能使用完整的RTOS实现。因此FreeRTOS仅为内核提供了实时调度功能、任务间通信、时序和同步原语。更准确地说,它是一个实时内核,或实时执行器。命令控制台界面、网络栈等额外的功能可作为附加组件

在实际使用FreeRTOS的时候我们需要根据自已的需求来配置FreeRTOS,不同架构的MCU在使用的时候配置也不同,下面介绍FreeRTOS配置文件详解
参数名称 |
参数说明 |
USE_PREEMPTION |
定义调度器模式 |
CPU_CLOCK_HZ |
定义CPU的主频 |
TICK_RATE_HZ |
定义系统时钟节拍数 |
MAX_PRIORITIES |
定义可供用户使用的最大优先级数 |
MINIMAL_STACK_SIZE |
定义空闲任务的栈空间大小 |
MAX_TASK_NAME_LEN |
定义任务名最大的字符数 |
USE_16_BIT_TICKS |
系统时钟节拍计数使用TickType_t数据类型定义 |
IDLE_SHOULD_YIELD |
用于使能与空闲任务同优先级的任务 |
参数名称 |
参数说明 |
USE_MUTEXES |
用于使能互斥锁 |
USE_RECURSIVE_MUTEXES |
用于使能递归互斥锁 |
USE_COUNTING_SEMAPHORES |
用于使能计数信号量 |
QUEUE_REGISTRY_SIZE |
用于设置可以注册的信号量和消息队列个数 |
USE_APPLICATION_TASK_TAG |
用于使能任务标记 |
ENABLE_BACKWARD_COMPATIBILITY |
用于使能新版本对老版本的兼容特性 |
USE_PORT_OPTIMISED_TASK_SELECTION |
用于优化优先级列表中药执行的最高优先级任务的算法 |
USE_TICKLESS_IDLE |
用于使能tickless低功耗模式 |
USE_TASK_NOTIFICATIONS |
使能任务间直接的消息传递,包括信号量、事件标志组和消息邮箱 |
参数名称 |
参数说明 |
MEMORY_ALLOCATION |
定义内存分配模式 |
TOTAL_HEAP_SIZE |
定义动态内存分配总长度 |
HEAP_NUMBER |
定义动态内存管理方式 |
参数名称 |
参数说明 |
GENERATE_RUN_TIME_STATS |
用于使能任务运行状态参数统计 |
USE_TRACE_FACILITY |
使能此配置将添加额外的结构体成员和函数 |
USE_STATS_FORMATTING_FUNCTIONS |
用户配置宏定义 configUSE_TRACE_FACILITY 和configUSE_STATS_FORMATTING_FUNCTIONS都为 1 的时候,将使能函数 vTaskList() 和 vTaskGetRunTimeStats(),如果两者中任何一个为 0,那么这两个函数都将被禁能 |
参数名称 |
参数说明 |
USE_TIMERS |
用于使能软件定时器 |
参数名称 |
参数说明 |
LIBRARY_LOWEST_INTERRUPT_PRIORITY |
用于配置 FreeRTOS 用到的 SysTick 中断和 PendSV 中断的优先级 |
LIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY |
定义了受 FreeRTOS 管理的最高优先级中断 |
参数名称 |
参数说明 |
vTaskPrioritySet |
设置任务优先级 |
uxTaskPriorityGet |
获取任务优先级 |
vTaskDelete |
任务删除 |
vTaskCleanUpResources |
清理任务资源 |
vTaskSuspend |
任务挂起 |
vTaskDelayUntil |
任务绝对延时 |
vTaskDelay |
任务延时 |
xTaskGetSchedulerState |
获取调度器状态 |
xTaskResumeFromISR |
在中断中恢复任务 |
xQueueGetMutexHolder |
获取互斥锁持有者 |
pcTaskGetTaskName |
获取任务名称 |
uxTaskGetStackHighWaterMark |
获取任务堆栈信息 |
xTaskGetCurrentTaskHandle |
获取当前任务句柄 |
eTaskGetState |
获取任务状态 |
xEventGroupSetBitFromISR |
在中断中设置事件标志组 |
xTimerPendFunctionCall |
定时器挂起后回调函数 |
xTaskAbortDelay |
终止任务延时 |
xTaskGetHandle |
获取任务句柄 |