Questo varia con il controller incorporato che utilizzo?
Sì. L'assembly inline non fa parte dello standard C (ancora), varia dal compilatore al compilatore e talvolta anche tra diverse architetture di destinazione dello stesso compilatore. Vedere Is inline asm part of the ANSI C standard? per ulteriori informazioni.
Ad esempio, per il Keil compilatore C51
, il syntax for inline assembly è
...
#pragma asm
NOP
#pragma endasm
...
mentre per ARM
, la sintassi è qualcosa di simile
...
__asm {
NOP
}
...
Sarà necessario controllare il manuale per il compilatore vero e proprio tu stai usando.
Per alcuni degli opcode più comuni, alcuni compilatori forniscono i cosiddetti intrinseci - questi possono essere chiamati come una funzione C, ma essenzialmente inseriscono il codice assembly, come _nop_()
.
fonte
2014-09-10 10:24:24
Alcuni compilatori incorporati forniscono una funzione intrinseca, '__delay_cycles (constant)' che emette il codice per attendere un numero di cicli. Non sono sicuro che la compilazione di Keil, comunque. – Lindydancer
Quale obiettivo? - Gli strumenti ARM di Keil usano il compilatore ARM (a meno che non sia molto vecchio, da prima che Keil fosse acquisito da ARM), mentre per altri obiettivi usano i propri compilatori. Le estensioni proprietarie differiscono tra le due. Tuttavia tutti avranno un mezzo per incorporare l'assemblatore in linea; fare riferimento al manuale utente per la sintassi inline-assembly e fare riferimento al set di istruzioni del processore sull'istruzione no-op appropriata. – Clifford