Pregunta de firmware incorporada - volcado de memoria

1

Ok, entonces la historia de atrás es la siguiente. Obtuve una entrevista de código en línea con una empresa que permanecerá sin nombre.

Sé que no estoy listo para un trabajo allí, pero una persona privilegiada básicamente me dio la oportunidad. De todos modos a continuación hay una imagen de la pregunta.

Tengo experiencia en la programación de registros y manejo de microcontroladores, pero todo esto es por mi cuenta, por lo que nunca he visto el "código real de la industria según el estándar", por así decirlo. Definitivamente nunca he lidiado con ningún "volcado de memoria" desde un microcontrolador, porque bueno, nunca tuve tal error o ni siquiera sabía que podía hacer eso ...

Mi pregunta es doble ... primero son las preguntas en la imagen ... si alguien puede responderlas ... y mi otra pregunta es ... si falla un microcontrolador o algo sale mal y se detiene trabajando entonces como hace un volcado de memoria? Me parece que sería necesario que funcionara para ejecutar algo así. De lo contrario, solo obtendrás el volcado de memoria de cómo se veían las cosas "antes" del fallo.

    
pregunta Edwin Fairchild

3 respuestas

0

El volcado de memoria en cuestión no se tomó en el bloqueo. Fue tomada para la depuración. Se crea un volcado de memoria 'en el bloqueo' para un error de software (excepción) detectado en el tiempo de ejecución por el programa o el depurador.

La pregunta es simple. El 'volcado' contiene una memoria ocupada por una instancia de la estructura packet_S. Solo necesita interpretar los bytes en tipos de datos de variables miembro. Y la estructura es muy simple. Toma 1 + 2 * 2 + 4 bytes.

El contenido de la estructura comienza en 0x1010, por lo que count es 0x6F. Esto no es afectado por 'endianes'. Los ints y los largos se ven afectados por el orden de los bytes, por lo que debe interpretarlos para A y B.

    
respondido por el Juraj
2

Esta es una pregunta un poco engañosa. Sin el embalaje de la estructura, cada elemento se alineará con un límite de 4 bytes. Esto significa que hay bastantes bytes de relleno en la estructura. Aunque estos no son cero, su valor es irrelevante. También tenga en cuenta que el compilador no puede reordenar los elementos en la estructura. Esta información significa que el diseño de la memoria de la estructura está bien definido.

Little endian significa que la dirección más baja es el byte menos significativo. Entonces podemos calcular los valores de la estructura de la siguiente manera:

count = 0x6f
data[0] = 0x9994
data[1] = 0xb2ca
timestamp = 0x2ec5b98e
    
respondido por el Jon
1
  

si un microcontrolador falla o algo falla y deja de funcionar, ¿cómo hace un volcado de memoria?

Generalmente no lo hace. Hacer un volcado de memoria amplio de toda la RAM es arriesgado, ya que en muchas arquitecturas de microcontroladores, hacer una lectura desde ciertas direcciones SFR tiene efectos no deseados, por lo que no puede iterar ingenuamente a través del direccionamiento indirecto en todo el espacio de direcciones de la RAM.

Si esto es algo que realmente necesitas, una opción es instalar un microcontrolador de estilo de los años 80 con un bus de memoria externo y un perro guardián. Si el watchdog expira, tenga un microcontrolador post-mortem secundario que guarde el contenido de la RAM en un chip EEPROM (o lo que sea).

    
respondido por el Reinderien

Lea otras preguntas en las etiquetas