Sistemi Embedded
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
Sistema elettronico progettato appositamente per una
determinata applicazione e spesso caratterizzato da
un determinato hardware ad hoc.
Tra questi i più noti sono:
Digital Signal Processors (DSP)
Programmable Logic Devices (PLD)
Microcontrollori (µC)
Quello di nostro interesse è il Microcontrollore: esso è un
sistema a microprocessore completo integrato in un solo chip
e progettato per ottimizzare il rapporto prezzo/prestazioni ed
avere un’altissima autosufficienza funzionale.
Real-Time Operating System (RTOS)
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
Per gestire le funzionalità del µC abbiamo bisogno di un
software che offra al programmatore un’interfaccia
generica ma in grado di fornire un’astrazione ad hoc per
gestire la complessità architetturale del microchip stesso.
Questo software dedicato prende il nome di RTOS
ovvero un sistema operativo in grado di reagire a degli
input entro determinati vincoli temporali dettati dalla
applicazione.
Alcune delle caratteristiche funzionali che li contraddistinguono sono:
Context Switch Time (CST)
Interrupt Latency (IL)
Footprint
File System
Scheduler
Preemptive
Non-Preemptive
Supported platforms
Round-Robin
FCFS
Scelta del RTOS
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
Questa operazione ha richiesto l’esecuzione in serie di tre fasi fondamentali:
Prima fase: ricerca in rete di RTOS che presentino
caratteristiche compatibili al nostro scopo.
Seconda fase: tra i RTOS individuati, analisi approfondita dei
relativi datasheets con conseguente scelta, di due sistemi tra
questi, motivata dai relativi valori reperiti.
Terza fase: tests sperimentali su parametri specifici dei due
RTOS con lo scopo di individuare in conclusione quale sia
dei due il più adatto alla nostra applicazione specifica.
Scelta del RTOS
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
L’attuazione della prima fase ci ha portati all’individuazione dei seguenti RTOS:
RTXC Quadros
Segger EmbOS
Express Logic ThreadX
FreeRTOS
QNX Neutrino
Linuxworks LynxOS
IAR PowerPac
La terza fase ha previsto l’analisi di tre parametri fondamentali per la nostra
applicazione quali:
Context Switch Time (CST)
Interrupt Latency (IL)
Footprint
La seconda fase ha ristretto il cerchio ai seguenti RTOS:
FreeRTOS (open-source) IAR PowerPac (licenza proprietaria)
Porting su ambiente di sviluppo IAR
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
Abbiamo valutato diversi ambienti di sviluppo e, per effettuare
il porting, siamo convenuti all’utilizzo di quello proposto da IAR
ovvero lo IAR Embedded Workbench 5.0
FreeRTOS:
Non è disponibile in rete alcun “port” in
ambiente IAR per la nostra piattaforma
hardware
È invece presente quello per ambiente
Eclipse
Modifica alla struttura del
Workspace
Inserimento e modifica di
define, macro e aggiunta di
funzioni inline
Eliminazione di ulteriori
errori di compilazione
IAR PowerPac:
Porting già disponibile dal fornitore
Sono inoltre presenti diversi esempi
applicativi
Tutto pronto per i tests
Strumenti utilizzati per i tests
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
PC Notebook HP nc6320
Oscilloscopio LeCroy WaveRunner 6000
Evaluation Board OLIMEX LPC2378-STK
Emulatore JTAG IAR j-link
Microcontrollore NXP LPC2378
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
Caratteristiche µC LPC2378:
processor core ARM7TDMI-S a 72MHz
memoria Flash on-chip da 512KByte
memoria SRAM da 58KByte
interfacce seriali (ETH, USB, CAN, etc.)
altre periferiche (ADC, DAC, etc.)
alimentazione a 3.3V
oscillatori on-chip (Main, RC e RTC)
timers/counters e Watchdog timer
Porta EXT2 Porta EXT1Interfaccia Ethernet
Interfaccia USB
Interfaccia UART
Interfaccia CAN
Interfaccia JTAG
Display LCD
Fase di valutazione dei parametri
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
Per giungere all’obiettivo preposto abbiamo scorporato l’iter operativo in tre sottofasi quali:
Ciascuna di queste sottofasi è stata ottimizzata con coerenza per il calcolo di ogni singolo parametro
Criterio sperimentale:
definizione del percorso più adeguato
per giungere rapidamente allo
svolgimento del test.
1
Algoritmo implementato:
introduzione e modifica del codice nativo
con porzioni aggiuntive atte all’attuazione
delle attività di test.
2
Report dei risultati:
raccolta contente tutti i valori rilevati durante
le sessioni di test riportando grafici e tabelle
con relative considerazioni.
3
Context Switch Time (CST)
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
Tempo che impiega lo scheduler di un RTOS a commutare dallo stato di esecuzione di un
processo a quello di un altro.
1
Per rilevare il CST abbiamo pilotato tramite GPIO l’accensione/spegnimento
di un LED e collegato i relativi terminali ad una sonda dell’oscilloscopio.
2
Dopo aver individuato le funzioni atte all’effettivo cambio di contesto di entrambi i RTOS, abbiamo posto
agli estremi di queste le istruzioni atte all’accensione/spegnimento del LED.
GPIOInit( DWORD PortNum, DWORD PortType, DWORD PortDir, DWORD Mask)
void vPortPreemptiveTick( void )
{
GPIO_SC_FIO ^= GPIO_SC; //semino-luciani
GPIO_SC_FIO ^= GPIO_SC; //semino-luciani
vTaskIncrementTick();
vTaskSwitchContext();
T0IR = portTIMER_MATCH_ISR_BIT;
VICVectAddr = portCLEAR_VIC_INTERRUPT;
GPIO_SC_FIO ^= GPIO_SC; //semino-luciani
GPIO_SC_FIO ^= GPIO_SC; //semino-luciani
}
OS_INTERWORK void OS_ChangeTask(void) {
OS_U8 Stat;
OS_TASK * pActiveTask;
[...]
GPIO_SC_FIO ^= GPIO_SC; //semino-luciani
GPIO_SC_FIO ^= GPIO_SC; //semino-luciani
#if OS_RR_SUPPORTED
[...CODICE PROPRIETARIO CONTENENTE IL CONTEXT SWITCH...]
[...]
GPIO_SC_FIO ^= GPIO_SC; //semino-luciani
GPIO_SC_FIO ^= GPIO_SC; //semino-luciani
#if OS_SUPPORT_SAVE_RESTORE_HOOK
Istruzioni di
accensione/spegnimento
FREERTOS: IAR PowerPac:
Context Switch Time (CST)
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
3
Una volta ricompilato per entrambi i RTOS il progetto con le istruzioni al punto 2, vediamo
l’output a video sull’oscilloscopio:
FreeRTOS
IAR PowerPac
più lento
variante
più veloce
costante
Context Switch Time (CST)
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
Comparazione Context Switch Time
17,45
20,69
29,45
14,21
14,21
14,21
0 5 10 15 20 25 30 35
1
2
3
S
e
s
s
i
o
n
i
d
i
t
e
s
t
n
o
t
e
v
o
l
i
µsec
IAR PowerPac
FreeRTOS
SESSIONI DI TEST
SISTEMA
OPERATIVO
prima sessione seconda sessione terza sessione
FreeRTOS
17,45 (µs) 20,69 (µs) 29,45 (µs)
IAR PowerPac
14,21 (µs) 14,21 (µs) 14,21 (µs)
Questo istogramma a barre
orizzontali mostra in maniera più
intuitiva come FreeRTOS, oltre
che ad avere una spiccata
varianza per campione, risulti
avere anche un CST maggiore già
a partire dal valore del suo
campione migliore.
Altresì IAR PowerPac mostra un
CST costante e particolarmente
breve dovuto ad una gestione più
ottimizzata dello scheduler.
Un CST particolarmente ridotto e
costante risulta essere quanto di più
utile per la nostra applicazione.
Ne consegue che IAR PowerPac,
detenendo un CST più breve e
costante, sia da noi preferito.
Interrupt Latency (IL)
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
1
Per rilevare l’IL abbiamo fatto in modo di far accendere un LED, tramite
pilotaggio di GPIO, in corrispondenza della pressione di un interruttore
(Interrupt esterno) valutando all’oscilloscopio il tempo intercorrente tra la
pressione del pulsante e l’accensione del LED stesso.
Tempo che intercorre tra la richiesta di Interrupt (IRQ) e l’inizio dell’esecuzione del processo
abbinato a tale interruzione nella tabella degli Interrupt (VIT).
In questo caso abbiamo dovuto gestire sia il codice per la rilevazione dell’Interrupt esterno (con relativa
installazione nella VIT) sia il codice relativo all’accensione del LED in corrispondenza dell’interruzione.
DWORD EINTInit( void )
{
EXTMODE |= 1; //semino-luciani
EXTPOLAR |= 1; //semino-luciani
IO0INTENF = B1_MASK;
if (install_irq(EINT0_INT, (void *)EINT0_Handler,
HIGHEST_PRIORITY) == FALSE)
{
return (FALSE);
}
return( TRUE );
}
__irq __nested __arm void EINT0_Handler (void)
{
EXTINT |= 1; //semino-luciani
__disable_interrupt();
eint0_counter++;
GPIO_SC_FIO ^= GPIO_SC; //semino-luciani
printf("INTERRUPT OK!!!!!\n"); //semino-luciani
__enable_interrupt();
VICADDRESS = 0;
}
Modalità di rilevazione Chiamata alla funzione installante l’Interrupt nella VIT Istruzione di accensione del LED
2
Interrupt Latency (IL)
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
3
Una volta compilato e “flashato” il programma, vediamo cosa si propone come output all’oscilloscopio in
seguito alla pressione del pulsante; ai capi dell’interruttore e del LED sono connesse le sonde:
In questo caso abbiamo
un solo grafico in quanto,
per la nostra piattaforma,
FreeRTOS non possiede
un gestore degli Interrupt;
abbiamo quindi valutato
soltanto quello relativo a
IAR PowerPac.
Valore di tensione ai
capi dell’interruttore
Valore di tensione ai
capi del LED
Dal grafico si può
notare come IAR
PowerPac mostri un
Interrupt Latency
estremamente
risicato pari a 1.3 µs.
La nostra scelta ricade su IAR PowerPac viste le ottime performance rilevate nei tests.
Footprint
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
Ammontare di memoria che il programma occupa e a cui si riferisce mentre è in esecuzione.
1
Per valutare il Footprint è necessaria la sola lettura e l’interpretazione dei files *.map relativi ai progetti
contenenti i due RTOS; il Footprint fornisce inoltre valori specifici sulla posizione delle funzioni “linkate”.
2
FREERTOS:
16 368 bytes of readonly code memory
269 bytes of readonly data memory
20 645 bytes of readwrite data memory
Errors: none
Warnings: none
IAR POWERPAC:
16 492 bytes of readonly code memory
80 bytes of readonly data memory
1 576 bytes of readwrite data memory
Errors: none
Warnings: none
In questo caso non vi è un vero è proprio algoritmo implementato bensì la ricerca delle informazioni utili
contenute all’interno dei files di mappatura presenti nella root di progetto.
L’ammontare di memoria è così ripartito:
readonly code memoryÆ occupazione di memoria da parte del codice sorgente in sola lettura
readonly data memory Æ occupazione di memoria da parte dei dati in sola lettura (costanti)
readwrite data memoryÆ occupazione di memoria da parte delle variabili del programma (lettura/scrittura)
3
Footprint
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
Comparazione specifica Footprint
16368
269
20645
16492
80
1576
0 5000 10000 15000 20000 25000
readonly code memory
readonly data memory
readwrite data
memory
T
i
p
i
d
i
d
a
t
o
Bytes
IAR PowerPac
FreeRTOS
TIPO DI DATO
SISTEMA
OPERATIVO
readonly code memory readonly data memory readwrite data memory
FreeRTOS
16368 (bytes) 269 (bytes) 20645 (bytes)
IAR PowerPac
16492 (bytes) 80 (bytes) 1576 (bytes)
Comparazione globale Footprint
37282
18148
0
5000
10000
15000
20000
25000
30000
35000
40000
Sistemi operativi
B
y
t
e
s
readwrite data
memory
readonly data
memory
readonly code
memory
FreeRTOS IAR PowerPac
Dal grafico sottostante è possibile notare
come il Footprint di IAR PowerPac sia
circa la metà di quello di FreeRTOS.
Per quanto ci riguarda, vista l’esigua disponibilità di memoria on-chip, è evidente come il
sistema più adatto alle nostre esigenze sia IAR PowerPac.
Grafici e considerazioni finali
“Porting e analisi di sistemi RTOS: verifica sperimentale dei parametri caratteristici su
scheda embedded con microcontrollore a basso costo”
79732
45358
0
10000
20000
30000
40000
50000
60000
70000
80000
Occupazione
risorse
Comparazione assoluta assorbimento risorse
Footprint
Interrupt Latency
Context Switch Time
FreeRTOS IAR PowerPac
Sistemi operativi
Dai due grafici (istogramma e spider plot) si evince che il minor assorbimento globale di
risorse, relativamente ai parametri considerati, sia da attribuire a IAR PowerPac.