3

STM32 hereの割り込みベクトルを定義するコードを読んでいます。何らかの理由で、__attribute__((weak))との両方#pragma weakが使用されます。

void __attribute__((weak)) NMI_Handler(void); /* NMI Handler */ // [line 12]
#pragma weak NMI_Handler = Default_Handler    /* NMI handler */ // [line 48]

__attribute__((weak))と の両方を使用すると、どういうわけか#pragma weak冗長に感じます。

それらの1つがなくても大丈夫ですか?このスタイルは標準ですか?

4

1 に答える 1

2

あなたは正しいですが...

#pragma weak NMI_Handler = Default_Handler 

単独で意図したことを達成できます。ただし__attribute__((weak))、次の理由から、関数プロトタイプに追加することをお勧めします -

ファイルが巨大で、定義とプロトタイプがファイル全体に散らばっていると仮定します。ここで、IDE/エディタを使用して and のプロトタイプにジャンプし、NMI_Handlerそこに到着して__attribute__((weak))添付が表示されNMI_Handlerない場合は、別の場所で定義されていると想定しNMI_Handlerてガチョウ狩りに行き、どこにも行きません! が明示的に追加されたので__attribute__((weak))、この関数の定義が存在しない可能性があることがわかり、存在しない/存在しない可能性のある関数の実際の定義を見つける代わりに、プラグマ エイリアシングを検索できるようになりました。

于 2012-04-23T11:24:23.543 に答える