Edit3: Según lo solicitado, voy a ser más específico acerca de mi problema, la descripción anterior aún está debajo
Un motor no debe activarse más de MAX_TIME horas (20 horas consecutivas o no) durante una ventana de tiempo variable de WINDOW_TIME horas (72 horas). Cada EJEMPLO DE MUESTRA (1 minuto), el software verifica si el motor debe estar encendido o apagado. Mi idea fue crear una marca de tiempo en un evento ascendente / descendente del estado del motor y almacenarlos en un búfer. Este búfer se evaluará cada SAMPLE_TIME para verificar si la suma de la marca de tiempo no es mayor que MAX_TIME . Debido a la ventana deslizante, el búfer también debe actualizarse para eliminar la marca de tiempo que sea demasiado antigua y agregar nuevos.
Tengo memoria limitada (alrededor de 60 bytes). Estoy buscando algún tipo de algoritmo que pueda usarse para manejar este problema (con un enfoque integrado si es posible, al menos para la huella de memoria)
Según los comentarios debo:
- reduce el período SAMPLE_TIME para reducir la huella de memoria de mis búferes. Si evalúo el estado del motor cada 10 minutos, que es el tiempo máximo para mi aplicación, todavía tengo (72 * 60) / 10 = 432 datos para almacenar si es el peor de los casos y el motor se enciende y se apaga cada vez. 10 minutos. Se puede almacenar como bits (ON u OFF), por lo que son 54 bytes. El problema con esta solución es que cuando el software verifica si el motor está ENCENDIDO, podría ser el caso, incluso si los últimos 9 minutos estuvo APAGADO, y esto contará como 10 minutos de activación del motor
Descripción anterior:
Tengo un proyecto de software integrado donde necesito verificar si un motor no se activó con demasiada frecuencia durante una ventana de tiempo. Cada minuto el El programa adquiere datos que indican si el motor debe o no debe ser activado. Durante una ventana de tiempo de 72 horas, el motor no debe ser activado más de 20 horas en total (no es necesario que sean 20 horas consecutivo), es por eso que necesito recibir una advertencia cuando esto suceda.
Estoy usando un microcontrolador de Renesas (RL78) y no tengo ninguno OS.
Ya que tengo recursos limitados y la ventana de tiempo es enorme, pensé de usar algún tipo de marca de tiempo. Cuando el sistema active el motor a la marca de tiempo se guarda y se desactiva se guarda otra marca de tiempo y sigue Una vez que llegué a las primeras 72 horas puedo calcular cómo Durante mucho tiempo el motor se activó gracias a las múltiples marcas de tiempo. los las marcas de tiempo se borran cuando hay fuera de la ventana (ya que es 'en movimiento').
Supongo que hay algo más fácil pero no sé por dónde empezar.
Edit1: necesito comprobar si el período de 20 horas se alcanza dentro del 72 horas, y si es el caso, establece una bandera.
Edit2: tengo un tamaño de RAM realmente limitado, alrededor de 60 bytes disponibles