DMI – Corso di laurea magistrale in Informatica
Copyleft
2020 Giuseppe Scollo
in questa esercitazione si trattano:
lo sviluppo di programmi per sistemi dedicati è spesso condotto in macchine basate su un processore diverso dal target, cioè quello designato per la loro esecuzione
i cross-compilatori e i programmi di utilità qui considerati sono software libero GNU, che tipicamente hanno i nomi <target>–gcc per il compilatore, dove <target> indica l'architettura target, e <target>–<util> per l'utilità <util>, quale per esempio
un primo esempio mostra l'uso dell'emulatore ARM VisUAL v. 1.27 per la simulazione dell'esecuzione di un programma per il calcolo del GCD con l'algoritmo di Euclide (Listing 7.11 in Schaumont, con main modificato per il diverso sistema di simulazione)
un secondo esempio, illustrato nella prossima figura, presenta una realizzazione software del calcolo del delay Collatz, simile in funzionalità alle realizzazioni hardware prodotte nelle precedenti esperienze di laboratorio
il programma visto alla fine della lezione precedente (Listing 7.4 in Schaumont), con l'aggiunta di una inizializzazione del contenuto dell'array, forma il terzo esempio
l'emulatore accetta un programma sorgente assembly conforme a un sottoinsieme dell'insieme di istruzioni definito dalla sintassi UAL (Unified Assembly Language)
in questi esempi si genera il programma assembly dal sorgente C mediante il cross-compilatore arm-linux-gcc, per ISA ARMv4, realizzata nel processore StrongARM
tuttavia, il sorgente assembly così prodotto non soddisfa le restrizioni imposte dall'emulatore, e.g contiene direttive di assemblatore e altri dettagli sintattici non accettati da VisUAL
la cartella arm_visual nell'archivio fornito contiene i sorgenti C dei tre esempi e lo script c2visual per la cross-compilazione e modifica dell'assembly prodotto, come indicato sopra (lo script c02visual differisce dal precedente solo per la compilazione senza ottimizzazione, utile all'analisi del problema segnalato nella lezione precedente
un'istantanea dell'emulazione VisUAL del programma assembly ARM delay_collatz.s
la figura mostra un'istantanea dell'esecuzione del programma delay_collatz.c sul processore ARM della DE1-SoC
cross-compilazione, caricamento ed esecuzione hanno luogo mediante il programma altera-monitor-program, sotto controllo del suo debugger GNU GDB
istantanea di esecuzione di programma ARM controllata dal debugger GDB del Monitor Program
lo stesso sorgente C dell'esempio precedente può essere cross-compilato ed eseguito da softcore Nios II sulla FPGA nel sistema DE1-SoC
istantanea di esecuzione di programma Nios II controllata dal debugger GDB del Monitor Program
l'esecuzione dell'esempio delay_collatz sul processore ARM con il monitor program genera nella cartella del progetto due file interessanti per l'analisi di basso livello:
per condurre ulteriori analisi di basso livello è utile sapere dove sono collocati i programmi di utilità associati al cross-compilatore gcc utilizzato dal monitor program
N.B. in verità, il monitor program usa versioni specializzate di alcuni di questi strumenti, che hanno un'altra collocazione; tuttavia per l'uso generale, indipendente dall'esecuzione nel contesto del monitor program, è da utilizzare la collezione di strumenti indicata sopra
l'elaborazione dei sorgenti C con il monitor program per l'esecuzione sul processore Nios II genera l'eseguibile .elf nella cartella del progetto, ma non il suo disassembly
ecco un semplice esempio di uso dell'utilità size: confronto della dimensione degli eseguibili generati dai tre cross-compilatori qui considerati, per i sorgenti C di due degli esempi proposti e con le stesse opzioni di compilazione: in particolare, livello di ottimizzazione O2
la tabella che segue presenta il risultato di questo esercizio
C source | cross-compiler | text | data | bss | total |
gcd | arm-linux | 820 | 260 | 4 | 1084 |
arm-altera-eabi | 492 | 16 | 28 | 536 | |
nios2-elf | 1056 | 1068 | 0 | 2124 | |
delay_collatz | arm-linux | 864 | 260 | 4 | 1128 |
arm-altera-eabi | 628 | 16 | 28 | 672 | |
nios2-elf | 1196 | 1068 | 0 | 2264 |
riprodurre l'esecuzione degli esempi forniti per questa esercitazione, documentando eventuali difficoltà incontrate e le soluzioni trovate per superarle
in particolare, l'emulazione VisUAL dell'esempio accumulate richiede ulteriore editing del codice prodotto dallo script di compilazione + editing, sia con che senza ottimizzazione, per risolvere i seguenti problemi:
in merito all'ultimo problema indicato, si propone di:
letture raccomandate:
materiali per consultazione:
materiali utili per l'esperienza di laboratorio proposta: