200 likes | 315 Views
Introduzione al RTW. Corso Meccatronica anno 2008/09 Paolo Tripicchio. Real-Time Workshop. Esecuzione di Modello. Interfaccia run-time + modello eseguibile ModelInizialize ModelOutputs ModelUpdate ModelDerivatives ModelTerminate. Modello Single-Tasking. rtOneStep() {
E N D
Introduzione al RTW Corso Meccatronica anno 2008/09 Paolo Tripicchio
Esecuzione di Modello Interfaccia run-time + modello eseguibile • ModelInizialize • ModelOutputs • ModelUpdate • ModelDerivatives • ModelTerminate
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 …. For i=1:NumTasks If (hit in task i) ModelOutputs(tid=i) ModelUpdate(tid=i) EndIf EndFor } rtOneStep() { Controllo interrupt overflow Attivazione interrupt "rtOneStep" ModelOutputs(tid=0) LogTXY ModelUpdate(tid=0) Integrate 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