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的书籍。

 

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