¿Qué sucede antes de la primera instrucción en un µC? [cerrado]

Estaba leyendo un libro de Elecia White (O'reilly) recientemente y llegué a una pregunta:

  • ¿Qué sucede antes de main()?

En realidad, tan pronto como el contador de programas está en la primera instrucción, supongo que estoy familiarizado con el proceso. Pero, ¿qué sucede cuando el voltaje llega por primera vez al procesador?

Hasta donde yo sé, cada procesador tiene una línea RESET, que se activa hasta que todos los CLK y PLL se estabilizan, pero. Mi proceso se parece a esto:

1) Los condensadores acumulan toda la energía que pueden obtener

2) Los XTAL comienzan a funcionar tan pronto como su voltaje de suministro sea suficiente

3) Después de eso, el PLL comienza a estabilizarse

4) ?

5) Algo en alguna parte reconoce que los circuitos están listos y suelta el RESET

6) Beneficio!!

¿Qué procesos me perdí? ¿Cómo sabe Algo en algún lugar cuándo liberar el REINICIO? ¿Y cuánto tiempo suelen tardar estos procesos?

Lea sobre la secuencia de arranque del micro específico y sobre el código de inicio del compilador específico. Ahora tienes suficientes palabras clave.
Eso supone que la MCU tiene un PLL, no todos lo tienen. En general, de cualquier manera, hay algún tipo de contador que comienza a contar con algún estímulo (la potencia alcanza un cierto umbral, la señal de bloqueo PLL se afirma, el pin de reinicio se desactiva, lo que sea)
Muchos procesadores y microcontroladores tienen circuitos internos POR (encendido y reinicio). Otra palabra clave para buscar.
El título y el cuerpo hacen dos preguntas completamente diferentes. Pasan muchas cosas entre la primera instrucción y main(). Busque en su libc startup.S y crt0.c (nombres típicos para los archivos de código de inicio).

Respuestas (1)

Ayer, leí por casualidad el proceso de inicio del ATtiny10 que usaré en mi próximo proyecto. Tiene toda una sección sobre lo que hace en particular. Estoy seguro de que los procesadores más complejos tienen todo tipo de funciones de prueba integradas y otros trabajos preparatorios antes de saltar al código de arranque:

8.5. A partir de

8.5.1. Comenzando desde el restablecimiento
El restablecimiento interno se afirma inmediatamente cuando se activa una fuente de restablecimiento. El restablecimiento interno se mantiene activo hasta que se libera la fuente de restablecimiento y se completa la secuencia de inicio. La secuencia de puesta en marcha incluye tres pasos, como sigue.

  1. El primer paso después de que se haya liberado la fuente de restablecimiento consiste en que el dispositivo cuente el tiempo de inicio del restablecimiento. El propósito de este reinicio del tiempo de inicio es garantizar que el voltaje de suministro haya alcanzado niveles suficientes. El tiempo de reinicio de puesta en marcha se cuenta utilizando el oscilador interno de 128 kHz.

Nota: La lógica de arranque no supervisa la tensión de alimentación real. El dispositivo contará hasta que haya transcurrido el tiempo de reinicio de puesta en marcha, incluso si el dispositivo ha alcanzado niveles de voltaje de suministro suficientes antes.

  1. El segundo paso es contar el tiempo de inicio del oscilador, lo que garantiza que el oscilador interno calibrado haya alcanzado un estado estable antes de que las otras partes del sistema lo utilicen. El oscilador interno calibrado debe oscilar durante un número mínimo de ciclos antes de que pueda considerarse estable.

  2. El último paso antes de liberar el reinicio interno es cargar la calibración y los valores de configuración de la Memoria No Volátil para configurar el dispositivo correctamente. El tiempo de configuración se muestra en la siguiente tabla.

Table 8-2:  Start-up Times when Using the Internal Calibrated
            Oscillator with Normal start-up time

| Reset | Oscillator | Configuration | Total start-up time         |  
| ----- | ---------- | ------------- | -------------------         |  
| 64 ms | 6 cycles   | 21 cycles     | 64 ms + 6 oscillator cycles |  
|       |            |               | + 21 system clock cycles    |

Luego pasa a describir el procedimiento de reinicio:

  1. Control y reinicio del sistema

10.1. Restablecer el AVR

Durante el restablecimiento, todos los registros de E/S se establecen en sus valores iniciales y el programa comienza a ejecutarse desde el vector de restablecimiento. La instrucción colocada en el vector de reinicio debe ser una instrucción de salto relativo (RJMP) a la rutina de manejo de reinicio.