GCC alias para funcionar fuera de la unidad de traducción -AKA- ¿es esta incluso la herramienta adecuada para el trabajo?
Estoy trabajando con FreeRTOS en un STM32 (Cortex-M3) y estoy usando la biblioteca CMSIS de ST para arrancar todo.
La biblioteca CMSIS define el símbolo débilSVC_Handler
en el archivo de inicio ".s". Debe anularse en algún lugar para obtener su ISR en la tabla de vectores de interrupción. FreeRTOS definevPortSVCHandler
, que es el ISR que quiero que maneje la interrupción SVC.
Me gustaría "pegar" los dos juntos usando mi código de aplicación (es decir, sin modificar FreeRTOS o el código fuente de CMSIS). Pensé que un alias sería la herramienta adecuada para el trabajo, así que intenté esto (en un archivo fuente separado, main.c):
void SVC_Handler(void) __attribute__ ((alias ("vPortSVCHandler")));
Eso da como resultado:error: 'SVC_Handler' aliased to undefined symbol 'vPortSVCHandler'
Resulta, de acuerdo con la documentación de GCC aquíhttp: //gcc.gnu.org/onlinedocs/gcc/Function-Attributes.htm, para utilizar laalias
atributo, no puede alias un símbolo fuera de la unidad de traducción. Entonces pensé que intentaríaextern
el símbolo en main.c así:
extern void vPortSVCHandler( void ) __attribute__ (( naked ));
void SVC_Handler(void) __attribute__ ((alias ("vPortSVCHandler")));
Esto genera el mismo error. ¿¿¿Alguna sugerencia??
Realmente me gustaría evitar modificar cualquiera de las bibliotecas. Sé que podría escribir una funciónSVC_Handler
que simplemente llama avPortSVCHandler
, pero eso podría agregar una sobrecarga innecesaria al ISR (posiblemente dependiendo de la configuración de optimización). Nota: Los ejemplos de FreeRTOS logran esto a través de un archivo de inicio personalizado. Estoy buscando una manera de hacer esto desde C mi script de enlazador.