AVR開發 Arduino方法(七) 嵌入式操做系統FreeRTOS

  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

相關文章
相關標籤/搜索