La compilazione non va a buon fine
Compilare un sorgente è sempre una operazione di cui si aspetta il
buon fine, ma che spesso riserva delusioni, con il perfido messaggio:
BUILD FAILED
In questi casi le cause sono, solitamente, facili da reperire: per lo più
si tratta di errori di battitura o mancanza di qualche label o include,
cose che, solitamente, accadono su sorgenti di una creta dimensione.
Con un sorgente molto breve, si va tranquilli: poca complicazione, poche
possibilità di errore.
Però...
Capita, compilando un esempio di pochissime righe, privo di aualsiasi
asperità, di ritrovarsi nella finestra di Output di MPLAB il seguente
messaggio:
Si recupera rapidamente che l' errore è un codice [122], ovvero un
opcode illegale. Però il compilatore indica che l'opcode illegale è movlw
!!! Roba da non credere !
La prima azione è quella di verificare il listato (file .lst
prodotto dalla compilazione):
Proprio quel movlw
non gli va giù. Come è possibile? Vediamo il sorgente,
editato con TextPad, che, attraverso i colori, da un notevole aiuto nella
lettura del testo:
Pare perfetto.
Però, se lo vediamo nell' editor di MPLAB:
Perbacco, il movlw è nero
!!! C'è qualcosa che non va...
|
Fortunatamente TextPad dispone di una opzione per nulla superflua:
quella di rendere
visibili gli spazi.
Selezioniamo l'
opzione dal menu principale, voce Visualizza.
|
Otteniamo il seguente risultato:
Osservate che gli spazi (ASCII 20h) sono rappresentati con un puntino,
ma prima e dopo il famigerato movlw
si trovano COPPIE di puntini, indice che lì c'è un carattere non
stampabile, diverso da 20h.
Utilizziamo un editor esadecimale (XVI32, ad esempio), per visionare
il file:
Osserviamo che i caratteri identificati come non-spazio da TextPad sono
degli A0h (invece che 20h): per qualche ragione, probabilmente per un
taglia-e-incolla, si sono inseriti dei cararatteri non validi.
MPASM rileva che al posto di 20 6D 6F 76 6C 77 20, ovvero i codici ASCII
di <spazio>movlw<spazio> c'è la stringa 20 6D 6F 76 6C 77 A0
che non combina con alcuno degli opcode validi e quindi segnala l' errore.
Situazione peraltro indicata nella quarta immagine, dove l' opcode, invece
di essere identificato con il colore blu, era nero, come una label o un
altro elemento.
TextPad lo colora comunque in blu perchè nella sua tabella di
interscambio si trova la sola stringa 6D 6F 76 6C 77, mentre il
compilatore tiene conto anche degli spazi che devono separare i vari
elementi. E qui lo spazio (20) cade proprio prima della stringa e dopo
l'A0, che resta "attaccato" all' opcode, invalidandolo.
Peraltro, gli A0 inseriti ad inizio linea non sembrano creare problemi al
compilatore, dato che, probabilmente, non essendo addossati ad altri
elementi del testo, vengono semplicemente scartati.
La correzione è immediata: basta cancellare gli A0 e sostituirli con
spazi:
così che anche l' editor di MPLAB trova la situazione adeguata:
colorando in blu l' opcode. Ri compilato il testo, il magnifico:
BUILD SUCCEED
conferma l' esattezza della diagnosi e della cura.
Morale: i compilatori sono bestie piuttosto balzane e più spesso di
quanto si desidererebbe, le segnalazioni di errore possono portare in
confusione. Però, disponendo di un minimo di attenzione, si arriva sempre
a risolvere il problema.