RAM noinit
Una sección de RAM que el código de arranque deja intacta a propósito, para que su contenido sobreviva a un reinicio suave.
El código de arranque pone a cero .bss y rellena .data en cada reinicio. Casi siempre es lo deseable, pero también borra cualquier pista de por qué se reinició el sistema. Con una sección propia —marcada NOLOAD en el script de enlazado y asignada con __attribute__((section(".noinit")))— las variables sobreviven a un reinicio del watchdog, a uno por software o a un salto al bootloader.
Lo habitual es guardar ahí un registro del fallo con contador de programa y código de error, un contador de reinicios seguidos o una bandera que pide al bootloader que se quede quieto. Un corte de corriente es otra historia: tras el encendido, la sección contiene basura. Por eso casi siempre se protege con un número mágico o una suma de verificación, para que el firmware distinga un mensaje de su vida anterior de bits aleatorios.