fix forever loop ?

This commit is contained in:
2024-02-26 15:42:27 +03:00
parent 1dc702f05d
commit 1f62eb8c0a
2 changed files with 22 additions and 16 deletions

View File

@ -23,7 +23,7 @@
class IR_Encoder;
class IR_DecoderRaw : public IR_FOX {
class IR_DecoderRaw : virtual public IR_FOX {
friend IR_Encoder;
public:
const uint8_t isrPin; // Пин прерывания
@ -37,17 +37,17 @@ public:
void isr(); // Функция прерывания
void tick(); // Обработка приёмника, необходима для работы
bool available() { if(isAvailable) {isAvailable = false; return true;} else { return false;}};
bool available() { if (isAvailable) { isAvailable = false; return true; } else { return false; } };
bool isOverflow() { return isBufferOverflow; }; // Буффер переполнился
bool isReciving() { return isBufferOverflow; }; // Возвращает true, если происходит приём пакета
//////////////////////////////////////////////////////////////////////////
protected:
PackInfo packInfo;
uint16_t id;
private:
ErrorsStruct errors;
uint16_t id;
bool isAvailable = false;
bool isAvailable = false;
uint16_t packSize;
uint16_t crcValue;
IR_Encoder* encoder; // Указатель на парный передатчик
@ -71,14 +71,15 @@ private:
volatile FrontStorage* firstUnHandledFront = nullptr; // Указатель первого необработанного фронта/спада
volatile FrontStorage subBuffer[subBufferSize]; // вспомогательный буфер для хранения необработанных фронтов/спадов
////////////////////////////////////////////////////////////////////////
uint8_t dataBuffer[dataByteSizeMax]{0}; // Буффер данных
uint8_t dataBuffer[dataByteSizeMax] { 0 }; // Буффер данных
uint32_t prevRise, prevPrevRise, prevFall, prevPrevFall; // Время предыдущих фронтов/спадов
uint32_t risePeriod;
uint16_t errorCounter = 0; // Счётчик ошибок
int8_t preambFrontCounter = 0; // Счётчик __/``` ↑ преамбулы
int16_t bufBitPos = 0; // Позиция для записи бита в буффер
private:
void listenEnd(); // @brief Слушатель для работы isReciving()
void listenStart(); // @brief Слушатель для работы isReciving()
/// @brief Проверка CRC. Проверяет len байт со значением crc, пришедшим в пакете
/// @param len Длина в байтах проверяемых данных
@ -98,7 +99,7 @@ private:
void writeToBuffer(bool);
////////////////////////////////////////////////////////////////////////
void firstRX(); /// @brief Установка и сброс начальных значений и флагов в готовность к приёму данных
/// @brief Целочисленное деление с округлением вверх