¿Cuál es la mejor manera de almacenar la fecha y la hora en eeprom utilizando menos bits posibles?

0

Quiero guardar los datos asociados a una marca de tiempo (como un registrador de datos) a lo largo de un mes, en una memoria muy pequeña (probablemente solo 1024 bytes). Estaba pensando en usar el tiempo de época para guardar la marca de tiempo pero ya toma 4 bytes. ¿Así que estoy buscando una manera de guardar el tamaño de los datos de fecha u hora, idea?

EDITAR: para ser más precisos, la periodicidad de los registros cambiará de acuerdo con el rango del período (máximo un mes): debe ser cada 15 minutos o cada hora, por ejemplo. De todos modos, en este caso no tiene sentido tener una "segunda" resolución. ¡Pensé también en registrar un valor de fecha / hora de inicio y solo un desplazamiento de tiempo para cada registro!

    
pregunta cHab

1 respuesta

2

Comience utilizando una representación compacta, un número binario de tics por tiempo, en lugar de algo menos eficiente como una cadena decimal ASCII. Elija su marca para ser lo más grande posible, para guardar bits.

Luego, si puede garantizar que sus eventos ocurren con un período máximo especificable entre ellos (y si no puede, puede solucionar esto registrando un evento no ficticio si el período estaba a punto de superarse), entonces El registro de los deltas entre eventos será un próximo paso simple. Si sus eventos son uno por día y desea registrar sin ambigüedad su ocurrencia durante un mes, a la misma resolución, cada delta necesitará 5 bits menos que el tiempo absoluto.

Cada vez que tiene que insertar un evento de embalaje ficticio, introduce algo de ineficiencia, así que elija su período de garantía mínimo cuidadosamente.

Finalmente, si la ocurrencia típica de sus eventos es muy no aleatoria, podría considerar codificar sus deltas con Huffman, o codificación de Huffman, para escurrir aún más el último bit de no incertidumbre de ellos. Aquí es donde puede hacer que sus eventos de empaque sean menos costosos, asignándoles menos bits que a los eventos reales.

Por ejemplo, un evento de empaquetado podría ser un solo bit. Un delta de tiempo tendría un cero inicial y siempre sería n bits. Esa no es la codificación de Huffman verdadera, pero hace una cosa similar de reducir el número de bits requeridos, dependiendo de su elección del período de tiempo mínimo. Cuanto más corto sea el tiempo mínimo, más pequeño puede hacer n, pero más eventos de embalaje necesita. Guarda (n-1) bits por evento de embalaje, pero sufre un bit adicional por evento real. Solo usted sabe cuáles son las estadísticas de los tiempos de llegada de su evento, por lo que solo usted podrá obtener una elección óptima de un período mínimo.

EDITAR: habiendo visto tu edición

Si los tiempos de grabación son regulares (su MCU a cargo de la sincronización), entonces no es necesario almacenar ningún tiempo, aparte de la hora de inicio. Si son nominalmente regulares, pero un sistema externo entrega las mediciones a veces un minuto tarde, a veces 3 minutos tarde, y esa variación es importante, entonces solo registre esa variación de la esperada, no todo el tiempo delta

Básicamente, cualquier cosa que puedas predecir, no tienes que almacenar. Trabaja duro para predecir todo lo que puedas. Luego guarde las diferencias, a la resolución mínima, en una forma compacta.

    
respondido por el Neil_UK

Lea otras preguntas en las etiquetas