Ok, entonces la historia de fondo es esta. Conseguí 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 básicamente me dieron la oportunidad de una fuente. De todos modos, a continuación hay una imagen de la pregunta.
Tengo experiencia en la programación de registros y en el manejo de microcontroladores, pero todo esto es por mi cuenta, por lo que nunca he visto "código estándar de la industria real", por así decirlo. Definitivamente nunca he tratado con ningún "volcado de memoria" de un microcontrolador, porque bueno, nunca he tenido tal error o incluso sabía que podría hacer eso ...
Mi pregunta es doble... primero son las preguntas de la imagen... si alguien puede responderlas... y mi otra pregunta es... si un microcontrolador falla o algo sale mal y deja de funcionar, entonces cómo hace un volcado de memoria? me parece que requeriría que esté en condiciones de funcionar para ejecutar algo así. de lo contrario, solo obtendrá el volcado de memoria de cómo se veían las cosas "antes" del bloqueo.
El volcado de memoria en cuestión no se realizó en el momento del bloqueo. Fue tomado para la depuración. Se crea un volcado de memoria 'en caso de bloqueo' para un error de software (excepción) detectado en tiempo de ejecución por el programa o el depurador.
La pregunta es sencilla. El 'volcado' contiene una memoria ocupada por una instancia de la estructura package_S. Solo necesita interpretar los bytes en tipos de datos de variables miembro. Y la estructura es muy simple. Se necesitan 1 + 2 * 2 + 4 bytes.
El contenido de la estructura comienza en 0x1010, por lo que count
es 0x6F. Esto no se ve afectado por 'endianes'. Los enteros y largos se ven afectados por el orden de los bytes, por lo que debe interpretarlos para A y B.
Esta es una pregunta con trampa. Sin empaquetamiento de 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
si un microcontrolador falla o algo sale mal 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, porque en muchas arquitecturas de microcontroladores, hacer una lectura de ciertas direcciones SFR tiene efectos no deseados, por lo que no puede iterar ingenuamente a través de direccionamiento indirecto en todo el espacio de direcciones de RAM.
Si esto es algo que realmente necesita, una opción es instalar un microcontrolador estilo años 80 con un bus de memoria externo y un perro guardián. Si el perro guardián se agota, tenga un microcontrolador post-mortem secundario que guarde el contenido de la RAM en un chip EEPROM (o lo que sea).
Edwin Fairchild
Juraj
Edwin Fairchild
Juraj
Edwin Fairchild
Juraj
Jon
Edwin Fairchild
Juraj