#if CONFIG_FREERTOS_UNICORE
static const BaseType_t app_cpu = 0;
#else
static const BaseType_t app_cpu = 1;
#endif
const char msg[] = "Muhammad Shofuwan Anwar.";
static TaskHandle_t task1 = NULL;
static TaskHandle_t task2 = NULL;
// task
void startTask1 (void* parameter) {
int msg_len = strlen(msg);
while (1) {
Serial.println();
for (uint8_t x=0;x<msg_len;x++) {
Serial.print(msg[x]);
}
Serial.println();
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void startTask2 (void* parameter) {
while (1) {
Serial.print("*");
vTaskDelay(100 / portTICK_PERIOD_MS);
}
}
void setup () {
Serial.begin(300);
vTaskDelay(1000 / portTICK_PERIOD_MS);
Serial.println("\n---FreeRTOS Task Demo Preemtive---");
// print self priority
Serial.print("Setup and loop task running on core ");
Serial.print(xPortGetCoreID());
Serial.print(" with priority ");
Serial.println(uxTaskPriorityGet(NULL));
// Task run forever
xTaskCreatePinnedToCore(startTask1, "task1", 1024, NULL, 1, &task1, app_cpu);
xTaskCreatePinnedToCore(startTask2, "task2", 1024, NULL, 2, &task2, app_cpu);
}
void loop () {
for (uint8_t x=0;x<3;x++) {
vTaskSuspend(task2);
vTaskDelay(5000 / portTICK_PERIOD_MS);
vTaskResume(task2);
vTaskDelay(2000 / portTICK_PERIOD_MS);
Serial.print("\nIteration : ");
Serial.println(x);
}
if (task1 != NULL) {
vTaskDelete(task1);
task1 = NULL;
}
}