Auf die Schnelle seh ich nichts, woran es scheitern sollte.
Aber statt ((ring_addr-BEGINNING_POINTER)*4) könnte ((ring_addr-BEGINNING_POINTER)<<2) schneller sein.

Ich tät lieber ein SRAM mit Lithiumzelle nehmen.
Ein DS1307 z.B. hat 64 byte, schicke Anschlüsse für ne Knopfzelle und ne RTC kann man öfter mal gebrauchen