1.FreeRTOS简介及多任务点灯

实时操作系统(Real Time Operating System,简称RTOS)

Arduino任务执行流程:单线程执行任务

1.FreeRTOS简介及多任务点灯_第1张图片

 RTOS:可以同时执行所有Task,每个任务都有自己的循环

1.FreeRTOS简介及多任务点灯_第2张图片

 操作系统排行:LINUX        WINDOWS        FREERTOS

ESP32架构:ESP32-IDF的底层运行的就是freestos

1.FreeRTOS简介及多任务点灯_第3张图片

默认core1:编写程序        core2:蓝牙、wifi功能

多任务点灯

1GB(GigaByte)=1024MB

1MB(MegaByte)=1024KB

1KB(KiloByte)=1024B(字节)

1B(byte)字节=8Bit(binary digit)位

1.FreeRTOS简介及多任务点灯_第4张图片

#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()
{
}

 通过空指针类型给task传递单个参数

#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() {}

你可能感兴趣的:(ESP32,FreeRTOS,FREERTOS)