2015-07-04 17 views
5

Qualcuno potrebbe dirmi per favore come posso eseguire il codice assembly inline nel codice C utilizzando TI code compositer studio (per ARM)?Assemblaggio in linea nel codice C tramite TI code compositore studio (per ARM)

Ho cercato e provato ma non ha funzionato.

Per esempio, quando provo questo codice molto semplice:

asm("push r0\n"); 

o questo

__asm("push r0\n"); 

ottengo sempre:

[E0002] illegale mnemonico spinta specificato R0

1 Errore di assemblaggio, nessuna guerra di assemblaggio

Ho letto qualcosa che dice che il mio codice precedente è in stile GCC, e il compilatore TI non lo accetta !. Allora come posso eseguire i miei codici assembly inline?

+0

L'assemblaggio in linea è molto specifico del compilatore, quindi non ci si può aspettare che l'assembly in linea effettui il porting da una versione del compilatore o una marca all'altra. –

risposta

4

Finalmente ho trovato la soluzione !!

il problema principale sarà risolto aggiungendo uno spazio o linguetta prima le istruzioni di montaggio in questo modo:

asm(" MOVS R0, #5\n"); 

Questo non funzionerà:

asm("MOVS R0, #5\n"); 

E in spinta dobbiamo mettere il registro tra parentesi {R0}

asm(" PUSH {R0}\n"); 

Sperare che aiuti.

+1

Quello (lo spazio) è strano, ma ok, le lezioni apprese Grazie per averci detto la tua soluzione UV –

+2

Lo spazio è necessario in modo che l'assemblatore non interpreti l'istruzione come etichetta, come per i normali file di assemblaggio. – PeterM

0

Non conosco un ARM Code Composer Studio. Ma conoscevo un Code Composer Studio di TI e, se lo si intende, potrei darti qualche suggerimento. Utilizzare asm volatile ("...") potrebbe aiutare. Ma con questo metodo non è possibile accedere alle variabili C, ad esempio. È molto meglio usare le cosiddette funzioni/metodi intrinseci che sono funzioni che collegano C all'assemblatore. Ecco un collegamento a un documento TI: http://www.ti.com/lit/ug/spru187o/spru187o.pdf sezione 7.5.4. Ecco il link da cui ho avuto l'idea: https://e2e.ti.com/support/development_tools/code_composer_studio/f/81/t/3660

+0

Intendevo davvero TI ccs (ho modificato il nome). sfortunatamente, il metodo volatile non ha funzionato, ho ancora lo stesso errore. Leggerò ciò che mi hai mandato e ti dirò quello che ricevo. Grazie. –

+0

Forse è semplice come scrivere PUSH maiuscolo e usare {} per gli elenchi dei registri. Ma questa è solo una supposizione. 'asm (" PUSH {r0} \ n ")' –

+0

E avrei davvero dovuto leggere la tua ultima frase. ;-) TI Compiler dovrebbe conoscere la mneomonica ARM, ma in caso contrario, allora PUSH è un alias per 'STMDB sp !, reglist' come puoi leggere qui http://infocenter.arm.com/help/index.jsp?topic= /com.arm.doc.dui0489e/Babefbce.html –