問題タブ [arm7]

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.

0 投票する
2 に答える
1283 参照

gcc - UART に出力しようとすると ARM7 printf がハングする

さまざまな印刷コマンドに問題があります。
printf() を呼び出そうとするたびに、システムがハングするか、リセットされることがあります。
UART が動作しており、UART_PutChar() を使用してコンソールに正常に出力できます。
fprintf は単純な文字列を印刷するだけの単純なケースで機能しますfprintf(stdout, "test\n");
が、フォーマットされた文字列はシステムをfprintf(stdout, "test %d\n", 1);
ハングさせます .data セクションからデータを印刷しようとしているときにもハングが発生します

改行を印刷するとprintfが機能しますprintf("\n");
printfは、次のような場合にのみ 改行を印刷します

場合によっては、fprintf が失敗すると、EOF が返されます (今は覚えていないので、関連性があれば明日提供します)
(f)printf は putchar を呼び出しているようで、UART に再ターゲットしました。不思議なことに、それは newlib-nano によって提供される呼び出しまたはルーチン
であるべきだと思います(そして printf はそれらを呼び出していません)。 IDE として、EmBitz とそれが提供するツールチェーン (arm-none-eabi) を使用しています。私が使用しているCPUはat91sam7x128です。JTAG を使用してプログラムをデバッグできないため、デバッグには UART のみを使用する必要があります。_write_write_r

UPDATE スターター スクリプト: SAM7.s

リンカー スクリプト

更新 2 syscall の私の迅速で汚い再実装。

0 投票する
0 に答える
57 参照

plot - ARM 汎用レジスタをプロットする

ARM7 命令をエミュレートし、レジスタ値を経時的にプロットできるアプリを探していました。µVision IDE 5 を試しましたが、できないようです。おすすめのアプリはありますか?

0 投票する
1 に答える
107 参照

exception - arm7tdmi で、FIQ と RIQ が同時に発生した場合、最初に FIQ と次に IRQ を実行するにはどうすればよいですか?

arm7tdmi で、命令が実行され、同時に FIQ と IRQ の両方が同時に発生するとします。現在、優先度に従って FIQ が処理され、次に IRQ が処理されますが、私の質問は、FIQ から戻った後に IRQ をどのように処理するかということです。 FIQ の戻り時に行われるプロセスと、FIQ ハンドラーの return ステートメントの後に制御がどのように IRQ ハンドラーに転送されるか?

例: アドレス => 命令

; 0x00000108 で命令が実行され、FIQ と IRQ が発生したとします。

0 投票する
2 に答える
12505 参照

c++ - 送信後に GDB のバージョンを特定できませんでした: arm-none-eabi-gdb --version、応答:

Kinetis Design Studio で GDB PEMicro Interface Debugging を使用してプロジェクトをデバッグしようとしていますが、次のエラーが表示されます: 「myProject の起動中に問題が発生しました。」送信後に GDB のバージョンを特定できませんでした: arm-none-eabi-gdb --version、応答:

コンピューターをフォーマットしましたが、数日かかります。そして、同じ設定の他のコンピューターがあり、うまく機能しました。

私の設定:

Eclipse 設定 -> C/C++ -> ビルド -> グローバル ツール パス

  • ビルド ツール フォルダー: (空)
  • デフォルトのツールチェーン: GNU Tools for ARM Embedded
  • ツールチェーン フォルダー: /opt/Freescale/KDS_v3/toolchain/bin

Eclipse 設定 -> C/C++ -> ビルド -> ワークスペース ツール パス

  • ビルド ツール フォルダー: 空
  • デフォルトのツールチェーン: グローバル デフォルト
  • ツールチェーン フォルダー: 空

プロジェクト プロパティ -> C/C++ ビルド -> ツール パス

  • 空の

プロジェクト プロパティ -> C/C++ ビルド -> 設定 -> ツールチェーン

  • 名前: ARM 組み込み用 GNU ツール
  • アーキテクチャ: アーム
  • プレフィックス: arm-none-eabi-
  • サフィックス: (空)
  • ツールチェーン パス: /opt/Freescale/KDS_v3/toolchain/bin

プロジェクトのプロパティ -> C/C++ ビルド -> 環境 -> PATH

  • 起源:ビルドシステム

起動構成のデバッグ -> [メイン] タブ

  • プロジェクト: myProject
  • C/C++ アプリケーション: myProject/myProject.elf

デバッグ起動構成 -> デバッガー タブ

  • GDB クライアント設定 -> 実行可能ファイル: ${cross_prefix}gdb${cross_suffix}
  • コマンド:

mem inaccessible-by-default をオフに設定

tcp 自動再試行をオンに設定

tcp 接続タイムアウトを 240 に設定します

どうすれば修正できますか?

0 投票する
1 に答える
3003 参照

assembly - ARM (ARM7TDMI) で最も効率的に下位 16 ビットのハーフワードを取得する方法は?

レジスタに 32 ビットの値があるとします。r0 = 0x12345678; タスクは、0x5678 である下位ハーフワード部分を取得することです (または、上位ハーフワードを無効化します)。C コードに関しては、次と同等です。r0 = r0 & 0xFFFF;

制限: 他のレジスタを使用せずに、単一の ARM7TDMI 命令で実行する必要があります。これは、上半分を取得することがLSR r0, r0, #16.

これまでのところ、左シフト + 右シフト、回転 + シフトの 2 つの命令で実行できます。または、マスク 0xFFFF と AND-ing を含む追加のレジスタを使用します。

ARM7TDMI では、0xFFFF のような定数と単純に AND することはできません。これは、即値スキームに適合しないためです。

また、最近の ARM-s には を実行することで解決する "MOVT" があるようMOVT r0, #0ですが、ARM7TDMI にはありません。

MOVTはとても基本的なことなので、MOVTがなくても可能だと信じたいです。