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