問題タブ [cortex-m]
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.
assembly - Cortex-M0でのLDREX/STREX(ロード/ストア専用)のシミュレーション
Cortex-M3命令セットには、LDREX / STREX命令のファミリーがあり、場所がLDREX命令で読み取られた場合、次のSTREX命令は、アドレスが変更されていないことがわかっている場合にのみ、そのアドレスに書き込むことができます。通常、その効果は、LDREX以降に割り込み(ARM用語では「例外」)が発生していなければSTREXは成功しますが、それ以外の場合は失敗します。
Cortex M0でそのような動作をシミュレートする最も実用的な方法は何ですか?M3用のCコードを書いて、M0に移植できるようにしたいと思います。M3では、次のように言うことができます。
アトミックインクリメントを実行します。Cortex-M0で同様の機能を実現するために私が考えることができる唯一の方法は、次のいずれかです。
- 「ldrex」で例外を無効にし、「strex」と「clrex」で例外を再度有効にします。ただし、すべての「ldrex」の直後に「strex」または「clrex」を続ける必要があります。
- 「ldrex」、「strex」、および「clrex」をRAM内の非常に小さなルーチンにし、「ldrex」の1つの命令を「strr1、[r2]」または「movr0、#1」にパッチします。「ldrex」ルーチンに「str」命令を「strex」ルーチンにプラグインさせ、「clrex」ルーチンに「mov r0、#1」をプラグインさせます。「ldrex」シーケンス呼び出し「clrex」を無効にする可能性のあるすべての例外があります。
ldrex / strex関数の使用方法によっては、割り込みを無効にすることは合理的に機能する可能性がありますが、「load-exclusive」のセマンティクスを変更して、それが放棄された場合に悪い副作用を引き起こすようにするのは厄介なようです。コードパッチのアイデアは、目的のセマンティクスを実現するように見えますが、不格好なようです。
(ところで、副次的な質問:M3のSTREXが単にフラグを設定するのではなく、成功/失敗の表示をレジスタに格納するのはなぜですか?実際の動作では、オペコードに4ビットの追加が必要であり、成功を保持するためにレジスタが使用可能である必要があります/ failure表示であり、成功したかどうかを判断するために「cmp r0、#0」を使用する必要があります。コンパイラーは、レジスターで結果を取得しなかった場合、STREX組み込み関数を適切に処理できないと予想されましたか。キャリーをレジスターに入れるには、2つの短い指示が必要です。)
arm - OPENOCD、ARM Cortex M0 (JTAG) へのフラッシュ プログラム
私は OpenOCD の初心者です。Olimex OpenOCD を使用して、実際にプログラム hex ファイル (Kiel から) を ARM CORTEX M0 (ジェネリック) にフラッシュしようとした人はいますか?
MCUフラッシュ内でmww(メモリ書き込みワード)を実行するためにhexファイルの各ワードを取得するためにスクリプトファイルをセットアップするには何が必要ですか?私はパイソンを使用しています。
私は提案を開きます。
ウィンドウパソコンを使用しています。
integer-division - RVDS での Cortex-M0 による整数除算
64 ビットの整数型を 32 ビットの整数型に分割しようとしています。ツールチェーンとして RVDS 4.1 を使用しています。
Cortex-M0にはハードウェア除数がないので、以下の操作はできますか? もしそうなら、どのように?
embedded - 組み込みプログラミング用マイクロコントローラ
私は、人気のあるマイクロコントローラーが簡単に入手できない国に住んでいます。私が見つけた腕ベースのものは、STM32F4 Discovery と STM32VL Discovery だけでした。後者の方が安いので、そちらの方がいいです。
問題は、私が正しい方向を見ているかどうかです。これらのマイクロコントローラは組み込みプログラミング専用ですか? (私は初心者です)誰かが私を正しい方向に向けることができれば本当に助かります.
ありがとう!
architecture - バス上のデータがARMCortex-M0のデータなのか命令なのかを知る方法は?
キャッシュアルゴリズムを実装しようとしています。しかし、メモリからフェッチされたデータではなく、命令のみをキャッシュしたいのです(明らかに)。では、バス上のデータがデータデータまたは命令データであることをどうやって知ることができますか?HPROTとHTRANSの信号を見てみましたが、はっきりしませんでした。
c - Cortex M3 のブートローダ
私は mbed の LPC 1768 ボード (cortex M3 cpu を搭載) を使用しており、ここで何かを達成しようとしています。主に SD カードからユーザー アプリケーションをアップグレードしています。最初にブートローダー/ナノカーネルの 2 つのプログラムを作成しています。ユーザーアプリ (最初は helloworld で十分です):
- アドレス 0x00 のブートローダー/ナノカーネルが実行され、いくつかのチェックが行われ、最終的に SD カード上のバイナリ ファイルが取得されます。
- ブートローダー/ナノカーネルは、このバイナリをアドレス 0x9000 にコピーします (後で変更する必要があるかもしれませんが、このスペースはブートローダー/ナノカーネルによって使用されないため、問題ありません)。
- ブートローダーは 0x9000 + 4 でユーザー アプリケーションにジャンプします。
Sd カードは非常に簡単に解決できます。ジャンピング部分に問題があります。これがジャンプ関数のコードです。
}
そこで、開始アドレスを 0x9000 に変更してユーザー アプリケーションをコンパイルしました (私は Keil uvision4 を使用しています)。(flashmagictool を使用して) ボードをプログラムし、手動で (まだ flashmagictool を使用して) 0x9004 (0x9000 + 4) にジャンプすると、ユーザー アプリケーションが実行されるので、コンパイルが正常に機能したため、ユーザー アプリは 0x9000 で実行できると思います。
しかし、ブートローダー/ナノカーネルを実行すると、これはユーザーアプリケーションにジャンプせず、残念ながらデバッグできないため、何が起こっているのかわかりません...また、SDコピーを使用しないようにしましたそのため、最初に基本的に 0x9004 へのジャンプだけでブートローダーをプログラムします。次に、0x9000 に位置するユーザー アプリケーションをプログラムします。ボードを再起動すると、ブートローダーは実行されますが、ユーザー アプリにジャンプしません。メモリをチェックしたところ、両方のプログラム (ブートローダー + ユーザー アプリ) が正しく、適切な場所にあるようです。
私はここに何かが欠けていると確信しています.私が見なければならない低レベルのコードはありますか? 私はオンラインでドキュメントのトーンを読みました.私が見つけた例から、それらは私と同じ方法でユーザーコードにジャンプしています...助けてくれてありがとう.
c - RTOSデータロガーの例
Cortex M0(LPC11U14)でデータロガーを開発しようとしていますが、FreeRTOSなどのリアルタイムOSを使用して、データをSDに書き込む優先度の低いタスクを1つ、またはそれ以上にすることを考えていました。 -センサーデータをフェッチする優先タイマー。
リファレンスデザインとして役立つコード例を知っている人はいますか?タスク/タイマーを作成する方法は知っていますが、タイマーから書き込みタスクにデータを渡す効率的な方法に興味があります。そして、コードベースとして機能する優れたデータロガープロジェクトがすでに存在する場合、私は車輪の再発明をためらっていますか?
embedded - 使用している CPU がアライメントされていないメモリ アクセスをサポートしていないとはどういう意味ですか?
私がコードを書いている ARM (Cortex M0) が、アラインされていないメモリ アクセスをサポートしていないことを発見しました。
現在、私のコードでは多くのパックされた構造体を使用していますが、警告やハードフォールトは一度も発生していません。では、アライメントされていないアクセスが許可されていない場合、Cortex はこれらの構造体のメンバーにどのようにアクセスできるのでしょうか?
embedded - マイクロコントローラプログラミング開発ツールに関する最初の質問
私は最近、マイクロコントローラープログラミングタスクを割り当てられました。MKL05Z32VFM4デバイスでプログラムする必要があります。
MicrochipTechnologyのMPLABIDEXに関するプログラミングチュートリアルをいくつか読んでいました。これは、最も多くの情報を持っているように見えるためですが、IDEはMicrochip製品専用のようです。
MKL05Z32VFM4にはどの開発ツールを選択する必要がありますか?一般的なIDEおよびシミュレーター環境はありますか?私が見始めるためのチュートリアルはありますか?
基本的な質問をお詫び申し上げます。私はまともな一般的なソフトウェア開発者ですが、この分野には非常に慣れていません。
c - GCC での Cortex-M0 との可変アライメント
32 ビットまたは 16 ビットのボンダリで変数を GCC と整列させる良い方法を見つけようとしています。
ミスアライン データ アクセスをサポートしない Cortex-M0 に取り組んでいます。を使用すると、この問題が発生します-Os
。arm-none-eabi バージョン 4.6.2 を使用しています。私はこの小さなテストケースを持っています:
これをコンパイルすると、アラインされていない変数テストが得られます。
マップ ファイルの結果は次のとおりです。
だから今、私はハードフォールトになりました。これをvarsに追加すると:
test
が整列したため、これは期待どおりに機能しています。
この構造体はパックされた別の構造体の一部である可能性があるため、構造体で align 属性を使用することはできません。
パックされた変数を 32 ビット境界に揃えるように GCC または LD に指示する方法はありますか?
よろしく