#include "freertos/FreeRTOS.h"
#include "Arduino.h"
SemaphoreHandle_t xSemaphore;
//
https://qiita.com/koara-local/items/585755faac70c8b37b5b
// [C++11 ~] variadic templates
template <typename ... Args>
void _printf(const char *format, Args const & ...
args) {
// xSemaphoreTake(xSemaphore,
portMAX_DELAY);
TickType_t _nowTick =
xTaskGetTickCount();
char * _taskName = pcTaskGetTaskName(
NULL );
printf("[%s:%d] ",_taskName, _nowTick);
printf(format, args ...);
// xSemaphoreGive(xSemaphore);
}
//時間稼ぎ
void ConsumptionTick(int delay) {
TickType_t startTick;
TickType_t endTick;
TickType_t nowTick;
startTick = xTaskGetTickCount();
endTick = startTick + delay;
while(1) {
nowTick =
xTaskGetTickCount();
if (nowTick > endTick)
break;
}
return;
}
void task(void *pvParameter)
{
UBaseType_t taskPrio =
uxTaskPriorityGet( NULL );
int CoreID = xPortGetCoreID();
_printf("start CoreID=%d
Priority=%d\n",CoreID,taskPrio);
ConsumptionTick(200);
CoreID = xPortGetCoreID();
_printf("end CoreID=%d
Priority=%d\n",CoreID,taskPrio);
vTaskDelete( NULL );
}
void setup() {
delay(2000);
/* Create Mutex */
xSemaphore = xSemaphoreCreateMutex();
/* Check everything was created. */
configASSERT( xSemaphore );
/* Set prioroty to 6 */
vTaskPrioritySet(NULL,6);
UBaseType_t prio = uxTaskPriorityGet(
NULL );
int CoreID = xPortGetCoreID();
_printf("start CoreID=%d
Priority=%d\n",CoreID,prio);
_printf("portTICK_PERIOD_MS=%d\n",portTICK_PERIOD_MS);
#if 1
xTaskCreatePinnedToCore(task, "Task1",
4096, NULL, 1, NULL, tskNO_AFFINITY);
xTaskCreatePinnedToCore(task, "Task2",
4096, NULL, 2, NULL, tskNO_AFFINITY);
xTaskCreatePinnedToCore(task, "Task3",
4096, NULL, 3, NULL, tskNO_AFFINITY);
xTaskCreatePinnedToCore(task, "Task4",
4096, NULL, 4, NULL, tskNO_AFFINITY);
#endif
#if 0
xTaskCreatePinnedToCore(task, "Task1",
4096, NULL, 1, NULL, 0);
xTaskCreatePinnedToCore(task, "Task2",
4096, NULL, 2, NULL, 0);
xTaskCreatePinnedToCore(task, "Task3",
4096, NULL, 3, NULL, 1);
xTaskCreatePinnedToCore(task, "Task4",
4096, NULL, 4, NULL, 1);
#endif
CoreID = xPortGetCoreID();
_printf("end CoreID=%d
Priority=%d\n",CoreID,prio);
/* stop main task */
vTaskDelete( NULL );
}
void loop() { // Never run
printf("[%s:%d]
loop\n",pcTaskGetTaskName(NULL),xTaskGetTickCount());
} |