Tips & Tricks - PIC

 

Un errore misterioso


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.


 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 10/02/15.