Mich verwirrt etwas anderes viel mehr:
Du ballerst ziellos mit Pointern um dich - du kannst einen Pointer auf einen uint8_t nicht mit einem uint8_t vergleichen!
pread und pwrite sind Zeiger auf den Speicher, top und bottom simple Byte-Werte (und definitiv keine Zeiger)
Vielleicht solltest du dir zuerst einmal die Beispiele aus dem RN-Wissen ansehen (da gibts einen Fifo in C), bevor du mit deinen Pointern noch jemanden verletzt

mfG
Markus