#include <Arduino.h>
#include "soc/gpio_struct.h" // Structure pour accès direct aux registres
#include "driver/gpio.h" // Bibliothèque GPIO
#define PIN_TEST 4 // GPIO à tester
void setup() {
Serial.begin(115200);
pinMode(PIN_TEST, OUTPUT);
pinMode(PIN_TEST, INPUT);
uint32_t start, end, cycles_digital, cycles_registre;
// 📌 Mesure du temps pour digitalWrite()
start = ESP.getCycleCount();
digitalWrite(PIN_TEST, HIGH);
end = ESP.getCycleCount();
cycles_digital = end - start;
// 📌 Mesure du temps pour accès registre direct
start = ESP.getCycleCount();
GPIO.out_w1ts = (1 << PIN_TEST); // Écriture rapide via registre
end = ESP.getCycleCount();
cycles_registre = end - start;
Serial.println("Comparaison écriture :");
Serial.printf("digitalWrite() : %d cycles\n", cycles_digital);
Serial.printf("Registre GPIO : %d cycles\n", cycles_registre);
// 📌 Mesure du temps pour digitalRead()
start = ESP.getCycleCount();
int val = digitalRead(PIN_TEST);
end = ESP.getCycleCount();
cycles_digital = end - start;
// 📌 Mesure du temps pour lecture registre direct
start = ESP.getCycleCount();
int val_reg = (GPIO.in >> PIN_TEST) & 0x1; // Lecture directe du GPIO
end = ESP.getCycleCount();
cycles_registre = end - start;
Serial.println("\nComparaison lecture :");
Serial.printf("digitalRead() : %d cycles\n", cycles_digital);
Serial.printf("Registre GPIO : %d cycles\n", cycles_registre);
}
void loop() {
}