实时操作系统(Real Time Operating System,简称RTOS)
Arduino任务执行流程:单线程执行任务
RTOS:可以同时执行所有Task,每个任务都有自己的循环
操作系统排行:LINUX WINDOWS FREERTOS
ESP32架构:ESP32-IDF的底层运行的就是freestos
默认core1:编写程序 core2:蓝牙、wifi功能
1GB(GigaByte)=1024MB
1MB(MegaByte)=1024KB
1KB(KiloByte)=1024B(字节)
1B(byte)字节=8Bit(binary digit)位
#include
void task1(void *pt)
{
pinMode(23, OUTPUT);
while (1)
{
digitalWrite(23, !digitalRead(23));
vTaskDelay(500);
}
}
void task2(void *pt)
{
pinMode(21, OUTPUT);
while (1)
{
digitalWrite(21, !digitalRead(21));
vTaskDelay(700);
}
}
void setup()
{
// 参数1:task; 参数2:任务备注; 参数3:内存分配空间
// 参数4:传递参数; 参数5:任务优先级; 参数6:对任务删除管理
xTaskCreate(task1, "Blink 23", 1024, NULL, 1, NULL);
xTaskCreate(task2, "Blink 21", 1024, NULL, 1, NULL);
}
void loop()
{
}
#include
byte led1 = 21;
byte led2 = 22;
byte led3 = 23;
void task1(void *pt) // 接收的为空指针
{
byte led_pin = *(byte *)pt; // 解耦
pinMode(led_pin, OUTPUT);
while (1)
{
digitalWrite(led_pin, !digitalRead(led_pin));
vTaskDelay(500);
}
}
void setup()
{
// 参数1:task; 参数2:任务备注; 参数3:内存分配空间
// 参数4:传递参数; 参数5:任务优先级; 参数6:对任务删除管理
xTaskCreate(task1, "Blink 21", 1024, (void *)&led1, 1, NULL);
}
void loop()
{
}
通过空指针类型传递结构体
#include
typedef struct
{
byte pin;
int delayTime;
} LEDFLASH;
LEDFLASH led1, led2;
void ledFlash(void *pt)
{
LEDFLASH *ptLedFlash = (LEDFLASH *)pt;
byte pin = ptLedFlash->pin;
int delayTime = ptLedFlash->delayTime;
pinMode(pin, OUTPUT);
while (1)
{
digitalWrite(pin, !digitalRead(pin));
vTaskDelay(delayTime);
}
}
void setup()
{
led1.pin = 23;
led1.delayTime = 1000;
led2.pin = 21;
led2.delayTime = 3000;
xTaskCreate(ledFlash, "***", 1024, (void *)&led1, 1, NULL);
xTaskCreate(ledFlash, "***", 1024, (void *)&led2, 1, NULL);
}
void loop() {}