Script de enlazado
El archivo que le dice al enlazador en qué lugar de la memoria va cada parte del programa: un detalle en un PC, el mapa entero en un firmware.
Un sistema operativo carga los programas donde le parece. Un microcontrolador no tiene sistema operativo, solo flash en una dirección y RAM en otra, y el programa tiene que encajar exactamente. El script de enlazado (.ld en GNU ld) declara esas regiones en un bloque MEMORY y luego reparte las secciones: código y constantes (.text, .rodata) en flash, variables puestas a cero (.bss) en RAM.
El caso interesante es .data, las variables inicializadas, que deben vivir en RAM pero cuyos valores iniciales tienen que sobrevivir a un apagado. Por eso el script les asigna dos direcciones, una en flash y otra en RAM, y el código de arranque las copia antes de main(). Aquí también se definen símbolos como la cima de la pila. Casi todo el mundo usa la plantilla del fabricante y no la toca nunca, hasta que hay que hacer sitio a un bootloader.