Propósito / Uso de los segmentos de arranque

1

Me gustaría saber más sobre el propósito de un segmento de arranque, el segmento de la memoria del programa que declara el usuario, y me gustaría hacer las siguientes preguntas para tener un entendimiento conciso.

  1. ¿Propósito de un segmento de arranque?
  2. ¿Qué funcionalistas permite que no puedas hacer otra cosa?
  3. ¿Puedo tener un ejemplo?
  4. ¿Has visto algún ejemplo que te haya hecho pensar que "esta es una manera realmente inteligente / genial de hacer esto!"

También me gustaría agradecerle de antemano por su tiempo y por compartir sus experiencias,

Saludos cordiales,

    
pregunta VolT

2 respuestas

3

Para agregar a la respuesta de Dave Tweed: muchos IC flash tienen un sector de arranque específicamente designado. Dependiendo del dispositivo específico, hay diferentes características del sector de arranque en comparación con los sectores restantes. Por ejemplo:

  • Algunos dispositivos permiten la protección contra escritura de hardware de ese sector por separado del resto del dispositivo. Esto permite que el diseño prohíba absolutamente actualizar el cargador de arranque en el campo mientras permite la actualización en el sistema del código restante. Esto es importante ya que si el cargador de arranque está dañado, es probable que el dispositivo esté muerto, mientras que el cargador de arranque puede recuperarse de otros daños en el dispositivo.
  • Algunos dispositivos hacen que el sector de arranque sea más pequeño que el tamaño del sector normal (con uno o más sectores pequeños para completar el espacio). Esto permite al diseñador del sistema dedicar una parte más pequeña de la memoria flash al cargador de arranque.

Dado que algunos procesadores inician el arranque desde la dirección flash más baja y algunos desde la más alta, a menudo encontrará dos variantes de dispositivos flash, con el secotr de arranque especial en el extremo superior o inferior.

    
respondido por el DoxyLover
3

Su pregunta no es muy clara, pero voy a intentar una respuesta de todos modos.

Cuando una MCU sale del reinicio del hardware, los periféricos generalmente están en estado inactivo, pero la memoria interna y los registros (excepto el PC y el registro de estado) generalmente no están inicializados.

Sin embargo, y especialmente cuando se trabaja con un lenguaje de alto nivel (compilado), la mayoría del código se genera para trabajar en un entorno en el que ciertos registros tienen valores bien definidos y la memoria tiene ciertas estructuras de datos en su lugar, como como una pila, un montón y datos globales / estáticos inicializados.

El "segmento de arranque" es la tarea de pasar del primer estado de cosas al segundo. Está escrito para funcionar en el "entorno" mínimo creado por el reinicio del hardware y crea el entorno más estructurado que espera el código de la aplicación.

Si la MCU también tiene acceso a la memoria externa, a veces hay un controlador de memoria que debe inicializarse, especialmente si esa memoria es SDRAM, y luego las estructuras de datos en la memoria que residen allí también se pueden inicializar. Si el código ejecutable o los datos inicializados residen en esa memoria externa, esto debe hacerse antes de que se carguen el código de la aplicación y los segmentos de datos.

El segmento de arranque normalmente se incluye en la "biblioteca de tiempo de ejecución" de cualquier sistema de desarrollo de software con el que esté trabajando, y rara vez necesita lidiar con él. Sin embargo, es posible que deba configurarse con parámetros específicos de la aplicación, como la configuración de registro del controlador de memoria y la cantidad de memoria que se asignará a la pila, el montón, etc.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas