Domanda

Ho creato un piccolo modulo in assemblatore per ARM, da collegare insieme alla mia applicazione embedded bare metal. A volte quando sto ricostruendo l'applicazione, viene visualizzato un errore " Errore [Lp002]: trasferimento non riuscito: valutato fuori intervallo o illegale " ;. Ciò che è ancora più sconcertante è che sto ricevendo l'errore dopo aver commentato del codice in un modulo C.

Il manuale IAR è vago sul "riordinare la sezione o il codice". Ma guardando i file assembler generati dal compilatore dai miei file .c, non vedo alcuna differenza tra la loro dichiarazione di sezione e la mia. In realtà ho iniziato il mio codice cancellandolo in C e rilevando il file assemblato.

È stato utile?

Soluzione 2

Ho trovato la causa del problema e come implementare una soluzione accettabile. Nella mia fonte di assemblatori avevo una sezione di dati e una sezione di codice e il linker li posizionava troppo distanti. Ora ho spostato le mie variabili nella sezione del codice (che è stata comunque inserita nella RAM perché doveva essere eseguita in un contesto di interruzione mentre stavo scrivendo sul flash interno) e ora riesco a collegarlo correttamente.

Questa è la domanda che rimane: come dire al linker di posizionare una sezione vicina l'una all'altra?

Altri suggerimenti

Ogni volta che ricevo un misterioso errore linker / compilatore, faccio un Ricostruisci tutto. Circa la metà delle volte lo risolve. La mia ipotesi è che alcuni moduli avrebbero dovuto essere ricompilati, ma non lo sono stati.

Buona fortuna.

Cerca nella documentazione del compilatore. Di solito, c'è una sezione sui file dei comandi del linker, che fa esattamente quello che stai cercando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top