( apal | 2020. 11. 16., h – 23:32 )

Viszont itt nincs univerzális megoldás, muszáj chipenként újra gondolni

Egy FIFO-szeru absztrakciot az I2C fole is fel tudsz huzni relative egyszeruen. Es egy FIFO-t kenyelmesen tudsz etetni "kivulrol" es fogyaszani az interruptbol es/vagy forditva, azaz etetni az interruptbol es fogyasztani kivulrol csak ket darab szamlaloval. Es ha a szamlalo meretenel fogva atomi muvelettel kiolvashato akkor semmi mas vedelemmel (critical section, ilyesmi) nem kell torodnod. Szoval egy N elemu fifo_array[N] FIFO eseten az array[(write_ptr++)%N]=... modon eteted, az array[(read_ptr++)%N] modon fogyasztod, es ha (write_ptr%N)==(read_ptr%N), akkor epp' ures. Egyetlen dologra kell figyelned, hogy ne etetsd tul. Ha nem figyelsz erre interrupton belul akkor adatvesztesed lesz. Interrupton kivul meg nem kell mast csinalni csak varni amig lesz megfelelo mennyisegu hely. Ha N=256 es a *_ptr az uint8_t akkor szinten tudsz egyszerusiteni a dolgok meneten.