Печать неизвестного текста на последовательном мониторе

Я хочу использовать последовательный монитор для некоторой отладки, но он печатает что-то другое.

Правка- Это происходит только в том случае, если я использую функцию attachInterrupt()

Я попробовал другую программу, которая не использует прерывания, и там она работает.

Мой код:-


/*
YF‐ S201 Water Flow Sensor
Water Flow Sensor output processed to read in litres/hour
Adaptation Courtesy: www.hobbytronics.co.uk
*/
volatile int flow_frequency; // Measures flow sensor pulses
unsigned int l_hour; // Calculated litres/hour
unsigned char flowsensor = 13; // Sensor Input
unsigned long currentTime;
unsigned long cloopTime;
void flow () // Interrupt function
{
   flow_frequency++;
}
void setup()
{
   pinMode(flowsensor, INPUT_PULLUP);
   Serial.begin(9600);
   attachInterrupt(0, flow, RISING); // Setup Interrupt
   sei(); // Enable interrupts
   currentTime = millis();
   cloopTime = currentTime;
}
void loop ()
{
   currentTime = millis();
   // Every second, calculate and print litres/hour
   if(currentTime >= (cloopTime + 1000))
   {
      cloopTime = currentTime; // Updates cloopTime
      // Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min.
      l_hour = (flow_frequency * 60 / 7.5); // (Pulse frequency x 60 min) / 7.5Q = flowrate in L/hour
      flow_frequency = 0; // Reset Counter
      Serial.print(l_hour, DEC); // Print litres/hour
      Serial.println(" Lhour");
   }
}

Данные с последовательного монитора:-

--------------- CUT HERE FOR EXCEPTION DECODER ---------------
⸮⸮⸮⸮⸮⸮ISR not in IRAM!

User exception (panic/abort/assert)
--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Abort called

>>>stack>>>

ctx: cont
sp: 3ffffef0 end: 3fffffc0 offset: 0000
3ffffef0:  feefeffe feefeffe feefeffe 00000100  
3fffff00:  000000fe 00000000 00000000 00000000  
3fffff10:  00000000 00000000 00000000 00ff0000  
3fffff20:  5ffffe00 5ffffe00 3ffef0a4 00000000  
3fffff30:  00000001 00000000 3ffee34c 40201e72  
3fffff40:  40100402 40202e51 ffffffff 40201e84  
3fffff50:  feefeffe 00000001 3ffee34c 40202399  
3fffff60:  00000000 00000001 3ffee324 4020129c  
3fffff70:  00000000 feefeffe feefeffe 3ffee38c  
3fffff80:  3fffdad0 00000000 3ffee34c 40202448  
3fffff90:  3fffdad0 00000000 3ffee34c 40201079  
3fffffa0:  feefeffe feefeffe feefeffe 40201a80  
3fffffb0:  feefeffe feefeffe 3ffe84e4 40100cfd  
<<<stack<<<

Почему это происходит?

Аппаратное обеспечение-NodeMCU на базе ESP8266

, 👍2

Обсуждение

Как говорится в ошибке: ваш ISR не находится в IRAM., @Majenko

@Majenko Что это должно означать?, @Coder9390

ISR ESP8266 нуждается в префиксе ICACHE_RAM_ATTR, чтобы заставить его оставаться постоянным в IRAM (поэтому его не нужно запускать из SPI flash при возникновении прерывания). Ваше определение ISR должно быть: `Поток пустоты ICACHE_RAM_ATTR () { ... " . Для объяснения: см. [здесь](https://bbs.espressif.com/viewtopic.php?t=1183). Также смотрите [этот поток стеков answer](https://stackoverflow.com/questions/58113937/esp8266-arduino-why-is-it-necessary-to-add-the-icache-ram-attr-macro-to-isrs-an)., @StarCat

Я голосую за то, чтобы закрыть этот вопрос, потому что это не настоящий вопрос, @Juraj

Пожалуйста, посмотрите на правку, @Coder9390