☛ 功能说明
利用 Arduino UNO 开发板、 FreeRTOS 函式库及 semphr 函式库,使用互斥量的机制控制两个 Task ( Task1、Task2 ) ,并透过监控视窗来观察 Task1、Task2 的运作状况 ( 如下图所示 )。
☛ 使用材料
Arduino UNO R3 开发板 × 1。
☛ 电路图及面包板接线图
略
☛ 程式码
#include <Arduino_FreeRTOS.h> //引用 FreeRTOS 函式库 #include <semphr.h> //引用 semphr.h 互斥量函式库 SemaphoreHandle_t mutex_v; //宣告一个 SemaphoreHandle_t 类型的变量来存储互斥量的值 void setup() { Serial.begin(9600); //设定传输埠速率为 9600bps mutex_v = xSemaphoreCreateMutex(); //创建一个互斥量 mutex_v if (mutex_v == NULL) { Serial.println("Mutex can not be created"); } xTaskCreate(Task1, "Task 1", 128, NULL, 1, NULL); //建立 Task1 任务 xTaskCreate(Task2, "Task 2", 128, NULL, 1, NULL); //建立 Task2 任务 } void loop() { } void Task1(void *pvParameters) //Task1 任务 { while(1) { xSemaphoreTake(mutex_v, portMAX_DELAY); //获取互斥量 Mutex_v Serial.println("Hi from Task1"); xSemaphoreGive(mutex_v); //返回互斥量 Mutex_v vTaskDelay(pdMS_TO_TICKS(1000)); //延迟 1 秒 } } void Task2(void *pvParameters) //Task2 任务 { while(1) { xSemaphoreTake(mutex_v, portMAX_DELAY); //获取互斥量 Mutex_v Serial.println("Hi from Task2"); xSemaphoreGive(mutex_v); //返回互斥量 Mutex_v vTaskDelay(pdMS_TO_TICKS(500)); //延迟 0.5 秒 } }