Печать неизвестного текста на последовательном мониторе
Я хочу использовать последовательный монитор для некоторой отладки, но он печатает что-то другое.
Правка-
Это происходит только в том случае, если я использую функцию 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
@Coder9390, 👍2
Обсуждение0
Смотрите также:
- Отправка последовательных данных в прерывании
- Серийное прерывание
- Почему люди используют 115200 вместо 9600?
- Ошибка 'Serial' was not declared in this scope
- Как получить ненулевой выход из HX711 и ячейки загрузки?
- Serial.availableForWrite против Serial.flush
- Разделенный последовательный поток Arduino, разделенный запятыми
- Как остановить серводвигатель в текущем положении при использовании последовательного порта? Я хочу, чтобы он оставался в одном положении при получении «0».
Как говорится в ошибке: ваш 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