問題タブ [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 - ANSICでの自己割り当て
私は現在、組み込みCプロジェクトに取り組んでおり、次のようなステートメントを含む古いコードを「継承」しています。
ここで、rxStructは変数です。
そのようなステートメントの使用は何でしょうか?
jenkins - Jenkins から IAR をビルドできません
Jenkins Windows バッチ プラグインから IAR プロジェクトをビルドする際に問題が発生しています。ただし、同じコマンドは、コマンド プロンプトに組み込まれた同じマシンから直接、完全に正常に機能します。
ビルド コマンド:「C:\Program Files\IAR Systems\Embedded Workbench 6.4\common\bin\iarbuild」protective\iar_project\cpup_project.ewp -build Debug -log all
Jenkins からビルドすると、次のエラーが発生します。
致命的なエラー[c0000142]: 制御不能な終了
C/C++ コンパイラ実行中のエラー
同じビルド、つまりまったく同じバージョンが、以前は Jenkins からも機能していました。Jenkins に対する追加のアップグレードは行われていません。
システム: Windows XP
ジェンキンスのバージョン: 1.466.1
これが何によって引き起こされているか知っている人はいますか?
どうすれば修正できますか?
debugging - UART コード ポート後の TI MSP430 割り込みの問題
UART を持たないアプリケーションに MSP430F2013 プロセッサを使用しています。UART が必要なので、TI のサンプル コード「msp430x20x3_ta_uart2400.c」を使用して、Timer モジュールを使用して UART をエミュレートしました。これはすべて正常に機能し (IAR Embedded Workbench でコンパイル)、PuTTY を使用して文字を開発ボードに送信し、ループバックを使用して文字を端末にエコーすることをテストしました。
これはリスクを回避するための作業であり、今ではそのコードをアプリケーションのステート マシンに移植することになりました。これを行った後、タイマー割り込みと低電力スリープ モードに関連する問題が発生しています。低電力(スリープ)モードへのエントリの周りのコードのスニペットは次のとおりです。
デバッガー (C-Spy) で見ているのは、bis_SR_register()
最初のエントリで行を実行してからif
ステートメントに移動する場合があることです。つまり、スリープ状態にするように要求したという事実を無視します。他の場合には、スリープ状態になるべきときに ISR が正しくトリガーされ、最終的にif
ステートメントに戻ってプログラムの実行を続行します (予想どおり)。しかし、次のステートメントに移動しようとすると、アプリケーションがその最初の行でフリーズします。つまり、先に進むことができません。
私がやっているTIの例と機能的に異なるものは何も考えられないので、私の問題は私がそれを移植した方法に関係しているに違いないと思います。たとえば、Timer ISR とここに投稿したコードは、異なるコンパイル ユニットにあります。この種の決定は何か関係がありますか? 私の質問は少し漠然としているかもしれませんが、残念ながらすべてのコードを投稿することはできません.陥ってしまったのかもしれません。
assembly - AVR アセンブリにおける ARGFRAME と LOCFRAME の意味
私が書いた C コードの問題をデバッグするために、IAR AVR コンパイラによって生成されたアセンブリ コードを調べています。.s90 ファイルの先頭には、いくつかの関数が宣言されています。各関数宣言の形式は次のとおりです。
ARGFRAME および LOCFRAME ディレクティブが何をするか知っている人はいますか? これらは、IAR EWAVR Assembler Reference で簡単に言及されているだけです。CSTACK の代わりに RSTACK を ARGFRAME のパラメーターとして使用して宣言された関数を時々見かけます。
ARGFRAME で RSTACK と CSTACK を使用する理由を知っている人はいますか?
c++ - ARM 用の IAR 組み込みワークベンチで、C と C++ の両方のソース ファイルで構成されるプロジェクトをコンパイルするにはどうすればよいですか?
私は 2 つの IAR 組み込みワークベンチ プロジェクト (Cortex-M3 ARM 用) を持っています。そのうちの 1 つは C で作成され、もう 1 つは C++ で作成されています。
これら 2 つのプロジェクトのいくつかのファイルを結合して 1 つの新しいプロジェクトを作成する必要がありますが、何らかの理由で自分のプロジェクト以外の言語を変更することはできません (たとえば、C++ プロジェクトで OOP を使用し、他のプロジェクトではいくつかのネイティブ C 関数を使用しました)。
現在、これらのプロジェクトを組み合わせて IAR 組み込みワークベンチ 6 でコンパイルするソリューションを探しています。
何かアイデアはありますか?
c - IAR EWARM でインライン アセンブラから別のモジュールの C 関数を呼び出すにはどうすればよいですか?
ハードフォールトハンドラーに少し組み立てがあります。アセンブリは基本的に、現在のスタック ポインターをパラメーターとして (R0 で) 渡すことを目的としています。みたいですね...
これは、SavePC が同じ c ファイルにある場合にうまく機能します。ただし、SavePC が別の c ファイルに配置されている場合、うまくいきません。私はそのように機能をインポートしようとしました...
...しかし、私は何か間違ったことをしているに違いありません。コンパイラは次のように報告します...
アセンブリを含む c ファイルには、SavePC プロトタイプを含むヘッダー ファイルが含まれています...
提案?
c - 住所を取得する複数の方法
IAR C / C ++コンパイラのマニュアルでは、最適化に適したソースコードを作成するために次のように述べています。
&演算子を使用してローカル変数のアドレスを取得することは避けてください。これは2つの主な理由で非効率的です。まず、変数はメモリに配置する必要があるため、プロセッサレジスタに配置することはできません。これにより、コードが大きくなり、遅くなります。第2に、オプティマイザーは、ローカル変数が関数呼び出しの影響を受けないと想定できなくなりました。
ローカル変数のアドレスを取得する他の方法はありますか?明らかに、その変数へのポインターがあればそれを使用でき、配列があれば配列名を使用できることはわかっていますが、ローカル変数のアドレスを取得する他の方法を認識していません。 &演算子。
assembly - GCCインラインアセンブリからIARインラインアセンブリへ
Texas InstrumentsStellarisCortex-M3にBeRTOSを使用しようとしています。私の職場環境はIARです。IARと私が使用している特定のuCに対応するために多くの小さな変更がありましたが、解決できないように見えるものがあります...そして率直に言って、それは私の頭の上に少しあります。
このコードのビット:
...いくつかのエラーと警告が生成されています。
エラー:「;」が必要です ----->3行目
エラー:「(」----->5行目が必要です
エラー:「)」が必要です----->9行目
警告:変数 "__n"が宣言されましたが、参照されませんでした----->3行目
助言がありますか?
linker - IAR リンカが .a ライブラリを認識しない
ARM Cortex-M4F コアを搭載した ST の STM32F4-Discovery 開発キット用のアプリケーションを開発しています。
アプリケーションで FreeRTOS を使用しています。これは、ボードのマイクとスピーカー出力を使用することを目的としています。
マイク用の I2S インターフェイスを設定する例として、ST のオーディオ再生と録音デモを使用しようとしています。しかし、この例の PDM フィルタ ライブラリには本当に苦労しています。このライブラリは.a
ファイルとして提供されており、プロジェクトにコピーしようとすると、リンク中に次のメッセージが表示されます。
Fatal Error[Li004]: ファイル "C:\Users\Daniel\Desktop\FreeRTOSV7.3.0\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK\libPDMFilter_IAR.a" はオブジェクトまたはアーカイブ ファイルではありません
リンカー オプションをいじって、このライブラリを手動で追加するように言ってみました。しかし、結果はありません。.a
IAR でライブラリをリンクする方法を知っている人はいますか?
linker - IAR再配置失敗エラー
リンクされてデバイス上で正常にコンパイルされたプロジェクトがあります。しかし、アプリケーションコードの一部をSDRAMではなくROMメモリに配置するようにリンカに指示した後、リンク手順で次のエラーが発生します。
エラー[Lp002]:再配置に失敗しました:値が範囲外または不正です:0x60000545種類:R_ARM_PREL31 [0x2a]場所:0xa0000030モジュール:I:\ Project \ Debug \ Obj \ fileOper.oセクション:128(.ARM.exidx)オフセット: 0x0ターゲット:0x00000574 "SECTION_FILEOP_87"モジュール:I:\ Project \ Debug \ Obj \ fileOper.oセクション:104(SECTION_FILEOP)オフセット:0x4f4
IARのC/C++ガイドを読みました。ただし、このエラーに関する十分な説明はありません。そのため、マニュアルを読んでも、このエラーの理由を理解することはできません。誰かがこの問題を解決するのを手伝ってもらえますか?実際、IAR C /C++開発者ガイドには次のように書かれています。
正しく再配置できない命令ごとに、ILINKは再配置エラーを生成します。これは、ターゲットが到達不能であるか互換性のないタイプである命令、または他の多くの理由で発生する可能性があります。次に、私の場合とは異なる例としてエラーを提供します。
編集1:同じエラーを再現する小さなプロジェクトを作成しました。これはfileOper.cppファイルとmain.cppファイルのみで構成されています。
セクションをメモリに配置する方法をリンカに指示するために使用されるICFファイル:
シンボルintvec_start=0x10000000を定義します。
/ -メモリ領域- /
/ -フラッシュROM- /
シンボルFLASH_ROM_start=0x00000000を定義します。
シンボルFLASH_ROM_end=0x0007FFFFを定義します。
/*内部RAM */
シンボルRAM_start=0x10000000を定義します。
シンボルRAM_end=0x10017FFFを定義します。
/ * SDRAM * /
シンボルSDRAM_start=0xA0000000を定義します。
シンボルSDRAM_end=0xA1FFFFFFを定義します。
/ -サイズ- /
シンボルsize_stack=0x4000を定義します。
シンボルsize_heap=0x2000を定義します。
サイズ=4Gでメモリメモリを定義します。
リージョンの定義FLASH_region=mem:[FLASH_ROM_startからFLASH_ROM_endへ];
リージョンの定義RAM_region=mem:[RAM_startからRAM_endへ];
領域の定義SDRAM_region=mem:[SDRAM_startからSDRAM_endへ];
アライメント=8、サイズ=size_stack{}でブロックCSTACKを定義します。
アライメント=8、サイズ=size_heap{}でブロックHEAPを定義します。
パッキング=ゼロでコピーして初期化{読み取り/書き込み};
{section.noinit}を初期化しないでください。
アドレスmemに配置:intvec_start {section .intvec};
FLASH_region{読み取り専用セクション.cstartup}の先頭に配置します。
RAM_region{ブロックCSTACK}に配置します。
SDRAM_region{読み取り専用}に配置
{読み取り専用セクションFILEOP}を除く;
SDRAM_region{読み取り/書き込み}に配置します。
SDRAM_region{ブロックヒープ}に配置します。
FLASH_region{読み取り専用セクションFILEOP}に配置します。
fileOper.cpp:変更しましたが、同じエラーが再現されます。