#include <Arduino.h>
// Number of tasks
#define NUM_TASKS 10
#define TASK_DELAY 200 // 200 ms delay between creation
#define RUN_DELAY 2000 // each task sleeps for 2 seconds
TaskHandle_t taskHandles[NUM_TASKS];
char taskNames[NUM_TASKS][16];
void myTask(void *param) {
char *taskName = (char *)param;
int coreID = xPortGetCoreID();
Serial.printf("Started %s on Core %d\n", taskName, coreID);
while (1) {
Serial.printf("Running %s on Core %d\n", taskName, coreID);
vTaskDelay(pdMS_TO_TICKS(RUN_DELAY));
}
}
// Function to initialize task names
void init_task_names(const char *prefix) {
for (int i = 0; i < NUM_TASKS; i++) {
snprintf(taskNames[i], sizeof(taskNames[i]), "%s%d", prefix, i);
}
}
// Function to create tasks
void create_tasks() {
for (int i = 0; i < NUM_TASKS; i++) {
int core = (i % 2 == 0) ? 0 : 1;
xTaskCreatePinnedToCore(
myTask, // task entry function
taskNames[i], // task name
5000, // stack size in words
(void *)taskNames[i], // task name parameter
1, // priority
&taskHandles[i], // task handle
core // core assignment
);
vTaskDelay(pdMS_TO_TICKS(TASK_DELAY)); // Delay between task creation
}
}
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("Starting Lab2_IoT_EC_Assignment...");
Serial.println("Sharmitha S");
Serial.println(("USN: 1RVU23CSE420"));
// Initialize names with "Task"
init_task_names("Task");
// Create tasks
create_tasks();
}
void loop() {
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
}