Introduzione al RTW Corso Meccatronica anno 2008/09 Paolo Tripicchio Real-Time Workshop Esecuzione di Modello Interfaccia run-time + modello • • • • • ModelInizialize ModelOutputs ModelUpdate ModelDerivatives ModelTerminate eseguibile Modello Single-Tasking rtOneStep() { Controllo interrupt overflow Attivazione interrupt "rtOneStep" ModelOutputs -- passo temporale maggiore. LogTXY -- Log Tempo, stati e porte di uscita. ModelUpdate -- passo temporale maggiore. Integrate -- Integrazione nei passi temporali minori per gli stati continui ModelDerivatives Do 0 o Più ModelOutputs ModelDerivatives EndDo (Il numero di iterazioni dipende dal solutore.) Calcolo derivate per aggiornare stati continui. EndIntegrate } Modello Single-Tasking main() { Initializzazione (inclusa istallazione di rtOneStep come interrupt service routine, ISR, per un clock real-time). While(tempo < tempo finale) Esecuzione processi in Background. EndWhile Mask interrupts (Disattiva rtOneStep dall’esecuzione.) Completa tutti i Processi in Background. Shutdown } Modello Multi-Tasking rtOneStep() { …. Controllo interrupt overflow For i=1:NumTasks Attivazione interrupt "rtOneStep" If (hit in task i) ModelOutputs(tid=0) ModelOutputs(tid=i) LogTXY ModelUpdate(tid=i) ModelUpdate(tid=0) EndIf Integrate EndFor ModelDerivatives } Do 0 o Pi`u ModelOutputs(tid=0) ModelDerivatives EndDo Calcolo derivate per aggiornare stati continui. EndIntegrate …. Modelli Multi Rate • Continui e discreti, diversi rate Tc multipli del base Ts • Assegnamento priorità dei processi freq. maggiore priorità maggiore • Assegnamento priorità blocchi asincroni • Transizioni nella frequenza di campionamento Problemi di trasferimento dati • Integrità dei dati (preemption) – Trasferimento dati protetto – Trasferimento dati non protetto • Determinismo (predicibilità) – Disponibilità dati – Rates di campionamento dei blocchi – Tempo di ritardo blocco in ricezione Blocco Rate Transition • 3 differenti modalità – Zero Order Hold – Unit Delay • Inserzione automatica S-Functions • • • • Estendono funzionalità di Simulink Interfaccia per il codice hand-written Interfaccia per l’hardware Scrittura codice embedded ottimizzato l’API S-function genera overhead S-Functions • Non mi interessa l’efficienza – Non-Inlined S-function • Voglio interfacciare il mio codice – Wrapper S-function • Voglio implementare un algoritmo altamente ottimizzato – Fully Inlined S-function Blocchi asincroni • Meccanismo function call tramite ISR – Sottosistema triggered con enable fnc_call Blocchi asincroni • Approccio dual-model vs single-model RTW Embedded Coder • Utilizzo di memoria, Velocità esecuzione, Leggibilità paragonabile al codice scritto a mano • Partizione efficiente codice multi-rate • La struttura dati rtModel contiene esclusivamente le informazioni richieste dal modello RTW Embedded Coder • Generazione programmi stand-alone senza necessità di utilizzare RTOS • Funzioni modello Embedded – model_initialize – model_step(tid) • model_output(tid) • model_update(tid) – model_terminate (opzionale) Codice Stand-Alone main() { Inizializzazione (include l’installazione di rt_OneStep come interrupt service routine per un clock real-time) Inizializza e avvia timer hardware Attiva interrupts While(not Error) and (time < final time) Background task EndWhile Disattiva interrupts (Disattiva rt_OneStep) Completa tutti i background tasks Shutdown } Codice Stand-Alone • Single-Tasking rt_OneStep() { Controlla overflow dell’Interrupt o altri errori Attiva "rt_OneStep" (timer) interrupt Model_Step() -- Passo temporale con output,logging,update } Codice Stand-Alone • Multi-tasking multi-rate rt_OneStep() { Controlla base-rate interrupt overrun Attiva "rt_OneStep" interrupt Determina quali rates devono eseguire in questo passo Model_Step0() -- esegui codice con il passo base-rate For N=1:NumTasks-1 -- itera i sub-rate tasks If (sub-rate task N `e schedulato) Controlla sub-rate interrupt overrun Model_StepN() -- esegui codice passo sub-rate EndIf EndFor } Ottimizzazioni Fixed-Point • Molte famiglie di Micro hanno solo ALU • Ridurre consumo RAM , ROM, tempo esecuzione • Rappresentazione Slope , [Slope Bias] V = S*Q + B Ottimizzazioni Fixed-Point • Scelta del punto binario (range vs risoluzione) • Metodo di arrotondamento – Floor , Ceiling , Zero , Nearest • Gestione overflow – Wrap , Saturate