Vložení části asm kodu do programu v C v Keil uVision4

Dobrý den.
Začal jsem zkoušet programovat STM32VL kit a mám problém s vložením části asm kodu do programu v C.

[code]
/* WAIT = 24*41,67ns = 1us */
//#define WAIT __nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop();__nop();__nop();
__nop();__nop();__nop();__nop();__nop()

#define WAIT __asm(“mov r8,r8\n\tmov r8,r8\n\tmov r8,r8\n\tmov r8,r8\n\t”
“mov r8,r8\n\tmov r8,r8\n\tmov r8,r8\n\tmov r8,r8\n\t”
“mov r8,r8\n\tmov r8,r8\n\tmov r8,r8\n\tmov r8,r8\n\t”
“mov r8,r8\n\tmov r8,r8\n\tmov r8,r8\n\tmov r8,r8\n\t”
“mov r8,r8\n\tmov r8,r8\n\tmov r8,r8\n\tmov r8,r8\n\t”
“mov r8,r8\n\tmov r8,r8\n\tmov r8,r8\n\tmov r8,r8\n\t”)

/* fce mov r8,r8 se provede za 1 cyklus, pri 24Mhz za 41,66 ns

  • celkem je zde 24 instrukci, tj. doba provadeni je 1us! */

void _delay_us(vu16 time)
{
if(time>0)
{
for(;time != 0;time–)WAIT;
}
}[/code]

Pokud použiju WAIT __nop()…, tak se program se překompiluje v pořádku, ale při WAIT __asm(…) to hlásí chybu:
error : #1113 : Inline assembler not permitted when generating Thumb code

Děkuji Standa

:arrow_right: administrator: příspěvek byl upraven

O téhle chybě se mluví na internetu v případě, že se převezme kód odjinud a chce se překládat v Keilovi - protože údajně Keil tyto operace nepodporuje.

Ve firmě jsme použivali Keil na STM, ale pak jsme přešli na gcc, protože Keil pro ARM je jako překladač poměrně slabý a dost omezený.

Asi proto ARM firmu Keil koupil :wink:

Jo? Aha tak proto je Keil pro x51 a potom až ARM, ale ne pro AVR.

Napište si místo makra funkci. Příklad zpoždovací smyčky je sice pro GCC, ale podle dokumentace u Keilů to určitě upravíte pro kompilátor Keil.