2

GCC でコンパイルされた ARM アセンブリ コードを次に示します。

からのスニペットstartup.s:

    .globl  Default_Handler
    .type   Default_Handler, %function
Default_Handler:
     B       .
    .size   Default_Handler, . - Default_Handler

    .macro  IRQ handler
    .weak   \handler
    .set    \handler, Default_Handler
    .endm

IRQ  POWER_CLOCK_IRQHandler

file1.c

void POWER_CLOCK_IRQHandler(void)
{
        //Do some things...
}

このコードでPOWER_CLOCK_IRQHandlerは、 は弱いシンボルです。コードが実行されると、コード fromfile1が実行されます。

ここDefault_Handlerで、別のファイルで定義し、その定義を .xml でコメントアウトしますstartup.s

.globl  Default_Handler
.type   Default_Handler, %function
//Default_Handler:
//    B       .
    .size   Default_Handler, . - Default_Handler

    .macro  IRQ handler
    .weak   \handler
    .set    \handler, Default_Handler
    .endm

    IRQ  POWER_CLOCK_IRQHandler

ファイル 3:

void Default_Handler(void)
{
    //Do some other things
}

の定義をDefault_Handler別のファイルに記述したりDefault_Handler、weak として宣言したりすると、POWER_CLOCK_IRQHandlerは に対してリンクされDefault_Handlerます。POWER_CLOCK_IRQHandlerリンカは弱い属性を見逃しており、 でそれをリンクしません。file1.cで指定された式を解決しようとしました.set

誰かが正確に何が起こるか説明できますか? 実装が 以外のファイルにPOWER_CLOCK_IRQHandlerある場合に弱い属性を有効に保つための適切な解決策は何ですか?Default_Handlerstartup.s

4

0 に答える 0