Ardiuno ESP32 实现多线程

需要创建三个ino 文件 主文件main.ino 线程1:task1.ino ,线程2:task2.ino ,估计是一个线程一个ino 文件 目前没有测试

----------------------------------------------------------------main.ino 文件

#include <TridentTD_EasyFreeRTOS32.h> //Ardiuno.ide 有这个库,直接加载调用 、、

//查询这个EasyFreeRTOS32 库

EasyFreeRTOS32 task1, task2;          // 线程文件链接

void myblink(void*), myprint(void*); 

void setup() {

  Serial.begin(115200);

  Serial.println();

  task1.start(myblink);  //启动第一个线程,激活myblink

  task2.start(myprint);  //启动第二个线程,激活myprint

}

void loop() {}  // 不再需要它,但它是可用的。

---------------------------------------------------------------- task1.ino

void myblink(void*){          //  task1

  VOID SETUP(){               //  

    Serial.println("Hello Blink Task");  

    pinMode(18,OUTPUT);

  }

  VOID LOOP() {               //

    digitalWrite(18,HIGH);

    DELAY(1000);              //

    digitalWrite(18,LOW);

    DELAY(1000);

  }

}

---------------------------------------------------------------- task2.ino

void myprint(void*){      

  //----仅供参考的区域

  VOID SETUP(){               //  但是用setup()大写 区别原来的

    Serial.println("Hello myprint Task");  

    pinMode(19,OUTPUT);

  }

  VOID LOOP() {               // เหมือน loop() 大写

    digitalWrite(19,HIGH);

    DELAY(700);              // เหมือน delay(..) 大写替代原来的

    digitalWrite(19,LOW);

    DELAY(700);

  }

}

### Arduino ESP32 实现多线程编程 #### 方法概述 在Arduino和ESP32-S3平台上实现多线程主要依赖于FreeRTOS(Free Real-Time Operating System),该操作系统内置在ESP32-S3芯片中,从而简化了多线程或多任务处理的开发过程[^1]。 #### 创建任务实例 为了展示如何创建并运行多个并发的任务,在下面提供了一个简单的例子。此示例展示了两个不同的任务:一个用于控制LED灯的状态变化,另一个则简单打印信息到串口监视器。 ```cpp #include "freertos/FreeRTOS.h" #include "freertos/task.h" // 定义引脚编号 #define LED_PIN 23 void TaskBlink(void *pvParameters) { pinMode(LED_PIN, OUTPUT); while (true) { digitalWrite(LED_PIN, !digitalRead(LED_PIN)); vTaskDelay(pdMS_TO_TICKS(1000)); // 使用宏定义转换毫秒至滴答数 } } void TaskPrint(void *pvParameters) { while(true){ Serial.println("This is a message from the printing task."); vTaskDelay(pdMS_TO_TICKS(500)); } } void setup() { Serial.begin(115200); // 创建任务blink xTaskCreate(TaskBlink, "BLINK", // 名字 1000, // 堆栈大小 NULL, // 参数传递给任务函数 1, // 优先级 NULL // 返回句柄指针 ); // 创建任务print xTaskCreate(TaskPrint, "PRINT", 1000, NULL, 1, NULL ); } void loop() {} ``` 上述代码片段实现了两个独立执行的任务——`TaskBlink`负责每隔一秒切换一次连接到GPIO23上的LED状态;而`TaskPrint`则是周期性地向串行端口发送字符串消息[^2]。 #### 配置与资源管理 当涉及到更复杂的项目时,除了基本的任务创建外,还需要考虑其他组件如消息队列、信号量、互斥锁以及事件组来协调不同任务间的通信和同步操作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kisd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值