問題タブ [yagarto]
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 - gccを使用した組み込みシステムでの最大スタック使用量を決定する方法は?
組み込みシステムのスタートアップコード(main()関数にジャンプする前に初期スタックポインターをロードするコード)を書いています。アプリケーションが使用するスタックのバイト数(またはそれ以上)を指定する必要があります。 、控えめな見積もり)。
gccコンパイラに-fstack-usageオプションと-fcallgraph-infoオプションが追加され、正確な「最大スタック使用量」を静的に計算するために使用できると言われました。(Botcazou、Comar、およびHainqueによる「GCCを使用したコンパイル時スタック要件分析」 )。
Nigel Jonesは、組み込みシステムでは再帰は本当に悪い考えだと言っています("Computing your stack size" 2009)ので、このコードで相互再帰関数を作成しないように注意しました。
また、割り込みハンドラーのいずれも、最後の割り込みからの復帰命令まで割り込みを再度有効にしないようにしているので、割り込みハンドラーの再入を心配する必要はありません。
再帰または再入可能な割り込みハンドラーがなければ、スタックの最大使用量を静的に決定できるはずです。(そして、最大スタック使用量を決定する方法への答えのほとんどは?適用しないでください)。私の理解では、私(または、できれば、実行可能ファイルを再構築するたびに自動的に実行されるPC上のコードの一部)は、優先度の高い割り込みによって中断されていない場合に、各割り込みハンドラーの最大スタック深度を最初に見つけます。 main()関数が中断されていないときのスタックの深さ。次に、それらをすべて合計して、合計(最悪の場合)の最大スタック深度を見つけます。これは(私の組み込みシステムでは)main()バックグラウンドタスクが最低優先度の割り込みによって中断されたときに最大の深さになり、次に低い優先順位の割り込みによって中断されたときにその割り込みが最大の深さにあるときに発生します割り込みなど。
LM3S1968ARMCortex-M3のコードをコンパイルするためにgcc4.6.0でYAGARTOを使用しています。
では、gccで-fstack-usageオプションと-fcallgraph-infoオプションを使用して、最大スタック深度を計算するにはどうすればよいですか?または、最大スタック使用量を決定するためのより良いアプローチはありますか?
(Keilコンパイラを対象としたほぼ同じ質問については、組み込みシステムで最大スタック使用量を決定する方法を参照してください。)
gcc - __libc_init_arrayに_initへの未定義の参照があるのはなぜですか?
ARMマイクロコントローラープラットフォーム用にYagartoとEclipseを使用して簡単なプロジェクトを構築しようとしています。私のスタートアップコードには、これがあります(これはかなり標準的で面白くないと思います):
の呼び出しをコメントアウトしない限り__libc_init_array()
、リンカから次のエラーが発生します。
この「未定義の参照」エラーが発生するのはなぜですか?私は何が欠けていますか?欠落しているリンカーフラグがあると思いますが、私は一生の間、何を理解することができません。
windows - Windows での ARM 用の QtCreator クロス コンパイラのセットアップ
BeagleBone Black と Raspberry Pi-2 用の Qt とコマンド ライン ソフトウェアを開発する必要があります。慣れているQtCreatorを使いたいのですが、いずれにしてもGUI作業にはQtDesignerを使う必要があります。
私は何日もかけて記事を探し回ったり、ぐるぐる回ったり、どこにもたどり着いたりしませんでした。
Raspberry Pi-2 には、Raspbian/Jessie が Qt 5.2.3 と共にインストールされています。これで Qt デスクトップ アプリケーションを設計、コンパイル、実行できます。もちろん、コンパイルは遅く、開発作業にはあまり使えません。
簡単にするために、qt-opensource-windows-x86-android-5.3.2.exe をダウンロードして Windows 7 (64 ビット) システムにインストールしました。私の考えでは、この Qt インストールは Pi-2 の Qt と同じバージョンであり、クロスコンパイルに必要な ARM7 ライブラリ ファイルが既に含まれています。必要なのは Windows/ARM 用のクロスコンパイラだけですか?
Windows/QtCreator は、[ツール] > [オプション] > [Qt バージョン] で、Android armv7 の Qt 5.3 について「この Qt バージョンのコードを生成できるコンパイラはありません...」と不平を言いました。
Windows/ARM クロス コンパイラの場合、Yagarto (yagarto-bu-2.23.1_gcc-4.7.2-c-c++_nl-1.20.0_gdb-7.5.1_eabi_20121222.exe) をダウンロードしてインストールしました。Tools > Options > Compilers で QtCreator コンパイラ パスを設定するだけで、作業が開始されると考えました。これはそうではありません。
明らかに、私は何か重要なものを見逃しており、読んだあまり関係のない記事の数に混乱してしまいました.
この状況で必要なクロスコンパイラは Yagarto ですか?
QtCreator でコンパイラを定義してエラーを取り除くにはどうすればよいですか?
このようなものをセットアップする簡単な方法はありますか?
ありがとうございました。
詳細: QtCreator 3.2.1 (Qt 5.3.2) Windows 7 64 ビット サービス パック 1
編集:
GCC ARM Embedded ToolChain と GNU Make for Windows を使用して再試行しました。結果は、QtCreator ARM7 の設定を構成して満足させることができないという点で同じです。