Spagnolo Inglese
11365 Users    

Sviluppo del software di automazione con linguaggi scripting

linguaggi scripting

I linguaggi scripting sono utilizzati in molti sistemi operativi, sia in UNIX/Linux che in Windows. Questi linguaggi si sono sviluppati per l'uso generale del processo di automazione e programmazione web, ma si possono utilizzare anche nello sviluppo del software.

Awk e Perl sono adatti ad automatizzare e velocizzare lo sviluppo del software per sistemi embedded, perché molti sistemi embedded hanno solo "cross tool chain", senza supporti IDE potenti per l'automazione dei processi. Vediamo il motivo per cui abbiamo bisogno di loro e come questi strumenti ci aiutano.

Come sviluppatori di software, potreste essere coinvolti in banali processi di sviluppo, come ad esempio processare tutto il codice sorgente nei file C, "head files, makefiles, map file, batch file, linker error message" e molti altri file in formato proprietario. Perl e' simile al C, sed, shell e awk, ed e' capace nel gestire il testo, e questo è il principale motivo per cui Perl e' uno dei più popolari linguaggi nella programmazione web. Questa caratteristica rende la scelta ideale per l'elaborazione del testo nel progetto.

Perl vs. awk

Perl e' molto più potente di awk con molti moduli di estensione tramite CPAN (un inventario online di moduli Perl). Perl e' più grande di awk. Se hai bisogno solo di uno strumento pratico per completare un semplice file sorgente, come è dimostrato nella seguente applicazione, awk e' molto più utile. Se vuoi utilizzare gli script per automatizzare un progetto grande, Perl è una scelta ottima con più funzioni


Benefici

Molti IC sono sistemi dei circuiti integrati di sistema. Questo significa che ogni singolo dispositivo ha centinaia o migliaia di registri. Quando come sviluppatore software tagli ed incolli tutte le definizioni dei registri dal datasheet ai file sorgenti, considererai l'intero processo insignificante. E questo potrebbe generare molti errori e richiedere più tempo per convertirli in head files. Perl può aiutarti a semplificare questo processo esportando le tabelle del registro dal pdf in un file di testo, e poi convertendolo in head files o altri formati.

Generatore di codice sorgente

Assembly e' molto comune nel software dei sistemi embedded. Gli "head files" per assembly e i files sorgenti C dovrebbero avere le stesse definizioni di registri con sintassi diversi. E' possibile utilizzare uno script per convertire la definizione da "#define" in "C files/head files" in equivalenti "assembly definition files".

Conversione del formato

Molte "toolchain" dei sistemi embedded hanno formati di tipo file proprietari ed e' possibile convertirli in altri formati, con uno script.

Statistiche per la gestione dei progetti

E' molto importante ed utile avere un'idea di un progetto, visualizzandole statistiche ed eventuali grafici del codice sorgente. Queste cifre includono "line of code", "comment," "ROM footprint" (analizzato da map file) e altri dati. Questi files possono essere convertiti in "text database" come "project history"

Port Binary Data into Project

E' possibile convertire i dati binari in codice sorgente, con uno script. Per esempio, convertire un formato GIF in un file sorgente C come dati immagine embedded. Funziona anche per i font.

Project Porting

"Portare" un progetto su una nuova piattaforma all'inizio genererà tanti errori perché al progetto di destinazione potrebbero mancare molte funzioni. Di conseguenza, il linker riportera' migliaia di errori. Ci vuole tempo per aggiungere tutte le funzioni ed eliminare gli errori. Con uno script Perl e' possibile individuare le funzioni mancanti per rimuovere gli errori del linker, e poi cercare i prototipi per queste funzioni ed aggiungere prototipi vuoti di funzioni. Lo script Perl e' molto veloce per risolvere questi errori del linker. Ma è necessario completare i prototipi vuoti per ottenere funzioni reali.

La configurazione del progetto

Siccome i makefiles sono file di testo, gli script possono essere utilizzati per configurare il progetto aggiornando le regole dei makefiles. Se diversi componenti del software sono configurati dai makefiles, tutto il progetto può essere riconfigurato e ricostruito. Il progettista dovrebbe organizzare la configurazione del progetto con molta attenzione, perché lo script è potente e pericoloso. Esso, infatti, porterà dei rischi se il sistema è mantenuto da uno script che non e' organizzato bene.

Testing Automation

Perl ha molti moduli disponibili su CPAN, compreso WIN32::SerialPort e moduli TCP/IP. Un "test engineer" può utilizzare questa funzione per testare il sistema remoto tramite RS232 o la connessione TCP/IP e generare il rapporto di prova. E Perl può eseguire un comando tramite la funzione exec(). Quindi, anche se non si utilizza la porta seriale, se si può accedere al dispositivo remoto con un device Linux, Windows DLL o eseguibile da riga di comando che si collega al "target hardware",è possibile effettuare la chiamata in Perl. Questo e' molto utile per l'automazione di produzione, l'automazione di sperimentazione, ma richiede più conoscenze nella programmazione.

