1

それで、Linux SO の msp430fx 用に C で書かれたコードをコンパイルしようとしています。最近 mspgcc の新しいバージョンを再コンパイルしました。以前に使用されたのは 4.3 で、拡張モード (20 ビット -mlarge) との互換性/安定性がなかったためです。

このサイトをフォローしました。

インストール後、私は単純な(メイン、いくつかのランダム関数を呼び出す)を実行し、それはうまくコンパイルされましたが、今、この大きなプロジェクトをコンパイルすると、最後にこのエラーが発生します:

msp430-gcc -o build/MoteISTv5_mspgcc/projects/common/03oos_macpong_prog -mmcu=msp430f5438a -Wall -Wno-main -mlarge -O0 -g -ggdb build/MoteISTv5_mspgcc/projects/common/03oos_macpong/03oos_macpong.o -Lbuild/MoteISTv5_mspgcc/ bsp/boards -Lbuild/MoteISTv5_mspgcc/kernel/openos -Lbuild/MoteISTv5_mspgcc/drivers -Lbuild/MoteISTv5_mspgcc/openstack -Lbuild/MoteISTv5_mspgcc/openapps -lopenstack -lopenapps -lkernel -ldrivers -lbsp /opt/msp430-toolchain/lib/gcc/ msp430-none-elf/4.9.1/../../../../msp430-none-elf/bin/ld: リンカー スクリプト ファイルを開けません msp430f5438a.ld: そのようなファイルまたはディレクトリはありません collect2: エラー: ld は 1 つの終了ステータス scons を返しました: *** [build/MoteISTv5_mspgcc/projects/common/03oos_macpong_prog] エラー 1 scons: エラーのためにビルドが終了しました。

私はコンパイラについてあまり理解していないので、この問題を解決する助けが必要です。誰でも助けることができますか?

事前にサンクス、

ディオゴ・ゲラ

4

1 に答える 1

0

編集: msp430-elf-gcc のこの新しいバージョンでは、この関数は __read_status_register() ではなく _read_SR() と名付けられています。

======================/ ===================== / === ==================

どうやら、.ld ファイルのディレクトリを -L を使用してコンパイラ フラグに強制する必要があったようです。

しかし、新しい msp430-gcc v4.9.1 では __read_status_register 関数を認識しませんが、mspgcc-legacy (4.6.3) では問題なくコンパイルできました...

ブラウジングを行ったところ、どうやら bin ライブラリは __「特別なプロセッサ機能」のほとんどをサポートしていないようです。彼らは、インライン アセンブリを使用して特別なレジスタにアクセスする必要があると言いましたが、これは厄介です。「なぜ彼らはそのサポートを削除するのですか?

インライン アセンブリを使用する必要がある場合は、__read_status_register() の例を次に示します。

static inline __attribute__((always_inline))
unsigned int __read_status_register( void){
    unsigned int xReturn;
    asm volatile( "MOV  R2, %0"
                : "=r"  (xReturn)); // output parameters
    return xReturn;
}

詳細については、私が本当に役立つとわかったこのサイトを使用できます。

于 2015-07-29T22:54:22.557 に答える