// Task 1: Receives data via TCP every 100ms
void Task1(void *pvParameters) {
for (;;) {
// Wait for notification from ISR
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
// Process TCP data
}
}
// Task 2: Handles user requests and may request a system reset
void Task2(void *pvParameters) {
for (;;) {
// Handle user requests
if (userRequestsReset) {
// Attempt system reset
NVIC_SystemReset();
}
}
}
// ISR: Sends task notification every 100ms
void ISR_Handler(void) {
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
vTaskNotifyGiveFromISR(Task1Handle, &xHigherPriorityTaskWoken);
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
void main(void) {
// Create tasks
xTaskCreate(Task1, "Task 1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, &Task1Handle);
xTaskCreate(Task2, "Task 2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
// Start scheduler
vTaskStartScheduler();
// Should never reach here
for (;;) {}
}
// Task 1: Receives data via TCP every 100ms
void Task1(void *pvParameters) {
for (;;) {
// Wait for notification from ISR
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
// Process TCP data
}
}
// Task 2: Handles user requests and may request a system reset
void Task2(void *pvParameters) {
for (;;) {
// Handle user requests
if (userRequestsReset) {
// Attempt system reset
NVIC_SystemReset();
}
}
}
// ISR: Sends task notification every 100ms
void ISR_Handler(void) {
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
vTaskNotifyGiveFromISR(Task1Handle, &xHigherPriorityTaskWoken);
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
void main(void) {
// Create tasks
xTaskCreate(Task1, "Task 1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, &Task1Handle);
xTaskCreate(Task2, "Task 2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
// Start scheduler
vTaskStartScheduler();
// Should never reach here
for (;;) {}
}