isr optimizations

This commit is contained in:
2024-01-24 12:23:18 +03:00
parent d8283620b7
commit 56c207b058
2 changed files with 192 additions and 11 deletions

View File

@ -21,6 +21,8 @@
#define aroundRise(t) (riseTimeMin < t && t < riseTimeMax)
#define IR_timeout ((riseTimeMax * 8) + syncBits +1) // us // таймаут в 8 data + 3 sync + 1
#define subBuffer 5 //Буфер для складирования фронтов, пока их не обработают
class IR_Encoder;
class IR_Decoder : private IR_FOX {
friend IR_Encoder;
@ -33,6 +35,8 @@ public:
// @brief Для прерывания
void isr();
void tick();
// @return Буффер переполнился
bool isOverflow() { return isBufferOverflow; };
@ -111,7 +115,6 @@ public:
};
// class RawData : public Data {
// };
class Accept : public InputData {
@ -175,7 +178,6 @@ private:
bool isWaitingAccept = false;
uint16_t addrWaitingFrom = 0;
uint16_t addrFrom = 0;
uint16_t riseSyncTime = bitTime;
@ -196,6 +198,26 @@ private:
(bufferBitSizeMax / 8) + 1 :
(bufferBitSizeMax / 8));
const uint8_t bufferDataSize = dataByteSizeMax; // + crc
////////////////////////////////////////////////////////////////////////
void noFunc();
volatile uint8_t currentFrontBufferWriteIndex;
struct FrontStorage {
volatile uint32_t time;
volatile bool dir;
volatile FrontStorage* next;
FrontStorage& operator= (FrontStorage& val) {
this->next = val.next;
this->time = val.time;
this->dir = val.dir;
return *this;
}
};
volatile FrontStorage* lastFront = nullptr;
volatile FrontStorage* firstUnHandledFront = nullptr;
volatile FrontStorage frontBuffer[subBuffer];
////////////////////////////////////////////////////////////////////////
uint8_t* rawBuffer = nullptr;
uint8_t* dataBuffer = nullptr;