#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "Arduino.h"
int cnt;
//ハノイの塔の関数。負荷をかけるためだけのもので本質ではない。
void hanoi(int n,char a,char b,char c)
{
if(n>0) {
hanoi(n-1,a,c,b);
//Serial.printf("No. %d disk is moved
from %c to %c.\n",n,a,b);
hanoi(n-1,c,b,a);
}
}
//ハノイの塔を実行する関数。負荷をかけるためだけのもので本質ではない。
void doHanoi(char* task, int n){
int cnt=0;
unsigned long time_s = micros();
n=20;
while(1){
vTaskDelay(1);
if(micros()-time_s < 10000000){
hanoi(n,'a','b','c');
cnt++;
}else{
Serial.printf("%d hanoi
loops by %s on core %d done\n",cnt,task,xPortGetCoreID());
Serial.printf("%d msec
passed\n",micros()-time_s);
break;
}
}
while(1){
vTaskDelay(1);
}
}
void task0(void* param) {
doHanoi("task0",20);
}
void task1(void* param) {
doHanoi("task1",20);
}
void setup() {
Serial.begin(115200);
delay(100);
// コア0で関数task0をstackサイズ4096,優先順位1で起動
xTaskCreatePinnedToCore(task0, "Task0", 4096, NULL,
1, NULL, 0);
// コア1で関数task1をstackサイズ4096,優先順位1で起動
xTaskCreatePinnedToCore(task1, "Task1", 4096, NULL,
1, NULL, 1);
// vTaskDelete( NULL );
}
void loop() {
// mail loopでのハノイの塔実施
// doHanoi("main loop",20);
}
|