問題タブ [codesourcery]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gcc - CodeSourcerygccを使用してコンパイルしたときにTIスターターウェアの例がBSSセグメントを正しくクリアしない理由
TIAM3359armを実行しているビーグルボーンで深刻な問題に遭遇しました。私はコードソースを使用してコードをコンパイルしています。軽量IP(lwip)を使用してhttpサーバーを提供するenet_lwipという例の1つをコンパイルしようとしました。
アプリケーションは特定の時点でクラッシュします。デバッグすることで、このコードが原因であることがわかりました。
これには非常に面白いことが起こります。lwipInitFlagが0に初期化されるため、関数はlwip_init()を呼び出すと予想されます。
さて、これは、lwIPInit関数が最初に呼び出されたときでも発生しません。これは、変数lwipInitFlagが0に設定されていないためです。
なぜなのか知りたいのですが。そのような初期化がコードに含まれている場合、コンパイラはそれをnullにするシーケンスを生成する必要があります。ただし、前に静的修飾子が付いているためか、「そのまま」のままにしておきます。なんで?
lwipInitFlagは、DDRメモリを指す.bssリンカーセクションにあります。このような静的な割り当てが初期化されることをどのように保証できますか?
今のところ、lwIPのコードをハックして、これが機能するかどうかを確認しますが、ライブラリのどこかに、初期化されない別の静的に宣言された変数がある可能性があることを警告します。
これを解決するためのヒントはありますか?
これにさらに情報を追加する:あなたの実りあるヒントの後、私はそれがどのように機能するかについてさらに混乱していると思います。だから:確かに、私はcrt*.oを呼び出したりリンクしたりしません。一方、TIスターターウェアプラットフォームには、BSSクリーンアップを行う初期化asmソースが含まれています。アドレス_bss_startと_bss_endの間でそれを行います。
リンカースクリプトを調べると、すべてがごく普通に見えます。
したがって、_bss_startはBSSブロックの前のアドレスであり、_bss_endはブロックの最後にあります。問題は、Codesourceryが生成するマップです。
生成されたマップファイルでBSSの終わりを見ると、次のことがわかります。
明らかに「何か」があります。_bss_endの後に別のBSSセクションがあり、ゼロ化されることが期待される多くのものが含まれていますが、ゼロ化は_bss_endで指定されたアドレスで終了するため、ゼロ化されません。
これがこのように行われる理由として考えられるのは、pageTableが静的に宣言されており、16kiBの境界アドレスが必要であるためです。
したがって、最後に宣言されたBSSセグメントとpageTableの間にギャップがあるため、_bss_endはbssセグメントの中央に配置されます。
ここで問題となるのは、リンカー(このarm-none-eabi-ldに使用している)に、_bss_endは実際にはBSSの最後にあり、途中ではないことを伝える方法です。
どうもありがとう
arm - Eclipse CDT-エラー:「nへの未定義の参照」?
これがここにあるのか、electronics.stackexchange.comにあるのかは完全にはわかりませんが、これはIDEのセットアップとコンパイルに関係しているため、ここが私の質問をするのに最適な場所だと思います。
EclipseCDTにCプロジェクトのセットアップがあります。MentorGraphicsのSourceryCodeBenchLiteARMツールチェーンを使用します。EclipseCDTとGNUARMEclipseプラグインをインストールし、EclipseCDTでコンパイルするようにST.comSTM32F4ディスカバリーの例をセットアップしようとしています。
コンパイル時に、コンパイラは200を超えるエラーを出力します(簡潔にするために短縮)。
これらのアイテムのほぼすべてがstm32f4_discovery.hで定義されていますが、何らかの理由で、コンパイル中に解決されていません。
ファイルが利用可能になっていることを確認し、再確認しました。C/ C ++ General> Paths and Symbols、Includesタブですが、うまくいかない理由がわかりません。
このプロジェクトはGitHubで入手でき、チェックアウトして自分でコンパイルを試してみたい人は誰でも利用できます。
また、出力情報で溢れさせたくなかったので、Githubでチケットを作成しました。
https://github.com/josefvanniekerk/stm32f4-discovery.gitのクローンを作成し、 stm32f4-discovery / projects /demonstrationをEclipseCDTにインポートして、コンパイルを試してください。
SourceryCodeBenchLiteツールチェーンはMacOSXでarm-cs-tools-build.shからコンパイルされ、Eclipse GNU ARMプラグインが必要であり、更新サイトを使用してEclipseにインストールできます。
cygwin - Win7/cygwin の Codesourcery ツールチェーンで一部のファイルが見つからない
これを検索しましたが、見つけた質問はツールチェーンを機能させることに関するものです。私の問題は、いくつかのディレクトリを除くすべてで機能することです。また、私は Linux を構築していません。
人々を幸せにするために、プロジェクトを Linux マシンから Windows に移行しようとしています。Linux (Ubuntu 12.04) では、同じツールチェーンの Linux Binary を使用して、同じプロジェクトを正常にビルドできます (念のため、Mentor の同じディレクトリから両方のツールチェーンを最近リロードしました。以下の詳細を参照してください)。
Cygwin をインストールし、パッケージを取得し、パスを設定しました。一般に、ビルドはプロジェクトの 90% で機能しますが、make がディレクトリを走査すると、2 つのファイルを除くすべてが検出されます (明確にするために、これら 2 つは最初のファイルです)。それぞれのディレクトリにあるので、問題はディレクトリ全体に当てはまると思います)。以下のログは、最初の失敗を示しています。
- ビルドから lwip を削除すると、次のビルドで爆発します
- ビルドから次のものを取り出すと、他のすべてが (かなり) コンパイルされます。次に、リンカは、2 つの不足している項目で期待どおりに失敗します。
より正確には、例えば
/home/Nadi/project/version-2.9/external/freertos/Source/portable/GCC/ARM_CM3_MPU/port.c を見つけます
/home/Nadi/project/version-2.9/external/lwip/src/api/api_lib.c ではありません
私がmakeを実行しているディレクトリから、「ls」はコンパイラが見つけられないファイルを見つけます。
ログ:
詳細:
- GCC チェーン : arm-none-eabi-gcc ; gcc バージョン 4.7.2 (Sourcery CodeBench Lite 2012.09-63)
- Cygwin : CYGWIN_NT-6.1-WOW64
floating-point - -mfloat-abi=hard と -mfpu=vfp/neon を利用する Codesourcery Lite 2013.05-24
vfp またはネオンを利用するために、クロス コンパイルに -mfpu=vfp および -mfloat-abi=hard を追加しました。プログラムは非常に単純な hellofloat.cpp であり、Sourcery CodeBench Lite 2013.05-24 ではコンパイルされません。
コンパイル命令:
Codesorcery は armhf コンパイルをサポートする必要があるため、混乱していますか?
エラー:
コンパイラ
c++ - Mac OS で sourcery ライト エディション ツールチェーン、C++、Eclipse を使用して arm6/arm7 のスタティック ライブラリをビルドできませんか?
Mac OS で C++、Eclipse、および Sourcery Lite エディションの ARM ツールチェーンを使用して、arm6/arm7 用のスタティック ライブラリ (.a) を開発しようとしています。Eclipse 用の sourcery lite ツールチェーンを正常にセットアップ (コンパイル/ビルド/構成) し、arm9 用の静的ライブラリをエラーなしでビルドできました。どういうわけか、arm6/arm7 用にコンパイル/ビルドされません。どうしてか分かりません ?次のコンパイル時エラーが表示されます。
しかし、「lip -info」を使用してビルドされた静的ライブラリを確認すると、「lipo: アーキテクチャ仕様のないアーカイブ: libHelloCppLib.a (アーキテクチャを特定できません)」と表示されます。また、そのライブラリを iPhone アプリで使用できません。誰か助けてくれませんか?これに何が間違っている可能性がありますか? ありがとうございました。