Actualmente estoy trabajando en un proyecto que implica el registro rápido y continuo de una métrica bastante específica de la aplicación durante un largo periodo de tiempo. Para ello he acabado utilizando un NXP M0 y un chip flash SPI de 32MiB. El registro es continuo y tiene que durar muchos años en el campo (más de 10), y es revisado periódicamente por un humano para detectar tendencias. Eventualmente el buffer se llena y empieza a sobrescribir datos antiguos, lo cual está perfectamente bien. Se me ocurrió un algoritmo sencillo para recorrer todo el dispositivo flash y encontrar el cabezal actual después de un encendido (el dispositivo se apaga con bastante frecuencia fuera de mi control) para que el registro pueda continuar donde lo dejó. Puedo hacer fuerza bruta a través de este paseo y hacerlo con ~4s como el peor de los casos.
Esto me hizo pensar, ¿hay algún sistema de archivos estructurados de registro que se adapte a los dispositivos flash y a los microcontroladores? JFFS y todos los demás conocidos Logs estructurados Imagino que sería un poco pesado para un simple microcontrolador (depende de la aplicación, claro). Para ser más específico, me gustaría saber de algún algoritmo que esté diseñado para ser específicamente un registro circular con un tiempo de búsqueda de cabeza rápido y/o alguno que esté diseñado para un sistema de archivos "tradicional" en un dispositivo flash que pueda ser ejecutado en un microcontrolador. Tradicional en este sentido es algo como JFFS donde hay una estructura de datos que representa una colección de archivos mutables de acceso aleatorio en un espacio de nombres jerárquico.
0 votos
¿es FAT32 o FAT16 en una tarjeta SD demasiado lento?
2 votos
Esta pregunta está totalmente dentro del tema aquí, pero si no obtienes grandes respuestas, probablemente StackOverflow pueda ayudarte. ¡Esperemos que podamos obtener algunas buenas respuestas aquí, sin embargo!
0 votos
@vicatcu No es que sea demasiado lento, para mi aplicación la tarjeta SD más el conector es más costoso y las tarjetas SD pueden ser menos fiables. Kellenjb No estaba seguro de dónde ponerlo. Como muchas de las preguntas de diseño embebido esta especie de cae en el medio. Si no va bien aquí lo movería con gusto.
0 votos
¿Es un chip de flash sin procesar? Si es así, ¿cómo se gestionan los bloques muertos? Una gran parte de la implementación de flash FS se ocupa de los bloques muertos. Si crees que JFFS/JFFS2 es demasiado pesado, tal vez quieras echar un vistazo a YAFFS. Al menos parece un sistema de archivos muy sencillo, por lo que debería ser bastante ligero.
0 votos
Sí, lo es. Los bloques defectuosos no son terribles en esta aplicación en particular, ya que es tan a largo plazo que los datos extraídos son sólo una tendencia aproximada, y en la mayoría de los casos dudo que el registro se utilice en absoluto.
0 votos
Tienes razón en que YAFFS es bastante ligero, y me imagino que podría ser el más pequeño que pueda conseguir que actúe como un sistema de archivos "tradicional" que soporte un dispositivo flash. La huella es de aproximadamente 40-50kB de código, y una alta huella de RAM de ~400kB para un dispositivo NAND de 64MB. Esto podría ser un poco caro dependiendo del sistema utilizado. Por lo general, una estructura de datos con archivos mutables de acceso aleatorio no será necesaria en un entorno de microcontroladores, pero es un divertido experimento mental.