Alias do GCC para funcionar fora da unidade de tradução -AKA- essa é a ferramenta certa para o trabalho?
Estou trabalhando com o FreeRTOS em um STM32 (Cortex-M3) e usando a biblioteca CMSIS do ST para inicializar tud
A biblioteca CMSIS define o símbolo fracoSVC_Handler
no arquivo ".s" de inicialização. Ele deve ser substituído em algum lugar para obter seu ISR na tabela de vetores de interrupção. O FreeRTOS definevPortSVCHandler
, que é o ISR que eu quero que lide com a interrupção do SV
Gostaria de "colar" os dois juntos usando o código do meu aplicativo (ou seja, sem modificar o FreeRTOS ou o código-fonte CMSIS). Eu pensei que um alias seria a ferramenta certa para o trabalho, então tentei isso (em um arquivo fonte separado, main.c):
void SVC_Handler(void) __attribute__ ((alias ("vPortSVCHandler")));
sso resulta em:error: 'SVC_Handler' aliased to undefined symbol 'vPortSVCHandler'
Volta, de acordo com a documentação do GCC aquihttp: //gcc.gnu.org/onlinedocs/gcc/Function-Attributes.htm, para usar oalias
, você não pode alias um símbolo fora da unidade de tradução. Então pensei em tentarextern
o símbolo em main.c assim:
extern void vPortSVCHandler( void ) __attribute__ (( naked ));
void SVC_Handler(void) __attribute__ ((alias ("vPortSVCHandler")));
Isto gera o mesmo erro. Alguma sugestão??
Gostaria muito de evitar modificar qualquer uma das bibliotecas. Eu sei que eu poderia escrever uma funçãoSVC_Handler
que simplesmente chamavPortSVCHandler
, mas isso poderia adicionar uma sobrecarga desnecessária ao ISR (possivelmente dependendo das configurações de otimização). Nota: Os exemplos do FreeRTOS fazem isso por meio de um arquivo de inicialização personalizado. Estou procurando uma maneira de fazer isso de Co meu script vinculador.