Sviluppo del software di automazione con 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.

Repost: 3 Giu 2008

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend