Cómo evitar que CodeVision genere el vector de interrupción

CodeVision tiene muchas características agradables, entre ellas la generación automática del vector de interrupción.

Sin embargo, ahora estoy trabajando en un gestor de arranque muy pequeño y no puedo permitirme ninguna interrupción. CodeVision todavía genera felizmente el vector de interrupción al comienzo de la memoria Flash, y no pude encontrar una manera de apagarlo.

Es crucial, ya que el vector de interrupción ocuparía el 25% del espacio en la memoria flash para el gestor de arranque más pequeño. (cargador de arranque de 128 palabras, y el vector de interrupción necesita 32 palabras para un atmega de 16k)

Establecí "Usar un archivo de inicialización de inicio externo" y uso mi propio startup.asm. Incluso si no incluyo nada sobre los vectores de interrupción, todavía se generan para el ejecutable.

¿Puedes poner tu código de inicio y configuración aquí?
Incluso si tengo mi startup.asm completamente vacío y (para la prueba) no tengo ninguna inicialización para nada (puertos, temporizadores, interrupciones, etc.), el compilador aún genera el vector de interrupción. En realidad, un startup.asm completamente vacío y un archivo fuente principal que solo contiene void main(){}aún generan los vectores de interrupción. En la configuración del proyecto no pude encontrar nada relevante, y busqué en Google posibles #pragmaconfiguraciones, sin suerte hasta ahora.
¿Cómo es su configuración de generación de código? ¿Ha puesto el tipo de programa como 'Aplicación' o 'Cargador de arranque'?
Cargador de arranque, pero pasa con los dos.
¿ Has visto estas preguntas frecuentes ? Creo que es bastante específico de gcc, pero puede valer la pena leerlo, especialmente el #18.
Sí, he visto las preguntas frecuentes, pero no tiene nada que ver con configurar este compilador específico para que no genere el vector de reinicio. ¿Tal vez podría secuestrar el proceso de vinculación de alguna manera...?
Entonces por favor aclare su pregunta. ¿Cuáles son los vectores de interrupción que desea eliminar? Los que están en la sección del gestor de arranque, ¿no? Suponiendo que el compilador en sí mismo no pueda hacer nada al respecto más que generar una tabla vectorial, ¿por qué no usar un script de enlace o similar como se describe en las preguntas frecuentes nombradas para permitir que el enlace elimine las secciones no deseadas y no utilizadas?
Porque CodeVision no es lo suficientemente flexible para hacer esto. Ni siquiera puedo ejecutar solo el enlazador por sí solo. Al menos es lo suficientemente generoso como para proporcionarme un archivo asm, no solo un hexadecimal, por lo que puedo tomar el asm generado, eliminar manualmente el vector de reinicio y luego compilar ESO con un compilador diferente, pero entonces también podría usar un compilador diferente para todo.

Respuestas (2)

En general, para eliminar una sección completa como esa, deberá usar un script de enlace personalizado y es posible que deba modificar o eliminar parte del código de inicio detrás de escena que los compiladores suelen incluir. Aunque para un gestor de arranque de 128 palabras, es posible que tenga mejor servido escribiéndolo en asamblea.

Lo sé. Esto ha sido discutido en los comentarios. La pregunta es, cómo hacerlo exactamente, ya que no pude encontrar una manera de hacerlo en el compilador mencionado. Y si escribo todo en ensamblador, todavía tengo que compilarlo en código de máquina.

El CodeVision Advanced (cuesta 50 € más que la versión estándar) tiene una opción para ello en el menú Proyecto|Configurar|Compilador C|Avanzado.