En el lenguaje C de Keil uVision4, ¿se pueden compilar subrutinas no llamadas?
Son software diferentes.
2. "¿Por qué 8051 no puede compilar automáticamente subrutinas no llamadas?"
Porque el usuario puede llamar implícitamente un programa de Word en ensamblador.
Apoyo lo que dijiste "Al compilar ARM (LPC1768), si no se llaman algunas subrutinas, no habrá ninguna advertencia y los programas que no se llamen no se compilarán en código".
No importa cómo programes, es posible llamar a una función implícitamente, por ejemplo a través de un puntero de función. Por lo tanto, no compilar una subrutina que no se llame explícitamente viola claramente la intención del programador. Hay dos posibilidades: la configuración predeterminada del proyecto es inapropiada; o es necesario agregar descripciones de tipos especiales o modificadores de compilación para dichas subrutinas.
La mejor fuente de información sobre las diferencias entre estas dos suites de compilación es la documentación que viene con ellas. Estos documentos tienen un tamaño de varios terabytes y le serán de gran beneficio después de leerlos.
El mejor lugar para comenzar es con la documentación.