• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
DDR/PORT vs pinMode/digitalWrite
#6
(25-08-2019, 18:59)twjx napisał(a): Doczytałem że używanie PORT jest 20x szybsze od digitalWrite
Żeby tylko 20 razy
Kod:
void digitalWrite(uint8_t pin, uint8_t val)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;

if (port == NOT_A_PIN) return;

// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);

out = portOutputRegister(port);

uint8_t oldSREG = SREG;
cli();

if (val == LOW) {
*out &= ~bit;
} else {
*out |= bit;
}

SREG = oldSREG;
}
a trzeba by jeszcze zobaczyć co się kryje za portOutputRegister. Zastanawia
Kod:
uint8_t oldSREG = SREG;
cli();
i
Kod:
SREG = oldSREG;
gdy istniej macro ATOMIC_BLOCK.

(25-08-2019, 18:59)twjx napisał(a): ale czy z tego powodu warto zaczynać się uczyć programować bezpośrednio rejestry uC ???
Zawsze warto poznać sprzęt. Kod funkcji digitalWrite potwierdza tezę, że gdy coś jest do wszystkiego to jest do niczego. Przekaźnikiem można sobie posterować ale zrobić np programowe SPI jest już nierozsądne. Używając rejestrów można programowo uzyskać prędkość interfejsu sprzętowego z digitalWrite też ale CPU taktowanego 500kHz.
 
Odpowiedź
  


Wiadomości w tym wątku
DDR/PORT vs pinMode/digitalWrite - przez twjx - 25-08-2019, 11:45
RE: DDR/PORT vs pinMode/digitalWrite - przez twjx - 25-08-2019, 18:59
RE: DDR/PORT vs pinMode/digitalWrite - przez semi - 27-08-2019, 08:02

Skocz do:


Przeglądający: 1 gości