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" ); }