006创建U8G2 Oled的FreeRtos任务
以下为作者本人关于esp32的FreeRtos学习笔记,供自己学习参考。
平台:Ubuntu 20.04 LTS + Arduino IDE
window平台上的代码完全一致,因为我自己电脑上的win11系统arduino编译速度过于缓慢(无法忍受(* ̄︿ ̄)),遂转到ubuntu。
-
U8G2 OLED修改成为FREERTOS TASK后无法显示的可能性
-
在setup中初始化oled时,是将setup任务指派到核心1,而
xTaskCreate();
会将oled显示任务任意分配给任意核心 -
解决方案:
- 使用xTaskCreatePinnedToCore手动指派任务到核心1
-
- SETUP任务完成使命后,使用vTaskDelete(NULL) 自宫 ;
-
#include <U8g2lib.h>
#include <Wire.h>
void oledTask(void * pvParam) {
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
u8g2.begin();
for (;;) {
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
u8g2.drawStr(15, 10, "LONELY BINARY"); // write something to the internal memory
u8g2.sendBuffer(); // transfer internal memory to the display
vTaskDelay(1000);
}
}
void setup() { //loopBack , Priority 1, Core 1
xTaskCreatePinnedToCore(oledTask, "OLED Task", 1024 * 8, NULL, 1, NULL, 1);
vTaskDelete(NULL);
}
void loop() {
}
笔记参考B站大佬 孤独的二进制 的视频教程ESP32 FreeRTOS