• AVR开发 Arduino方法(七) 嵌入式操作系统FreeRTOS


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

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

     

     1 // frBlink.ino
     2 #include <FreeRTOS_AVR.h>
     3 
     4 const uint8_t LED_PIN = 13;
     5 SemaphoreHandle_t sem;
     6 
     7 static void Thread1(void* arg) {
     8   while (1) {
     9     xSemaphoreTake(sem, portMAX_DELAY);
    10     digitalWrite(LED_PIN, LOW);
    11   }
    12 }
    13 
    14 static void Thread2(void* arg) {
    15   pinMode(LED_PIN, OUTPUT);
    16 
    17   while (1) {
    18     digitalWrite(LED_PIN, HIGH);
    19     vTaskDelay((200L * configTICK_RATE_HZ) / 1000L);
    20     xSemaphoreGive(sem);
    21     vTaskDelay((200L * configTICK_RATE_HZ) / 1000L);
    22   }
    23 }
    24 
    25 void setup() {
    26   portBASE_TYPE s1, s2;
    27 
    28   Serial.begin(9600);
    29   
    30   sem = xSemaphoreCreateCounting(1, 0);
    31   s1 = xTaskCreate(Thread1, NULL, configMINIMAL_STACK_SIZE, NULL, 2, NULL);
    32   s2 = xTaskCreate(Thread2, NULL, configMINIMAL_STACK_SIZE, NULL, 1, NULL);
    33   if (sem== NULL || s1 != pdPASS || s2 != pdPASS ) {
    34     Serial.println(F("Creation problem"));
    35     while(1);
    36   }
    37 
    38   vTaskStartScheduler();
    39   Serial.println(F("Insufficient RAM"));
    40   while(1);
    41 }
    42 
    43 void loop() {
    44 }

     

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

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

     

  • 相关阅读:
    LINUX按键驱动程序
    s3c2440地址分配
    Linux内核代码
    C语言初始化
    tftp协议
    ARM工作模式
    Bootstrap3隐藏滑动侧边栏菜单代码特效
    javascript 中slice,substr,substring方法的对比
    vue 的简述
    鼠标移动出自己想要的效果
  • 原文地址:https://www.cnblogs.com/lets-blu/p/7541766.html
Copyright © 2020-2023  润新知