LPC11U68 + C rychlost portu

Pavel Hudecek edizon na seznam.cz
Pondělí Červenec 25 23:50:52 CEST 2016


Dobrý den všem,

tak jsem trochu optimalizoval komunikaci s displejem a vedlejší výsledky 
jsou tyto, kdyby někoho zajímaly:

Za podmínek LPC11U68 / 48 MHz a program ve stylu:

for (n=0; n<1000; n++) {
    LPC_GPIO->PIN[LED_port] = a;    LPC_GPIO->PIN[LED_port] = b;
    LPC_GPIO->PIN[LED_port] = a;    LPC_GPIO->PIN[LED_port] = b;
    LPC_GPIO->PIN[LED_port] = a;    LPC_GPIO->PIN[LED_port] = b;
    LPC_GPIO->PIN[LED_port] = a;    LPC_GPIO->PIN[LED_port] = b;
    LPC_GPIO->PIN[LED_port] = a;    LPC_GPIO->PIN[LED_port] = b;
}
Přičemž a odpovídá 0 a b odpovídá 1.
Pro PIN[port] a MPIN[port] jsou a/b typu uint32_t.
Pro B[port][pin] jsou a/b typu uint8_t.

- Rychlost je stejná pro přístup přes B[port][pin], PIN[port] a MPIN[port].
- Pokud je a/b deklarované s "register", nebo jsou to #define čísel, je 
rychlost:
105/125 ns (0 kratší, 1 delší)
- Pokud je a/b deklarované obyčejně, je rychlost:
170/230 ns
- Prohozením hodnot a/b se prohodí delší/kratší (zkoumáno jen pro register). 
Tzn se zdá, že levé příkazy jsou rychlejší, než pravé... WTF?
- Návrat na začátek těla foru (n je uint32_t): 550 ns

PH 



Další informace o konferenci Hw-list