### freeRTOS入门笔记
#### 一、FreeRTOS基础概念与术语
**FreeRTOS**(Free Real-Time Operating System)是一款开源的实时操作系统,适用于微控制器(MCU),特别适合嵌入式系统开发。FreeRTOS提供了丰富的功能,如任务管理、时间管理、任务间通信等。
#### 二、FreeRTOS中的时间管理
1. **时间片(Time Slice)**:FreeRTOS的时间单位,默认情况下设置为1毫秒。这是任务调度的基本单位。
- **trick**:即时间片的数量,默认设置为1毫秒。
2. **延时函数**:
- `vTaskDelay()` 和 `osDelay()`:这些函数用于实现任务间的延迟,使得任务能够按一定的时间间隔运行。
- 相对时间延时:基于当前时间计算延时,适用于大多数情况。
- 绝对时间延时:基于特定的绝对时间点进行延时,适用于需要精确时间控制的情况。
#### 三、任务状态
FreeRTOS中的任务状态包括:
1. **运行状态**:任务正在执行中。
2. **非运行状态**:包括以下子状态:
- **阻塞状态**:任务等待某个事件发生(例如信号量、互斥锁等)。
- **暂停状态**:任务被人为地暂停,不参与调度。
- **就绪状态**:任务已经准备好运行,但因为没有轮到它而暂时处于等待状态。
#### 四、任务优先级
1. **优先级定义**:每个任务都有一个优先级,FreeRTOS根据优先级高低来调度任务执行。
2. **优先级相同任务的调度原则**:如果两个任务优先级相同,则后创建的任务将优先执行。
#### 五、任务删除
1. **VTaskDelete()**:用于删除任务,通常用于不再需要的任务,可以有效地回收资源。
#### 六、队列管理
1. **静态队列创建**:一般不推荐使用动态内存分配来创建队列,而是建议使用静态队列创建。
- `xQueueCreate()`:用于创建队列,创建时队列默认为空。
- **32位数据队列**:支持最大32位的数据类型,高八位通常保留不用。
#### 七、信号量与事件组
1. **信号量管理**:
- **二值信号量**:通常用于同步多个任务。
- `BaseType_t xSemaphoreTakeISR()`:获取信号量的中断安全版本。
- **计数器**:每次获取信号量时,计数器减1;释放信号量时计数器加1。
2. **事件组管理**:
- 事件组提供了一种高效的方式来传递多个事件信息。
- **32位事件组**:支持最多32个不同的事件标志。
- **24位普通事件组**:支持最多24个不同的事件标志。
- **事件通知**:
- 如果参数为`pdTRUE`,则将通知值清零。
- 如果参数为`pdFALSE`,则根据通知值与1的比较结果决定是否减少通知值。
#### 八、任务通知
1. **任务通知**:用于向任务发送简单消息,可以是32位的事件组或整数值。
- **输入参数**:可以指定等待时间和通知值。
- **等待时间**:指定等待通知到达的最大时间,超过该时间则自动返回。
- **返回值**:表示未改变的通知值。
#### 九、STM32CubeMX与FreeRTOS集成
1. **STM32CubeMX**:是STMicroelectronics提供的一款图形化工具,用于初始化STM32微控制器配置,包括时钟、GPIO、外设等。
2. **宏定义**:在STM32CubeMX/FreeRTOS项目中,可以通过宏定义来启用或禁用某些特性。
- **宏定义**:例如,在FreeRTOS配置文件中可以开启或关闭特定的功能,比如任务延时等。
#### 十、总结
通过上述介绍可以看出,FreeRTOS为嵌入式开发者提供了非常强大的功能和支持,特别是对于任务管理、时间管理和任务间通信等方面。掌握FreeRTOS的基本概念和常用API是进行嵌入式系统开发的重要基础。希望本文档能够帮助初学者更好地理解FreeRTOS的核心概念,并能够在实际项目中熟练应用这些技术。
1