Pasos completos de codificación y carga de código fuente a un microcontrolador, Bootstrap, bootloader, código de inicio [cerrado]

0

Corrígeme si me equivoco. Estoy estudiando sistemas integrados y aprendí a desarrollar un proyecto simple de LED parpadeante en C:

  1. Escribiendo el código fuente.
  2. Código fuente de preprocesamiento.
  3. Personalizar y convertir el código fuente de c en ensamblador.
  4. Compilando el código ensamblador en el código objeto.
  5. Utilizando el script del enlazador e incluyendo el código de inicio crt0.o para vincular y crear una imagen ejecutable.
  6. Controlador en ejecución.
  7. A la espera de que el oscilador esté estable, la fuente de alimentación también es estable.
  8. el código de reinicio comienza en el vector de reinicio.
  9. se inicia el código de inicialización del hardware.
  10. se inicia el código de inicio.
  11. punto de entrada del código "principal".
  12. final de ejecución principal.

Quiero saber cuál es el trabajo del código de inicio después de finalizar main. Leí que hay un trabajo para él después de que la aplicación haya finalizado.

En segundo lugar, estoy confundido entre el gestor de arranque y el programa de arranque.

al fin creo que hay un código incorporado por el fabricante que es responsable de cargar mi archivo de imagen en mi controlador. ¿Qué es exactamente? la mayoría de las lecturas se refieren al cargador de arranque, otros dicen que el cargador de arranque no es esencial.

    
pregunta IDEN

1 respuesta

2
  

¿Cuál es el trabajo del código de inicio después de finalizar main? Leí que hay un   trabajo para él después de que la aplicación se termine.

Su trabajo es garantizar que el microcontrolador continúe actuando de manera bien definida después de que finalice main() . En un entorno independiente, el efecto de la terminación del programa es definido por la implementación , por lo tanto, lo que sucede depende del compilador particular y del entorno de compilación. En el caso de MPLab XC8, el manual del compilador dice esto: -

  

El compilador inserta un código especial al final de main () que es   ejecutado si esta función termina, es decir, una declaración de retorno dentro de main ()   se ejecuta, o la ejecución del código alcanza el derecho de terminación de main ()   abrazadera. Este código especial hace que la ejecución salte a la dirección 0, la   Restablecer vector para todos los dispositivos PIC de 8 bits. Esto esencialmente realiza un    reinicio del software .

Otros compiladores pueden actuar de manera diferente. AVR GCC simplemente deshabilita las interrupciones y las paradas, por lo que la MCU se congela hasta que se reinicia físicamente.

  

Estoy confundido entre bootloader y bootstrap.

' Bootstrapping ' es el proceso de carga de código desde el almacenamiento externo en el inicio. Se deriva de la frase "levantarse con los propios recursos". En una computadora típica, el sistema operativo es demasiado grande para caber en la ROM, por lo que se almacena en algunos medios que la CPU no puede ejecutar directamente. La ROM 'bootstrap' tiene el código suficiente para acceder a los medios y cargar el primer bit de código que ejecuta el sistema operativo.

En una MCU, el 'gestor de arranque' suele ser un código que se ejecuta en el inicio para 'grabar' un programa en la ROM Flash. Solo es necesario cuando desea instalar o actualizar el firmware sin tener que conectar la MCU a un programador externo.

Algunas MCU tienen un gestor de arranque incorporado que se activa cuando algunos pines se mantienen en niveles lógicos particulares. Otros tienen la opción de iniciar la ejecución desde un área de memoria reservada donde se coloca el código del cargador de arranque. El código de usuario puede colocarse en la misma ubicación que lo estaría en un sistema sin arranque.

Si la MCU no tiene una funcionalidad de cargador de arranque incorporada, aún puede hacerlo usando un programa escrito para hacer el trabajo, pero es posible que el código de usuario deba modificarse para que funcione con el cargador de arranque.

  

Creo que hay un código incorporado por el fabricante que es responsable   para subir mi archivo de imagen en mi controlador. ¿Qué es exactamente?

Un PIC16F877A en blanco no tiene ningún código de cargador de arranque instalado, pero puede ser agregado por el fabricante (a pedido) o por un proveedor. Si tiene que usar un programador como PICkit 2 para cargar su código, es probable que su PIC no tenga un cargador de arranque.

Lo que es exactamente depende del cargador de arranque en particular, pero en general es un código que se ejecuta al inicio que lee el código de usuario de, por ejemplo. el puerto serie de la MCU y lo graba en la ROM Flash, o si no llega nada dentro del tiempo de espera, simplemente salta al código de usuario previamente quemado. Aquí hay un ejemplo: -

PIC16BOOTLOAD: PIC16F87x / PIC16F87xA bootloader

Puede ver la fuente del lenguaje ensamblador para ver exactamente cuál es el código.

    
respondido por el Bruce Abbott

Lea otras preguntas en las etiquetas