Arduino 使用 FreeRTOS 编程
FreeRTOS 可以说是目前最流行的嵌入式实时系统,亚马逊, Azure, 以及 阿里云的物联网操作系统都是基于它进行定制开发的,FreeRTOS 的移植性也是非常好,支持市面上大多数的芯片,比如 ESP8266, ESP32, 甚至是 Arduino 的 AVR 芯片。
Arduino 默认是无操作系统编程的,主体包含 setup
和 loop
两个函数,所有的逻辑都在单个 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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论