Trochu assembleru
Na závěr vytvoříme jednoduchou pomocnou funkci se zpoždovací smyčkou. Napíšeme ji v assembleru.
Jak funkce main(), tak funkce mcu_init() volají pomocnou funkci short_delay(), která generuje krátkou prodlevu. Funkce je uložena ve zdrojovém souboru helpers.c. Na této jednoduché funkci si ukážeme použití inline assembleru.
Atribut naked, použitý v prototypu funkce, říká kompilátoru, aby negeneroval kód standardního zahájení a ukončení funkce. ARM Procedure Call Standard definuje, že první čtyři argumenty funkce jsou předávány v registrech R0 až R3. Argument count je tedy předán funkci v registru R0. Funkce v cyklu dekrementuje registr R0, dokud jeho obsah není nulový a potom provede návrat z podprogramu instrukcí BX.
void __attribute__((naked)) short_delay(unsigned long count);
void short_delay(unsigned long count)
{
__asm(
"shdly:\n"
" subs r0, #1\n"
" bne shdly\n"
" bx lr"
);
}
