問題タブ [thumb]
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 - Thumb2 (T32) 命令に対して linaro アセンブラを実行する方法
私は、thumb2 (T32) 命令を 1 つ含む単純なアセンブリ ファイル (temp.S) を持っています。例: orr R4,R7,R8 linaro
アセンブラでアセンブルしたいのですが、適切なフラグが見つかりません。
私が試してみると:
次に、命令の A32 バージョンのアセンブリを取得します
ただし、試してみると:
エラーメッセージが表示されます
あたかも T16 命令を期待しているかのように。
T32 命令の正しいフラグに関するヘルプをいただければ幸いです。
ちなみに、私のアセンブラのバージョンは次のとおりです。
branch - Thumb-2 分岐命令に関する問題
現在、ユーザーの入力を受け取り、必要な分岐命令の 16 進数を返すアプリケーションを作成しています。
入力には以下が含まれます。
- 分岐タイプ (条件付き/無条件)
- 条件付きの場合、条件
- 分岐先アドレス
- アドレス分岐元
現在、32 ビットのほとんどのビットを埋めることができますが、気になる 3 つの特定のビットを埋めることができません。これらは、以下の参考文献に示されているように、S ビット、J1 ビット、および J2 ビットです。
これらのビットにはデフォルト値がありますか? それ以外の場合、それらに使用する必要がある値をどのように知ることができますか? 御時間ありがとうございます。
c - LPC1788 マイクロコントローラのアトミック テスト アンド セット
NXP LPC1788 マイクロコントローラーを使用しており、C でマルチスレッド アプリケーションを開発しています。アプリケーションの一部で、カスタム リンク リスト データ構造を定義しています。特定のリストへの同時アクセスが原因で、以前はプログラムに問題がありましたが、リスト自体にアクセスする前にスレッドが呼び出すことができるリストの「ロック取得」メソッドと「ロック解放」メソッドを実装することで解決したようです。
リスト構造体に「sema」データメンバーを追加することでこれを行いました:
私の「ロック取得」方法を以下に示します。
私の「ロック解除」方法を以下に示します。
私のアプリケーションでは、このように 1 秒間に何千回もアイテムをリストに追加および削除する必要があり、それ以来、同時アクセスに関連するバグに気付いていないため、通常、これは問題なく動作するようです。
ただし、これが機能することをより確実にするために、テストと設定のアプローチを実装する方法があるかどうか疑問に思っていました. LPC1788 は、Cortex-M3 マイクロコントローラに固有の Thumb 命令セットのバージョンに依存しています。これは、こちらまたはユーザー マニュアルの918 ページ以降にあります。
しかし、調べてみると、テスト・アンド・セット命令のようなものは見つかりません。見過ごしてるだけかも。
理想的には、次のようなものが欲しいです。
編集
Nemoの回答に基づいて、次のことを試みました。
参考になれば、これは対応するアセンブリ コードです。
同時アクセスの問題を再現するのに問題があるため (同時実行の問題であると仮定して)、これが機能するかどうかはわかりません。
gcc - GCC ARM Cortex-M3/M4: Vector テーブルの値が間違っているため、SVC 命令によって CPU が Thumb から ARM 状態に移行する
リアルタイム カーネルTNeoKernelSVC
を Cortex-Mx プロセッサに移植しています。ARMCC でコンパイルすると動作しますが、GCC でコンパイルすると動作しません:命令を呼び出した直後に、PC
に更新さSVC_Handler
れ、次の (任意の)命令、UsageFault 例外が発生します。
を調べると、ビットが設定されCFSR
ていることがわかりINVSTATE
ます。つまり、プロセッサは ARM 状態にあり、Cortex-M CPU では無効です。私はチェックしましたxPSR
:はい、T
ビットはクリアされています。
次に、Vector テーブルを調べました: はい、オフセット0x2c
に のアドレスがありますが、SVC_Handler
LSB はクリアされています: 0x8013c40
。したがって、CPU が ARM 状態になることは驚くことではありません。驚いたことに、なぜ LSB をクリアしたのですか?
SVC_Handler
ARMCC でコンパイルしたときのアドレスを再確認したところ、LSB がそこに設定されています。実際のアドレスはSVC_Handler
ですが0x0800297a
、Vector テーブルには が含まれています0x0800297b
。
そのため、GCC は間違った Vector テーブルを生成します。
現在、CooCox IDE とarm-none-eabi-gcc
バージョン 4.8.4 を使用しています。GCC に与えられるオプションは次のとおりです。
-mthumb -mcpu=cortex-m4
CPU が ARM 状態をサポートしていないことを GCC に知らせるには十分なようですが、GCC のバグですか? または、正しい Vector テーブルを生成するために、さらにキーを与える必要がありますか?
UPD:これは bitbucket のソース ファイルtn_arch_cortex_m.Sです。そこに.thumb
指示があります。このファイルは GCC と ARMCC で動作するように意図されているため、両方のツールに対応するマクロがいくつかあることに注意してください。
macos - MacOS のアセンブラを使用して THUMB にアセンブルする方法
小さなアセンブリ ファイル (.S) を THUMB にコンパイルする必要がありますが、MacOS のas
ツールは ARM マシン コードを生成します。
ご覧のとおり、ARM マシン コードが生成されます。THUMB を生成するにはどうすればよいですか?
arm - ARM 16 ビット サム命令を無効にする
ARM の世界で (たとえば Cortex M3 で) 32 ビット命令のみを使用し、16 ビットのサム命令を無効にする方法はありますか? ロード/ストアアクセスメカニズムについてではなく、命令自体について話しています。
これがすでに尋ねられている場合、またはこの質問があまりにもばかげている場合などは申し訳ありません.
助けてくれてどうもありがとう...