Esp32. Есть проблема, при первом заходе в эту функцию, первый импульс всегда затянут. Вызывается ow_bit_io(1) в цикле.
inline uint8_t ow_bit_io(uint8_t b)
{
cli();
delayMicroseconds(50);
BUS_DOWN; // line down
delayMicroseconds(3);
if (b)
BUS_UP; // if bit is 1 set bus high (by ext. pull-up)
delayMicroseconds(12);
if (BUS_RD == 0)
b = 0; // sample at end of read-timeslot
sei();
delayMicroseconds(45);
BUS_UP;
delayMicroseconds(10);
return b;
}
IRAM_ATTR uint8_t ow_bit_io(uint8_t b)
ошибка компиляции. ICACHE_RAM_ATTR с этим компилируется, первый вызов, как и было, с большой задержкой, потом нормально.
А с чем связана первоначальная задержка?
В общем не помогло ICACHE_RAM_ATTR . Во все функции которые связаны с ow_bit_io(uint8_t b) добавил ICACHE_RAM_ATTR. Все равно, первые импульсы затянуты.
Без понятия, это же не велосипед, в котором все проблемы сразу видны.
Делайте пустой тестовый скетч и просто блинкайте в прерывании. ЛА подскажет - беда на ESP в целом или в конкретно вашей реализации ow.