eventgroup.ino OK on raspico
*****************************************************
* FreeRTOS Event Groupの例
* 3個のタスクから異なる周期でEvent Groupのビットセット
* Task4でビット区別して青,緑,赤LEDを点滅する
* Pico の場合:
* ツールの Operating System で「FreeRTOS SMP」を選択
****************************************************/
#include "event_groups.h" //Picoで必要
//--- ピン設定 ----
#define Blue 1
#define Green 2
#define Red 3
// Event Group用変数定義
EventGroupHandle_t GroupA;
//====== Task1 ========
void Task1(void*){
while(1){
vTaskDelay(pdMS_TO_TICKS(500));
xEventGroupSetBits(GroupA, 0x01);
}
}
//====== Task2 ========
void Task2(void*){
while(1){
vTaskDelay(pdMS_TO_TICKS(1000));
xEventGroupSetBits(GroupA, 0x02);
}
}
//====== Task3 ========
void Task3(void*){
while(1){
vTaskDelay(pdMS_TO_TICKS(2000));
xEventGroupSetBits(GroupA, 0x04);
}
}
//====== Task4 =======
void Task4(void*){
while(1){
// Event Group待ち
EventBits_t got = xEventGroupWaitBits(
GroupA, // グループ指定
0x07, // Bit 0,1,2指定
pdTRUE, // 完了後クリア
pdFALSE, // OR条件
portMAX_DELAY // 永久待ち
);
// LEDの制御
if(got & 0x01){digitalWrite(Blue, !digitalRead(Blue));}
if(got & 0x02){digitalWrite(Green, !digitalRead(Green));}
if(got & 0x04){digitalWrite(Red, !digitalRead(Red)); }
}
}
//======== setup/loop ====
void setup(){
Serial.begin(115200);
vTaskDelay(pdMS_TO_TICKS(200));
// LED初期化
pinMode(Blue, OUTPUT);
pinMode(Green, OUTPUT);
pinMode(Red, OUTPUT);
// EventGroup生成
GroupA = xEventGroupCreate();
// タスク生成
xTaskCreate(Task1, "task1", 2048, NULL, 1, NULL);
xTaskCreate(Task2, "task2", 2048, NULL, 1, NULL);
xTaskCreate(Task3, "task3", 2048, NULL, 1, NULL);
xTaskCreate(Task4, "task4", 2048, NULL, 1, NULL);
}
void loop(){
//なにもしない
}
-------------------------------------------------------------
0 件のコメント:
コメントを投稿