ARM

2018年09月12日

ARM の AAPCS の仕様では、enum のサイズは可変長と固定長の 2 パターン許されています。

異なるバイナリをリンクすると当然、正常動作は期待できないため、これは重要な違いとなります。
続きを読む

2012年04月16日

ARMのCPUにはいままでずっと整数の除算命令がありませんでした。最近になって、Cortex-MシリーズとRシリーズには除算命令が追加されましたが、Cortex-AシリーズではCortex-A9までは除算命令はありませんでした。新しいCortex-A15には除算命令が追加されていました。

新しいgccとqemuはすでにこれに対応済みなので、試してみました。

続きを読む

2012年04月11日

Ubuntu 12.04LTSでのarm-linux-gnueabihf-gccのツールチェインのhfはHard Floatの意味です。

関数呼び出し規約(Calling Convention)が変更されて、double, floatの引数はFPUのレジスタに積んで渡し、戻り値もFPUのレジスタを使うようになっています。今までは、FPUが利用可能だったとしても、Soft Floatと互換性を保つために汎用レジスタで引き渡していました。当然これらは混ぜて使うことはできません。全てのライブラリに影響があります。

簡単なプログラムで実際に生成されるコードを見てみます。

続きを読む

2012年04月09日

"ARMv8 Instruction Set Overview"というドキュメントがARMのサイトからダウンロード可能です。(ただし登録が必要。)

この資料からARMv8アーキテクチャの概要をながめてみました。

続きを読む

2011年07月07日

KZM-A9-Dualボードで使用しているEMMA Mobile EV2のチップのユーザーズマニュアルがルネサステクノロジのサイトからダウンロードできるようになっています。

EMMA Mobile EV

複数のファイルに分割されているので、PCのデスクトップ検索などを駆使して必要なところを見つけてください。



2009年11月27日

主にセマフォの実装などに使用されてきた SWP/SWPB 命令は、もともと ARM v6 アーキテクチャ以降では廃止予定扱い(deprecated) になっていたのですが、ついに v7 からは、デフォルトで未定義命令扱いになり、実行すると例外が飛ぶようになったようです。

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204gj/Chdbbbai.html

例えば v7 アーキテクチャ向けに Linux や root filesystem をビルドする時、コンパイラのターゲットアーキテクチャオプションが v7 になっていないと、これが生成されてしまい、システムの奥底で突然謎の例外が発生してクラッシュしたりという、わかりにくい不具合の原因にも成り得るので注意が必要です。

より正確には、v7 でも完全に廃止されたわけではないようです。ARM Architecture Reference Manual (ARMARM) v7-A and v7-R を紐解いてみると、ARM v7-A の場合は System Control Register (SCTLR) というレジスタが存在し、bit[10] が SWP/SWPB Enable bit ということで、これが 1 の場合は実行が可能なようです。(reset 時は 0 。)

v6 以降では、新しく追加された LDREX/STREX を使うことが推奨されています。

それにしても、x86 に慣れた身からすると、プロセッサが後方互換性を捨てるなんていうのはありえない気がします。しかも完全に廃止したわけではなく、回路は残していて、実行も一応は可能というのも不思議です。

この変更は multiprocessing 向け対応の 1 つなのだそうです。ARM はこれからますますマルチコアやマルチプロセッサに対してアグレッシブに取り組んでいくぞという意思表示なのでしょうか。

2009年09月08日

ARM のリアルタイムトレースで、ETM と ETB という似たような用語が存在し、それぞれがどのようなものなのかイマイチ理解していなかったのですが、辻先輩に軽くレクチャーしていただいたので忘れないうちにメモしておきます。

(ただし、これはあくまでも私が理解したところなので、間違いが多分にあるかと思いますし、特にレビューを受けてもいない文章です。文責は私にあります。)

リアルタイムトレースとは、プログラムの実行中の PC の動きや、データアクセスの際のアドレスやアクセスタイプ (R/W) などをキャプチャーする機能のことです。基本的には CPU に負荷をかけずに済むので、実際にプログラムを動作させた時の CPU の状態遷移をそのまま見ることができます。(遅くなるものもあるそうです。)

組み込みではリアルタイム性が重要なプログラムが多いので、トレースは非常にデバッグの役に立つ機能です。弊社の PARTNER-Jet は、1 GB の大容量トレースを難なくこなし、QProbe という解析ツールと連携することもできます。(Model 40 の場合。)

ETM (Embedded Trace Macrocell) は、CPU (ARM CORE) のバスを監視し、トレース信号を外部に直接出力するためのユニットです。ETM はたくさん線が必要なのですが、チップの線は高価 (未確認ですが、1本線が増えるたびに、単価が0.5円上がるという話も) ですし、接続するためのプローブも単価が高いものになります。

ETB (Embedded Trace Buffer) は、その名の通り、ARM SoC 内の超高速メモリです。直接信号を出力するのではないため、トレースデータを取りこぼすこと無くためて置くことができます。ただし、SoC 内のシリコンには限りがあるのでそれほど大容量にはできませんし、JTAG 経由でデータを吸いだす必要があります。特別なプローブが必要無く、JTAG のみで済むというのはメリットでもあります。

簡単ですが、以上を図にまとめると、以下のようになるかと思います。

リアルタイムトレース説明図

2009年08月14日

ARM11のCP15にパフォーマンスモニタがあり、そのサイクルカウンタを利用して簡単にプログラムの2点間の時間を計測することができます。

計測用の関数を手軽に使えるようにソースコードを一つのヘッダファイルにまとめてみました。

ある関数を複数の方法で実装して、どちらが速いかを比較する場合に便利です。

続きを読む

記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード