Hirdetés

Új hozzászólás Aktív témák

  • EQMontoya
    veterán

    Sziasztok!

    Mikrovezérlőben van egy delay függvényünk, ami asm-ben van írva és azt használjuk késleltetésre. Ez a függvény jól működik, viszont ha USB-t is használunk akkor a GCC O3-as optimalizációjával vagy bekapcsolt LTO-val nem jön létre az USB eszköz, míg minden más beállításban igen és jól is működik.

    Azt gyanítjuk, hogy az O3 optimalizálás csinál valamit ezzel az asm kóddal és az időzítés nem lesz kellően pontos, arra pedig érzékeny az USB.

    __attribute __((naked))
    void delay_loop (unsigned n)
    {
    __asm volatile ("1: sub r0, #1");
    __asm volatile (" bne 1b");
    __asm volatile (" bx 1r");
    }

    Szerintetek?

    Én már láttam ilyen compiler hibát x86->arm crosscompilernél, hogy -O3 esetén "túloptimalizált" (értsd: elb@szott) valamit, szóval mindenképp nézzétek meg az assemblyt, mert lehet, hogy egyszerűen hibás. :)

Új hozzászólás Aktív témák