Arduino 使用 FreeRTOS 编程

发布于 2023-10-15 14:36:48 字数 1436 浏览 34 评论 0

FreeRTOS 可以说是目前最流行的嵌入式实时系统,亚马逊, Azure, 以及 阿里云的物联网操作系统都是基于它进行定制开发的,FreeRTOS 的移植性也是非常好,支持市面上大多数的芯片,比如 ESP8266, ESP32, 甚至是 Arduino 的 AVR 芯片。

Arduino 默认是无操作系统编程的,主体包含 setuploop 两个函数,所有的逻辑都在单个 loop 中执行,他是顺序执行的,如果在复杂的程序中, 包含许多的任务,那么这种顺序执行的逻辑来调度任务会比较麻烦。

这时候 FreeRTOS 的优势就体现出来了,在 Arduino 中只需要在库中搜索 freertos 就能够找到对应的库,安装即可。

代码示例:

#include <Arduino_FreeRTOS.h>

void LedTask(void *pvParams);
void PrintTask(void *pvParams);


void setup() {
  Serial.begin(9600);
  
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB, on LEONARDO, MICRO, YUN, and other 32u4 based boards.
  }
  
  // Now set up two tasks to run independently.
  xTaskCreate(LedTask, "Led", 128, NULL, 2, NULL);
  xTaskCreate(PrintTask, "Print", 128, NULL, 1, NULL);

}

void loop() {
  // Empty. Things are done in Tasks.
}

void LedTask(void *pvParams)
{
  pinMode(LED_BUILTIN, OUTPUT);
  for (;;) {
    digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
    vTaskDelay( 1000 / portTICK_PERIOD_MS ); // wait for one second
    digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
    vTaskDelay( 1000 / portTICK_PERIOD_MS ); // wait for one second
  }
}


void PrintTask(void *pvParams)
{
  for(;;) {
    Serial.println("----->> haha <<<------");
    vTaskDelay( 3000 / portTICK_PERIOD_MS );
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

徒留西风

暂无简介

文章
评论
28 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文