Document Automation

Perl supporta Doxygen ed è molto facile generare il rapporto del progetto con lo script Perl in HTML, XML e anche Windows Word (non per tutte le versioni). Non ti verra mal di testa sincronizzando il contenuto del rapporto con il codice sorgente. La produzione del documento potrebbe essere integrata nel makefile.

Sample Application

Il codice seguente e' una parte di un progetto reale dalla Philips Semiconductors. La definizione di registro e' scritta in C source file, ma il makefile chiamerà un awk per analizzare il sorgente C, genererà "head files" per inserirli in C source file ed aggiornerà le regole in makefile. Un makefile può ricostruire l'intero progetto.

hwic.c

/* #I2C_MAP_BEGIN --- begin definition of I2C-MAP Write registers: REG_CON1 0x04 0 0 0 0 ST3 ST2 ST1 ST0 REG_CON2 0x05 0 0 0 0 SP3 SP2 SP1 SP0 REG_CON3 0x06 SAP ST 0 SMU LMU 0 0 0 #I2C_MAP_END --- end definition of I2C-map */ i2cmap.awk

BEGIN \ { open_map_file = 0 print "/* Translated by AWK-script */\n" }
function print_define(string, value) { if (string != "0") { print "#define BIT_" string "\t" value print "#define BYTE_" string "\t" $1 } } #================================== # Keyword #I2C_MAP_BEGIN detected # Open map file #================================== # toupper($1) == "#I2C_MAP_BEGIN" \ { open_map_file = 1 } #================================== # Keyword #I2C_MAP_END detected # Close map file #================================== toupper($1) == "#I2C_MAP_END" \ { open_map_file = 0 } #================================== # Register definition detected # Print register defintions #================================== (index($1,"REG_") == 1) && (NF == 10) \ { if (open_map_file == 1) { print "#define " $1 "\t" $2 print_define($10,"0x01") print_define($9, "0x02") print_define($8,"0x04") print_define($7,"0x08") print_define($6,"0x10") print_define($5,"0x20") print_define($4,"0x40") print_define($3,"0x80") print "\n" } } END \ { print "/* End translated by AWK-script */" } makefile # Using awk script to generate *.h file %foreach X in $(MAP_INCLUDES) $(X): i2cmap.awk gawk.exe $[f,,$(X),c] %echo Generating $(X) ... -$(.PATH.exe)\gawk -f$(.PATH.awk)\i2cmap.awk $(.PATH.c)\$[f,,$(X),c] > $(.PATH.h)\$(X) -touch -f$(.PATH.c)\$[f,,$(X),c] $(.PATH.h)\$(X) %endfor ...... HWIC.OBJ: HWIC.H hwic.c

Installazione

Non è necessario installare queste utility se si sta lavorando su UNIX/Linux. È possibile installare Cygwin su Windows PC. È necessario attivare gmake, Perl e gawk durante l'installazione.

Commenta!Feed Rss

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Linee e paragrafi vanno a capo automaticamente.

Maggiori informazioni sulle opzioni di formattazione.

Articoli di elettronica correlati

  • Sono stato ingegnere di marketing per la Philips e tenevo anche corsi di formazione per i nostri clienti. Mi ricordo ancora una domanda da uno di loro (dalla sua domanda ho capito che le nostre università danno agli studenti un'opinione sbagliata). La domanda e' come trovare più timers in un'applicazione complessa mentre un microcontrollore standard di solito ha solo due o tre timers?

  • Analizziamo ora un semplice esempio per il monitoraggio in tempo reale della temperatura, sfruttando il sensore a bordo di FTPMicro, e l'azionamento di due LED, tramite una pagina HTML ed una CGI.

  • Programmiamo l'ADuC841, sviluppato con un 8051, attraverso ASEM-51, un programma open source completo di tutto ciò che ci necessita.

  • "Perché dovrei realizzare un orologio con calcolatrice, se con 20$ ne posso comprare uno da casio? Questo è con calcolatrice scientifica! Se non comprendi la differenza, allora, compra casio!"

  • L'applicazione è un disk loader come parte di un optical disk driver. Questo modulo software controlla il funzionamento del motore secondo l'interrupt esterno da un sensore di posizione.

Commenti recenti

Nuovi utenti

  • franckys58
  • harrison3001
  • Edi82
  • 1lampo1
  • Marco Inzolia
  • sante44
  • bassanocarrelli
  • swutz

Chi è online

Ci sono attualmente 1 utente e 35 visitatori collegati.

Utenti online

  • Agutu