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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM