Produkty Novinky Články Návody Kontakty

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