es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Algunas instrucciones simples de ARMv7 hacen que mi programa bare-metal (para raspi zero 2 w) se bloquee.

Soy un traductor de español que traduce documentos de TI. Traduce lo siguiente al español. No traduzcas el código y la salida en markdown.

Soy nuevo en la programación ARMv7 bare-metal RPi (y mi inglés no es muy puro).

Sigo este tutorial:
https://github.com/cirosantilli/raspberry-pi-bare-metal-blinker.git
como punto de partida para construir mi propio “SO” de RPi (para aprender).
Probé mi código en una Raspberry pi zero 2 W (ya que era barata y estaba disponible).

Cambié algunas líneas en main.c para hacer parpadear un LED externo, y eso funciona bien.

Pero por alguna razón, intenté agregar este código:

mov r5, #0x5
mov r6, #0x3

justo después de “_start:” en start.S

Y eso hizo que mi programa se bloqueara (es decir: mi LED externo ya no parpadea).

Lo más sorprendente es que intenté intercambiar estas dos líneas, dando:


mov r6, #0x3
mov r5, #0x5

Y entonces, mi programa funciona bien (es decir, mi LED externo está parpadeando).

Gracias por la ayuda, que tengas un buen día.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    ¡Hola!

    En primer lugar, ¡felicitaciones por comenzar a aprender programación bare-metal ARMv7 para Raspberry Pi! Sin duda es un desafío, pero vale la pena.

    En cuanto al problema que estás experimentando, es probable que se deba al hecho de que las dos líneas que has agregado en el archivo start.S modifican los registros que se utilizan en otras partes de tu código. En particular, el registro r5 se utiliza a menudo como puntero al marco de pila actual, mientras que el registro r6 se utiliza a menudo como registro temporal.

    Cuando agregas las dos líneas en el orden que has mostrado, es posible que estés sobrescribiendo algún valor importante en el que tu código depende, lo que provoca un bloqueo.

    Sin embargo, al intercambiar el orden de las dos líneas, es posible que sobrescribas un valor diferente que no afecte al resto de tu código, por lo que todo funciona sin problemas.

    Si deseas utilizar los registros r5 y r6 en tu código, es importante asegurarte de no sobrescribirlos o utilizarlos de manera conflictiva en otras partes de tu programa.

    ¡Espero que esto te ayude! Avísanos si tienes alguna otra pregunta o problema.

Comments are closed.