在Arduino上运行嵌入式操作系统FreeRTOS

FreeRTOS可以提供任务管理,队列管理,中断管理,资源管理和内存管理等功能,由于占用资源少,它可以运行在Arduino UNO R3开发板上。

可以在https://github.com/greiman/FreeRTOS-Arduino上下载到它,将下载到的FreeRTOS-Arduino-master.zip解压,并将/FreeRTOS-Arduino-master/libraries文件夹下的内容全部复制到Arduino IDE安装目录下的libraries文件夹里就可以使用了。下面是它提供的frBlink示例:


// frBlink.ino
#include 《FreeRTOS_AVR.h》
 
const uint8_t LED_PIN = 13;
SemaphoreHandle_t sem;
  
 static void Thread1(void* arg) {
    while (1) {
      xSemaphoreTake(sem, portMAX_DELAY);
     digitalWrite(LED_PIN, LOW);
   }
 }
 
 static void Thread2(void* arg) {
   pinMode(LED_PIN, OUTPUT);
 
   while (1) {
     digitalWrite(LED_PIN, HIGH);
     vTaskDelay((200L * configTICK_RATE_HZ) / 1000L);
     xSemaphoreGive(sem);
     vTaskDelay((200L * configTICK_RATE_HZ) / 1000L);
   }
}

void setup() {
   portBASE_TYPE s1, s2;
 
   Serial.begin(9600);
  
   sem = xSemaphoreCreateCounting(1, 0);
   s1 = xTaskCreate(Thread1, NULL, configMINIMAL_STACK_SIZE, NULL, 2, NULL);
   s2 = xTaskCreate(Thread2, NULL, configMINIMAL_STACK_SIZE, NULL, 1, NULL);
   if (sem== NULL || s1 != pdPASS || s2 != pdPASS ) {
     Serial.println(F("Creation problem"));
     while(1);
   }
 
   vTaskStartScheduler();
   Serial.println(F("Insufficient RAM"));
   while(1);
}

void loop() {
}


这个示例效果与Blink示例相同,它演示了FreeRTOS的任务创建,信号量以及任务睡眠等功能。

  除了6个基本示例外,FreeRTOSBook文件夹下提供了额外的16个示例;由于篇幅关系,请大家参阅这22个示例或其他关于FreeRTOS的书籍。


原文:https://www.cnblogs.com/lets-blu/p/7541766.html


- 本文内容来自网络,如有侵权,请联系本站处理。

2022-05   阅读(692)   评论(0)
 标签: 创客 Arduino FreeRTOS

涨知识
二进制

二进制(binary),发现者莱布尼茨,是在数学和数字电路中以2为基数的记数系统,是以2为基数代表系统的二进位制。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示 。

评论:
相关文章
ESP32 FreeRTOS 双核使用

ESP32系列(包括ESP32-S3)搭载Xtensa双核处理器,默认情况下Arduino框架仅使用单核运行用户代码,通过多核编程,可以充分利用硬件资源来提升系统响应和性能。


理解 MSBFIRST(最高有效位)和 LSBFIRST(最低有效位)

在本文中,先解释 MSB(最高有效位)和 LSB(最低有效位)的概念,以及 MSBFIRST 和 LSBFIRST。然后展示了 MSBFIRST 和 LSBFIRST 的使用如何影响移位寄存器的输出。


Arduino 和 TB6612FNG 驱动直流电机

TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速与方向,输入电压在3V~12V,因此在集成化、小型化的电机控制系统中,它可以作为理想的电机驱动器件。


Arduino-ESP32 Preferences库使用详解

Arduino-ESP32项目提供的Preferences库是一个专为ESP32设计的非易失性存储解决方案,它替代了传统的Arduino EEPROM库,提供了更强大、更可靠的数据存储功能。


Arduino Serial 接收数字

在Arduino中,通过串行端口接收数字通常涉及使用Serial.read()、Serial.readString()、Serial.parseInt()等方法。


ESP32 FreeRTOS的常用API

ESP32 FreeRTOS的常用API



Arduino 随机数

要生成随机数,可以使用Arduino随机数函数random()。


Arduino 字符串用法汇总

本文收集整理在Arduino环境下字符串的相关用法,供参考。


ESP32在Arduino中的GPIO模式

ESP32在Arduino中的GPIO模式。

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。