No sé si yo lo llamaría estrellarse, pero SDCC (Small Device C Compiler) falla al compilar código formado de una manera particular:
- Objetivo: 8051
- Código tuvo que ejecutar en un 512 caché de bytes carga desde un medidor externo
- probador está en control y almacena el código - caché no puede recuperar la siguiente página
- no hay llamadas de función permitidos - el PC (contador de programa) saltaría a un lugar no residente en memoria caché ; macros del preprocesador se utilizaron para llevar a cabo la práctica de codificación modular
- Saltos (ramificación) permitida si no salta fuera de la caché
- No hay valores const - en la sección de datos del código de programa que hace que el código en caché para buscar algo no en la memoria caché - constante del preprocesador (#define) OK aquí
Las macros del preprocesador se desenrollan resultando en código plano, pero grande - todo en main(); la ejecución salta el código de inicio (la creación de la pila, etc) y comienza al principio de main()
parte relevante de esta respuesta:
De vez en cuando, SDCC se negaría a compilar el código sintácticamente correcta, con un mensaje sobre quedarse sin memoria. Esto incluso sucedió compilando en cajas de 64 bits con 8 GB de RAM.
La solución en estos casos fue dividir el firmware en piezas separadas y compilarlas por separado y ejecutarlas por separado. Es posible que las piezas se hayan podido volver a vincular, pero en ese momento no importó.
No lo intenté, pero el compilador 8051 Keil probablemente podría haber manejado el código problemático.
Por supuesto, sucede a veces, considere que un compilador también es un software. Da más miedo cuando el depurador muere. – unexist