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.

ersão do @Compiler: gcc versão 4.5.2 (Sourcery G ++ Lite 2011.03-42) Target: arm-none-eabi

questionAnswers(4)

yourAnswerToTheQuestion