問題タブ [iar]
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.
c - IAR Workbench で C のスタック オーバーフローをデバッグする方法
IAR Embedded Workbench IDE と TI CC2540 Bluetooth Low Energy 8051 チップを使用して C プロジェクトに取り組んでいます。
プロジェクトの作業中に大量の XData スタックと Idata スタックのオーバーフローが発生しているようで、オーバーフローの原因を特定するのは非常に困難でした。UART ポート経由で大量の文字列を操作しています。
割り当てた後にメモリの割り当てを解除し、スタックとヒープの境界内にとどまるようにする方法について、誰かがヒントを持っているかどうか疑問に思っていました。
ありがとう
c - ARM ハードウェア スタックを理解していない (IAR を使用)
私は現在 IAR Embedded Workbench を使用して、NXP LPC2378 micro の開発を行っています。CPU がクラッシュし続けるため、IRQ と CSTACK を大きくする必要があるという問題が発生していると思います。これらの領域が周囲のメモリ領域に「流出」することに気付きました。これらのメモリ領域と他のメモリ領域が何に使用されているのか、私は本当に理解していないと思いますか? ISR 用に RAM を予約する RTOS (CMX) を使用していますが、これは別のもののようです。
RTOS を使用している場合に使用される IRQ_STACK、CSTACK、SVC_STACK、FIQ_STACK、UND_STACK、および ABT_STACK は何ですか? またはそれらはまったく別のものですか?
c - このインクリメントとデクリメントの代入は何をしようとしているのでしょうか?
上記の2行が何をしようとしているのか、誰か説明してもらえますか? pSpiTxBuf
ですuint8_t *
c - 機能を有効にするときのコードの誤動作 (考えられるサイズの制約)
このトピックは非常に漠然としていることを理解しています....それで説明しようと思います。
IAR Workbench でプロジェクトに取り組んでいます。単純な if ステートメントなどの新しい機能を追加すると、コード構造全体が壊れてしまうところまで来ました。コードは正常にコンパイルされ、8051 デバイスに正常にダウンロードされますが、コードの起動シーケンスの途中で接続が失われます。スタック オーバーフローが発生しているようです。デバッガーを一時停止すると、XdataStack と IdataStack の値が低く (50% 未満)、レポートするスタック オーバーフローがないことがわかります。
実際、問題の原因となっているコードは、アプリケーションによって呼び出されることさえありません。
これは、コード内にある debug #define 定数を有効にするとさらに明白になります。これを有効にすると、より多くの文字列定数が uart デバッグ用のコードに組み込まれます。
私が実行した別のテストは、既に存在する関数で 100 文字の配列を作成することでした。
そして、これもコードを壊しているようです。
このデバイス (フラッシュ サイズが 128Kb の CC2540) がいっぱいになっていないかどうかを確認するために、確認すべきメモリ領域があるかどうか疑問に思っていました。
IAR では、次のことを確認できます。
- IDATA
- XDATA
- SFR
- 論理コード
- コード
- データ
- Pdata
私のプロジェクト構成に関する限り:
スタックサイズ:
- IDATA: 0xC0
- PDATA: 0x00
- XDATA: 0x280
ヒープ サイズ:
- XDATA: 0xFF
- ファー: 0xFFF
- Far22: 0xFFF ヒュージ: 0xFFF
c - リビルド開始時のIARカスタムビルド
IAR で構成されたカスタム ビルド ツールがあります。テキスト ファイルを受け取り、他の C ファイルで使用される .h ファイルを出力します。.h ファイルを出力ファイルのリストに追加すると、完全な再構築の最初のステップとして削除されます。カスタム ビルド ステップは、リンク後のビルドの最後に実行されます。これにより、.h に依存する .c ファイルのコンパイルが失敗します。
もう 1 つのオプションは、カスタム ビルド ステップをプロジェクトのビルド前ステップに配置することです。ただし、.txt ファイルが変更されたかどうかにかかわらず、これは常に実行されます。
質問:
IAR に .c ファイルの .h ファイルへの依存関係を認識させ、コンパイルの前にカスタム ビルド ステップを実行することはできますか?
それが不可能な場合は、少なくとも最初にカスタム ビルド ステップを強制することはできますか?
c - stm32f107チップで割り込みを無効/有効にする方法は?
ARMstm32f107チップを持っています。プロジェクトをIARからGCCに移植しています
IARは、割り込みを有効または無効にするために次の機能を提供します。
GCCを使用してチップの割り込みを有効/無効にするにはどうすればよいですか?
embedded - IAR初期化関数の配置
次の問題に対処する方法を知っている人はいますか。IAREmbedded
ワークベンチがあります。プロジェクトは、コードとフラッシュROMの実行にもSDRAMを使用しています。SDRAMのコードはSDカードからロードされます。ただし、SDRAMには、グローバル変数や静的変数など、いくつかのデータも格納されています。それらのいくつかは初期化する必要があります。初期化ステップであるiar_data_init3
関数呼び出しは、low_level_init
関数の後に続きます。したがって、問題は、SDRAMの一部の変数の初期化では、初期化関数がから呼び出されiar_data_init3
、そのコードがSDRAM自体の内部にあることです。SDカードからのSDRAMコードのロードがまだ行われていないため、これは間違っています。
C / C ++開発ガイドで説明されているように手動で初期化を試みましたが、これは役に立ちませんでした。
呼び出される関数は__sti__routine
、変数の初期化を提供するです。これらの関数はすべてIARによって生成されます。初期化機能をフラッシュROMに配置するようにリンカに指示する方法はありますか?
編集1: これはC /C++のIARマニュアルからの情報です。これは、手動初期化の使用方法の例です。
リンカ設定ファイル:
次に、IARのドキュメントには次のように書かれています。
このソースコードの例を使用して、セクションを初期化できます。
しかし、まず、MYSECTION_initとMYSECTIONの違いがわかりません。また、グローバル変数がある場合:
そして、それをSDRAMに配置する必要があります。それでは、初期化はどのように行われますか?変数を手動で初期化し、その初期化関数をフラッシュROMに配置したいと思います。(問題は、SDRAMに変数を配置することにより、その初期化関数もSDRAMに配置されることです)。
for-loop - シミュレータ用 IAR ディレクティブ
IAR EWARM 5.4 を使用しています。コンパイラをシミュレータ モードで表示するディレクティブがあるかどうか疑問に思いました。たとえば、コードの一部をシミュレータ モードでのみコンパイルし、ターゲット モードでは無視したいと考えています。
ありがとう、
c - STM32L LCD インターフェイス
STM32L151RDに接続されたLCDとインターフェースする方法を教えてもらえますか? IAR ワークベンチを使用していますが、サンプル プロジェクトで結果が得られません。また、私はオンラインのドキュメントとチュートリアルを調べましたが、それらにはすべて STM32L152xD に関する情報が含まれており、LCD が組み込まれていないが LCD ドライバがある 151 に関する情報は含まれていません。
ありがとう。
c - 組み込み C: 登録アクセス
アドレス say に書き込みたいとすると0xc000
、C でマクロを次のように定義できます。
私の質問は、マイクロコントローラーを使用する場合、MSP430 の例を考えてみてください。P1OUT レジスターのアドレスは 0x0021 です。
しかし、P1OUT=0xFFFF を使用すると、// P1OUT に値 0xFFFF を割り当てます。
私の質問は、この場合は0x0021など、そのアドレスにどのように書き込むかです。IDE は IAR です。定義の下のヘッダー msp430g2553.h で見つけました:
アドレスを定義していると思いますが、書き込みまたは読み取りを行う他のマクロはどこにありますか。
その特定のアドレス位置で P1OUT がどのように書き込むかの流れを誰か説明してもらえますか? また、 0x0021u の意味を教えてください。
ありがとう
これまでのところ、私が見つけた詳細は次のとおりです。
msp430g2553.h で
io430g2553.h は言う
上記の定義が何をするのか説明できる人はいますか? MSP430 IAR C/C++ Compiler で見つけた詳細:
誰か知っていますか?