10-05-2020, 01:50
Jak wejdziesz w core Arduino czy DUE, czy STM, czy ESP32 to tam są zdefiniowane funkcje digitalWrite i odpowiadający im instrukcje na rejestrach danego uC. Nie jest to raczej assembler, bardziej C/C++, ale szybkość jest porównywalna.
Całe ESP32 core Arduino jest oparte o system operacyjny RTOS i prędkość działania może być zupełnie oderwana od parametrów technicznych. Na pewno jednak warto mieć jedną taką płytkę i się nią pobawić.
Kod:
extern void IRAM_ATTR __digitalWrite(uint8_t pin, uint8_t val)
{
if(val) {
if(pin < 32) {
GPIO.out_w1ts = ((uint32_t)1 << pin);
} else if(pin < 34) {
GPIO.out1_w1ts.val = ((uint32_t)1 << (pin - 32));
}
} else {
if(pin < 32) {
GPIO.out_w1tc = ((uint32_t)1 << pin);
} else if(pin < 34) {
GPIO.out1_w1tc.val = ((uint32_t)1 << (pin - 32));
}
}
}
Miło być decenianym https://buycoffee.to/kaczakat