7.5. ROMFS

ROMFS este un sistem de fișiere accesibil doar pentru citire, integrat în cameră la momentul compilării și montat la /rom/. Blocurile de fișiere se află în memoria flash și sunt mapate în spațiul de adrese, astfel încât deschiderea unui fișier de acolo expune octeții săi direct din flash, fără nicio copiere în RAM. Modelele, fișierele de etichete și cascadele Haar sunt conținutul tipic.

7.5.1. De ce se află modelele aici

Două motive. Primul este compromisul de RAM deja menționat: un model de pe /rom/ se citește pe loc din flash și nu consumă RAM dincolo de arena sa de tensori, în timp ce un model de pe /sdcard/ este copiat în RAM la momentul încărcării și consumă dimensiunea fișierului peste arenă. Pe camerele mai mici, această diferență este adesea diferența dintre a încăpea și a nu încăpea.

Al doilea este NPU-ul. NPU-ul de pe N6 și Ethos-U de pe AE3 își așteaptă ponderile într-o regiune adresabilă în memorie cu alinierea corectă, iar instrumentarul de compilare care compilează un model pentru aceste acceleratoare (STEdgeAI pentru NPU-ul de pe N6, Vela pentru Ethos-U de pe AE3) plasează rezultatul în ROMFS cu acest aranjament. Un model încărcat de pe /sdcard/ ajunge în memoria heap RAM, ceea ce este în regulă pentru căile pe CPU folosite de H7 și RT1062, dar renunță la calea NPU direct-din-flash în jurul căreia au fost proiectate camerele mai rapide.

7.5.2. Un sistem de fișiere MicroPython obișnuit

În timpul execuției, ROMFS se comportă ca orice alt sistem de fișiere MicroPython montat: os.listdir() enumeră /rom/, builtins.open() deschide fișiere din el, iar o cale sub el poate fi transmisă oricărui API care acceptă o cale. Singura restricție este că scripturile nu pot scrie în el – partiția este accesibilă doar pentru citire în timpul execuției.

OpenMV IDE poate edita ROMFS. Acesta expune conținutul partiției în browserul său de fișiere și permite adăugarea, eliminarea și înlocuirea fișierelor de acolo în același mod în care o face pentru cardul SD. Utilizarea prevăzută este de a adăuga modele personalizate, fișiere de etichete, scripturi ajutătoare sau orice altă resursă pe care aplicația trebuie să o livreze împreună cu camera. Tot ceea ce este plasat în /rom/ prin IDE primește aceeași stocare direct-din-flash, accesibilă NPU-ului, pe care o au modelele preîncărcate.