LPC11U68 + C rychlost portu

Pavel Hudecek edizon na seznam.cz
Úterý Červenec 26 03:03:17 CEST 2016


Teď jsem dal "Optimize most" (před tím bylo none).
Výsledkem je cca 20/20 ns nezávisle na deklaraci, s nepravidelnými 
prodlouženími na 40 ns.
Frekvence generovaná v "burstu" je průměrně cca 20 MHz.
Hrany mají asi 3-5 ns, zde se asi osciloskop, nebo sonda dostala na hranici 
možností (ADS1102C + PP510).
Návrat ve foru se zkrátil na cca 250 ns.

PH

-----Původní zpráva----- 
From: Pavel Hudecek
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 



Další informace o konferenci Hw-list