ESP32学习笔记(4)——FreeRTOS
1、有实时操作系统(RTOS)和无实时操作系统的区别:无实时操作系统:任务顺序执行,无优先级一说,只要有一个任务阻塞,就无法继续。有实时操作系统:多任务并行执行,当任务需要进行等待操作时,阻塞时任务调度器会寻找可执行的任务执行。任务运行时间片:基本单位是Tick,即系统时间节拍,ESP-IDF中,一个tick是1ms。
1、有实时操作系统(RTOS)和无实时操作系统的区别:
无实时操作系统:任务顺序执行,无优先级一说,只要有一个任务阻塞,就无法继续。
有实时操作系统:多任务并行执行,当任务需要进行等待操作时,阻塞时任务调度器会寻找可执行的任务执行。
任务运行时间片:基本单位是Tick,即系统时间节拍,ESP-IDF中,一个tick是1ms
任务的四种状态:

esp-idf中的任务创建
为了适应ESP32双核的特点,乐鑫官方自己实现了一个函数,区别于freertos原生的xtaskcreate

简单的延时函数

vTaskToDelay()是一个简单的延时函数,在延时结束后不一定立刻执行该任务,具体要看任务调度器的调度。
vTaskDelayUntil是精确延时,在延时结束后立刻接触阻塞。
任务间同步

常见同步方式
1、队列
队列是一种常见的简单数据结构,采用先进先出原则,主要用于不同任务间的数据传输。
一般的使用方法就是一个任务向队列写数据,另一个任务从队列中读数据

在中断中进行写队列操作要用ISR后缀的接口,若pdTRUE则任务结束后需要手动调用任务调度函数。
2、信号量
信号量有二值信号量,计数信号量,互斥锁三种。
二值信号量即信号量只有1个
计数信号量,信号量可以有多个
互斥锁与二值信号量类似,但实现了优先级继承();

3、事件组

事件组就是一组事件标志位,其作用与信号量类似

直达任务通知是直接发送至任务的事件,无需通过中间量,如队列等。
原生FreeRTOS与ESP-IDF中FreeRTOS的区别
FreeRTOS是个操作系统内核,与Linux不同。
Linux支持多用户,多任务,多线程操作,具备强大的文件系统,网络协议栈和大量应用程序支持。
FreeRTOS主要关注任务调度,内存管理、中断处理。
在ESP-IDF中

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)