Embedded Systems Design
Program Flows

Program Flows
-
Pooling
-
Interrupt Driven
Combination
Handling Concurrency

-
RTOS

Pooling

Basic Structure

void Setup()
{
// Initialization code goes here
}
void Loop()
{
// Your code goes here
}
Pooling

void Setup()
{
// Initialization code goes here
Initialization();
}
void Loop()
{
// Your code goes here
if(Peripheral_A)
{
ProcessA();
}
if(Peripheral_B)
{
ProcessB();
}
if(Peripheral_C)
{
ProcessC();
}
}
Interrupt Driven

Basic Structure

void Setup()
{
// Initialization code goes here
}
void Loop()
{
// Your code goes here
}
Interrupt Driven

void Setup()
{
// Initialization code goes here
Initialization();
}
void Loop()
{
// Empty. Things are done in Interrupts
}
void ISR(Routine_A)
{
ProcessA();
}
void ISR(Routine_B)
{
ProcessB();
}
void ISR(Routine_C)
{
ProcessC();
}
Combination

Basic Structure

void Setup()
{
// Initialization code goes here
}
void Loop()
{
// Your code goes here
}
Combination

volatile char isr_flag_a = 0;
void Setup()
{
// Initialization code goes here
Initialization();
}
void Loop()
{
// Your code goes here
if(isr_flag_a == 1)
{
isr_flag_a = 0; // Clear Flag
Process_A();
}
}
void ISR(Routine_A)
{
isr_flag_a = 1;
}
RTOS

Basic Structure

void Setup()
{
// Initialization code goes here
}
void Loop()
{
// Your code goes here
}
RTOS

#include <Arduino_FreeRTOS.h>
/* Additional Variables will be declared here... */
void Setup()
{
// Initialization code goes here
xTaskCreate(Task_A); // Note: abstract representation
}
void Loop()
{
// Empty. Things are done in Tasks
}
void Task_A()
{
// your code goes here...
}