2017-10-02 11 views
1

次のような割り込みベクトルの集合のため.weakreferenceを宣言したい場合:startup.Sファイルまたはいくつかのフレームワークでリンク時までgcc-asの.weakreferenceを解決するのを遅らせることはできますか? (GCC)

.weakreference ISR_SPI_HANDLER, defaultExceptionHandler 

含まれますが、その後宣言した場合、それはそれを除いて非常に便利ですISR_SPI_HANDLERは、main.cファイル内の関数としてISR_SPI_HANDLER startup.Sの中ではまだに解決されています。defaultExceptionHandlerです。 weakreferenceは、ローカルスコープでのみ機能します(用語集、プレリンク)。しかしながら、 。 弱いは期待通りに機能し、main.cの定義で定義を "上書き"することができますが、そうでない場合は常に0x00に解決されます。これは明らかにデフォルトベクトル。

どうすればこの問題を解決できますか?

+1

は、別の答えとしてあなたの代替ソリューションではなく投稿質問の一環としてお願いします。 –

答えて

1

アセンブラで.weakrefを使用しないでください。代わりにISR_SPI_HANDLERを外部として使用してください。アセンブラは当然、既知の場所へのPC相対ジャンプに最適化したいと考えています。あなたはこれと戦っており、他の誰かがdefaultExceptionHandlerへの呼び出しを望むでしょう。

代わりあるいはthe linker

.text : { 
    *(.text); 
    ISR_SPI_HANDLER = DEFINED(ISR_SPI_HANDLER) ? ISR_SPI_HANDLER : defaultExceptionHandler; 
    … 
    } 

を使用し、ISR_SPI_HANDLERを呼び出す/使用している一つのファイルと別で.weakrefdefaultExceptionHandler宣言とstartup.Sを分割します。

+0

うわー、これは私が必要とするものです。私はリンカファイルでその用語を使うことができるのかどうかはわかりませんでした。私はあなたの代わりの提案について確信していません。 –

1

新しいソリューション:0x0のより

どうやら、あなたはそれを別のデフォルト値を与えるためにそれ外部シンボルにするために.weak NAMEを使用し、.set NAME VALUEでき

関連する問題