【FreeRTOS浅尝01】ESP32上执行多任务
01 Why FreeRTOS?
02 基础代码
2.1 Task
2.1.1 创建Task
在ESP32上使用FreeRTOS很简单,只需要引入FreeRTOS 库即可。
Task 的基本结构是一个返回值为void,带一个 void* 指针的函数。
1 | void myTask(void *pt) { |
并使用以下语句,创建任务(类似于示例化):
1 | xTaskCreate(task1,"Blink 23",1024,NULL,1,NULL); |
可以使用以下语句,进行delay,从而调整loop的周期:
1 | vTaskDelay(1000); |
2.1.2 点灯代码示例
1 | void task1(void *pt) { |
2.1.3 补充
我们常用的大循环 setup() 和 loop() 也是一个Task。
1 | void setup(){ |
可以通过 xPortGetCoreID() 查看它运行在哪个核上
1 | void task(void *ptParam){ |
也可以通过 vTaskDelete(NULL); 在他执行后删除它,以释放资源
1 | void setup(){ |
2.2 Ticks
值得注意的是,在我们使用 vTaskDelay() 时,我们会自然地认为后面参数的单位是ms,其实不然。参数的单位是ticks,不是时间ms。不过幸运的是,在ESP32上的FreeRTOS中,默认情况下 1 Tick = 1 ms。因此,在代码迁移到别的单片机上时需要注意这一点。
如何查询一个Tick等于多少时间,使用以下代码
pdMS_TO_TICKSportTICK_PERIOD_MS
示例代码如下:
1 | vTaskDelay(pdMS_TO_TICKS(1000)); |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 咕咕评客!
评论



