subBuffer overflow detect

This commit is contained in:
DashyFox 2024-02-29 14:43:14 +03:00
parent 24b68b953b
commit db86bcf74c
2 changed files with 4 additions and 1 deletions

View File

@ -24,6 +24,7 @@ void IR_DecoderRaw::isr() {
} else { } else {
if (firstUnHandledFront == &subBuffer[currentSubBufferIndex]) { // Если контроллер не успел обработать новый сигнал, принудительно пропускаем его if (firstUnHandledFront == &subBuffer[currentSubBufferIndex]) { // Если контроллер не успел обработать новый сигнал, принудительно пропускаем его
firstUnHandledFront = firstUnHandledFront->next; firstUnHandledFront = firstUnHandledFront->next;
isSubBufferOverflow = true;
#ifdef IRDEBUG_INFO #ifdef IRDEBUG_INFO
// Serial.println(); // Serial.println();
Serial.println(" ISR BUFFER OVERFLOW "); Serial.println(" ISR BUFFER OVERFLOW ");
@ -80,7 +81,7 @@ void IR_DecoderRaw::tick() {
FrontStorage currentFront; FrontStorage currentFront;
noInterrupts(); noInterrupts();
listenStart(); listenStart();
if (firstUnHandledFront == nullptr) { interrupts(); return; } //Если данных нет - ничего не делаем if (firstUnHandledFront == nullptr) { isSubBufferOverflow = false; interrupts(); return; } //Если данных нет - ничего не делаем
currentFront = *((FrontStorage*)firstUnHandledFront); //найти следующий необработанный фронт/спад currentFront = *((FrontStorage*)firstUnHandledFront); //найти следующий необработанный фронт/спад
interrupts(); interrupts();
if (currentFront.next == nullptr) { isRecive = false; return; } if (currentFront.next == nullptr) { isRecive = false; return; }

View File

@ -43,6 +43,7 @@ public:
void tick(); // Обработка приёмника, необходима для работы void tick(); // Обработка приёмника, необходима для работы
bool isOverflow() { return isBufferOverflow; }; // Буффер переполнился bool isOverflow() { return isBufferOverflow; }; // Буффер переполнился
bool isSubOverflow() { return isSubBufferOverflow; }; // Буффер переполнился
bool isReciving() { return isBufferOverflow; }; // Возвращает true, если происходит приём пакета bool isReciving() { return isBufferOverflow; }; // Возвращает true, если происходит приём пакета
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -54,6 +55,7 @@ private:
volatile uint16_t isPairSending = 0; // Флаг передачи парного передатчика volatile uint16_t isPairSending = 0; // Флаг передачи парного передатчика
volatile bool isRecive = false; // Флаг приёма volatile bool isRecive = false; // Флаг приёма
volatile bool isPreamb = false; // флаг начальной последовости volatile bool isPreamb = false; // флаг начальной последовости
volatile bool isSubBufferOverflow = false;
bool isBufferOverflow = false; // Флаг переполнения буффера данных bool isBufferOverflow = false; // Флаг переполнения буффера данных
bool isWrongPack = false; // Флаг битого пакета bool isWrongPack = false; // Флаг битого пакета