FreeRTOS能夠提供任務管理,隊列管理,中斷管理,資源管理和內存管理等功能,因爲佔用資源少,它能夠運行在Arduino UNO R3開發板上。git
你能夠在https://github.com/greiman/FreeRTOS-Arduino上下載到它,將下載到的FreeRTOS-Arduino-master.zip解壓,並將/FreeRTOS-Arduino-master/libraries文件夾下的內容所有複製到Arduino IDE安裝目錄下的libraries文件夾裏就可使用了。下面是它提供的frBlink示例:github
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的任務建立,信號量以及任務睡眠等功能。oop
除了6個基本示例外,FreeRTOSBook文件夾下提供了額外的16個示例;因爲篇幅關係,請你們參閱這22個示例或其餘關於FreeRTOS的書籍。ui