ABIってなに?

2012/03/04開発環境import

ABIとは

Application Binary Interfaceの略称です。
何のことかと云われると、高級言語(組み込みだと主にCになるでしょう)向けの、
データ配置ルールや関数引数と返値のレジスタ渡しルールを定めたモノです。
これが異なると、オブジェクトリンク時に適切に処理ができません。

object file提供のソフトを結合するケースや、ABIに併せてバイナリデータを
流し込んでくるようなインタフェースを設計した場合に、アタリが出ます。
全てのソースファイルを自分(自社)でbuildするソフト屋ならば、アタリは少ないでしょうが、
基本的に複数名での開発や、LinuxなどのOSを使う場合に動的リンクするライブラリのABIも
揃っていないと、実行時にシヌこととなるでしょう。

このあたり、エミュレータ作ってたり、開発環境の準備をするヒトなんかは
しっかりと把握しておかないとダメですね。昨今はCPUも種類が増えていますし、
バイナリレベルで下位互換を保ってはいても、拡張機能を使うライブラリと
リンクするときなども注意が必要です。

・・・恥ずかしながら、某Java Engineの結合の話が来るまで自分も知らなかったです。
昔は情報源が乏しかったのと、コンパイラなんて使うモノの挙動を見ればいいやと思っていたのですね。
しっかりと仕様書があるので、これを神様として、コンパイラの妥当性すらも
検証していくべきであると考えるようになりましたとさ。。。

ARM

ARM社のオンライン情報サイトが有用です。
コンパイラの参照資料として、以下があげられていました。後半にABIの付いたモノが、
今回ご紹介するものだと思います(未確認)
  • BSABI
  • BPABI
  • EHABI
  • CLIBABI
  • AADWARF
  • CPPABI
  • AAPCS
  • RTABI
  • AAELF
  • ABI Addenda


PowerPC

IBMやfreescale社が ABI仕様書を出しています。
ARMとは異なり、Instruction Setがアーキテクチャにより増減している模様。
今まさにはまっているところなので、後日まとめたいと思います。

[gcc][AVR] attributeによるバイト数装飾

2010/03/11開発環境::gccimport

変数のビットサイズ~gcc方言の巻

avr-gccのstdint.hを見る

VMにWinXP32bitを放り込んで、WinAVR 20100110をインスコ。uint32_tが8bitになっとる、という話をmixiのコミュで見かけたので検証してみました。とりあえずコードレベルで追いかけるとして、ヘッダファイルを探索。

typedef unsigned int uint32_t __attribute__ ((__mode__ (__SI__))); 

・・・・なんぞこれ。

__attribute__ってあたりは、まぁ、なんぞローカル定義の装飾しているなぁとは思うわけですが、__SI__ってなによ...


変数サイズ指定

Anton-sanがいいこといった! Single Integerだそうだ。

・・・ナニソレ?


* Title: Gcc help pages about __mode__ keyword
* From: Anton Soppelsa <soppelsa at igi dot cnr dot it>
* To: gcc at gnu dot org
* Date: Tue, 22 Nov 2005 15:48:45 +0100
* Subject: Gcc help pages about __mode__ keyword

Dear GCC help pages maintainers,
I recently encountered a statement like this one


__attribute__((__mode__(__DI__)))

in a micro kernel source file.

As I'm not so skilled with this kind of C/C++ syntax I tried to read the manual about the keywords involved in that expression.
Despite I found information about "__attribute__" and "__mode__"
I wasn't able to find information about "__DI__" (on the gcc manual pages).
Of course I found in Internet partial explanation of the meaning of "__DI__" keyword and also found out that there are many of the same type like "__SI__", "__HI__", and "__QI__".
 By the way, do they mean Double-, Single-, Half-, Quarter-, -Integer?

The point is that it seem to me those identifiers are actually keywords of the compiler.
So they really have be mentioned (at least) in the compiler manual. Better would be if they are explained.
I guess that part of the manual is not so well maintained because I found only reference to the keywords "__byte__" or "__word__" or "__pointer__".


This message is just to inform u about something if u have the time to work about has to be done (in my opinion) .
Best regards,

※本文にメールアドレスがありましたが、削除しています。改行も入れました..

__SI__の謎

George-sanないすだ!CIL (C Intermediate Language)ということで、Cコンパイル時の中間言語の領域に到達した。やはりこのあたりから学ばないと、コンパイラの理解は終わらないようだな…。


GCC allows you to use the __mode__ attribute to specify the size of the integer instead of the standard char, short and so on:

int __attribute__ ((__mode__ (  __QI__ ))) i8;
int __attribute__ ((__mode__ (  __HI__ ))) i16;
int __attribute__ ((__mode__ (  __SI__ ))) i32;
int __attribute__ ((__mode__ (  __DI__ ))) i64;

ちょっとわかりづらい。CLI特有というわけでもないぽいなぁ...


答えは身近に―

後閑師のところで、C30の説明があり、ここで紹介されてました。ナンテコッタイw

以下、引用

typedef int __attribute__((__mode__(SI))) int32 ; // int32を32ビット幅の整数型と定義

modeで指定したビット幅の型を定義する\byteは1バイト整数型、wordは1ワード整数、pointerはポインタ型を定義する\modeには下記記号が使用できる\QI : 8ビット(char)\HI : 16ビット(int)\SI : 32ビット(long)\DI : 64ビット(long long)\SF : 32ビット(float)\DF : 64ビット(long double)ちょっぴり、アンダースコアの量が違いますが、まぁ、もともとも思想は同じと思って良いでしょう。処理系依存が多いでしょうし、迷ったときはアセンブラコードをはかせてみる。sizeof()でバイト数をチェックする、といった習慣をつけたほうが良いですね。特にマイコン屋さんは。仕事でも趣味でも。ね。。

注意

斜め読みどころか、英語弱いのにかじりながら見た部分が多いですので、鵜呑みにせずリンク先の情報を消化して納得してください。\WEBの情報がすべて正しいとは限りませんし、何事も本家までさかのぼるよう習慣付けましょう…。頼むよほんと(ぉ

2008/04/10(木)Coretex-M3基板[DWM][ARM][STMicro]

概要

DWM 2008年 5月号に ARM CoretexM3コアを使ったSTmicro社のマイコン基板が付属で着いてきた。外部水晶8MHzで、内部9逞倍の72MHzで走る。USBターゲットコントローラ内蔵でライブラリ群はSTマイクロが供給してくれているようだ。コレは便利。

Coretex-M3アーキテクチャ

ARMv5とは違い、レジスタバンクが消滅した。いわゆる、フツーのマイコン?って感じになってしまった。コンテキストスイッチの高速化に一約を担ったFIQバンクなんか、美味しかったのにな。
割り込みベクタも、IRQ一本で分岐するのではなく、ベクタテーブルが用意され、アドレスを格納するようになりました

なんというか、ARMらしさがなくなったような・・・。


テキトウに~

懸念事項

えらく叩いている人たちがいるようなので、ざっと目を通してから確認...

  • 加速度センサの出力にCをつけるべきだそうだが、そのパターンがないところか?
  • 基板裏のパターンがアホかwwww といえる幾何学模様だからか?
  • 付属の無料版ツールの制限が大きすぎて使えないことか?
mixi某コミュから
なんと、吉田基板でした。
しかも公開部分には回路図ナシ。

吉田氏の設計で怖いのはデバイスのデータシートを無視することにあります。
今回は本名での執筆です。 
結局またゴミ基板だったようですが、なんで決定前に評価しないのでしょうね。
基板のレイアウトが何も考えてなく、相変わらずデータシートは無視。
そしてレイアウト設計自体もお粗末ですね。

指折り4月10日を楽しみにしていましたが、期待を裏切られました。

2006年の失敗からは何も学習しなかった編集部。
(ヘッダピンが100ミル格子に乗りました!なんて本気で言いそうですが) 
2ちゃんねる現行スレ

C級出版の"ふろく"ぬ生めかしく騙る(6)を眺めてみる. 4/6に立ったスレのようだ. DWM基板は9日くらいから出てるかな?

  • 高速クロックの抵抗R2は誤り。パラではなくシリーズに入れるべき。パラな抵抗は内蔵している(typ.200kΩ)(STmicroのdatasheetより)

これはぶっちゃけ水晶発振回路の基礎が理解できていない私にはいいのか悪いのか。AVRで回路組むときも、Rなしでテキトウにやってるからなぁ。

  • ADC電源のアートワークがまずそう。高速クロックがそばを通っていたりする。
  • 加速度センサにCがついていない(min.1nF)
  • J2に引き出している加速度センサ信号のそばにSPI信号が挟まっている。

アナログ信号を粗末に扱われている、という感じですネェ。オマケ基板程度なので、マトモに製品クラスの品質で使うという目的には使っちゃダメよ、ということなんでしょうね。
まぁ、まだ改造ナシでうごかねぇwwwというレベルではないので問題ないんじゃないでしょうかね。一番の問題は、コンパイラのサイズ制限だろうな。。。


あとは、面倒だし貼り付け。

58 名前: 774ワット発電中さん [sage] 投稿日: 2008/04/10(木) 13:21:03 ID:pOxLrUn/
DW買ってきた、回路図・・・正論理でLEDつけてる 
40pinコネクタ(何故か両方と部番J2なんですが?) 
GNDが各々に有る!片方は2本もだ(w 
・・・でもさ、GNDの片方はADC_IN9とPE7の間に 
入れるのが普通じゃ?(+3.3V/GNDを並べるのも) 
リセットとモード設定まわりがアレげ・・・ 
USBのD+って+3.3Vに吊れば良いんだっけ? 

59 名前: 名無しさんから2ch各局… [sage] 投稿日: 2008/04/10(木) 13:47:00 ID:Ncabq3B6
>>58 
USBはそれでいいんだよ 

61 名前: 774ワット発電中さん [sage] 投稿日: 2008/04/10(木) 16:09:13 ID:pOxLrUn/
・・・SPIを、ADC_INの間に配置するか~? > J3 

65 名前: 774ワット発電中さん [sage] 投稿日: 2008/04/10(木) 19:12:04 ID:pOxLrUn/
・・・U2:LIS344ALHの16番N.C.なのに、+3.3Vに繋がってる(w 
ttp://www.st.com/stonline/products/literature/ds/14337/lis344alh.pdf 

68 名前: 774ワット発電中さん [sage] 投稿日: 2008/04/10(木) 19:15:11 ID:04neW0KS
>65 内部につながってないから問題なし 

72 名前: 71 [sage] 投稿日: 2008/04/10(木) 19:32:50 ID:pOxLrUn/
違った、繋がって無いのね・・・逆だと思ってた。orz 

73 名前: 774ワット発電中さん [sage] 投稿日: 2008/04/10(木) 19:41:34 ID:HeUh2nv7
>>72 
繋がっていない金属は GND なり Vcc につないで電圧を決めてやることも大事。by 伊藤先生%アースシリーズ 

78 名前: 774ワット発電中さん [sage] 投稿日: 2008/04/10(木) 21:12:19 ID:Wqy+QbRG
買ってきた。 
今回は付録を買ったんだと思いこむようにしたいぐらい本の内容は薄かった。 
来月号に期待しよう。 

79 名前: 774ワット発電中さん [sage] 投稿日: 2008/04/10(木) 21:52:08 ID:M8ZyFSQZ
買ってきた。オマイラが言うほど酷くないじゃん。 
2層ならこんなもんだろ。 

82 名前: 774ワット発電中さん [sage] 投稿日: 2008/04/10(木) 22:10:46 ID:M8ZyFSQZ
>>81 
長年この手の設計やってるが、あげつらうほどのことはない気がするけどね。 

83 名前: 774ワット発電中さん 投稿日: 2008/04/10(木) 22:16:47 ID:ZFrV8+iW
>65 
ツッコミ所は 
>A minimum capacitance of 1nF for Cload(x,y,z)is required 

なのに1000pFx3が何処にも見当たらない。 
電源のコンデンサも10μFのアルミ電解付けろって書いているのに0.1uFだけか。 

基板のGND引き回しと相まって、3Dセンサーからの読み込みは何読んでいるのか判らんだろ。 

84 名前: 774ワット発電中さん [sage] 投稿日: 2008/04/10(木) 22:18:14 ID:RTP3Uht3
> 長年この手の設計やってる 

長年の間に、デバイスも変わってるし。 
今は普通にディジ・アナ混載だし。 
工作ちゃんの仲間だね。> 82 
老害。 

91 名前: 774ワット発電中さん [sage] 投稿日: 2008/04/11(金) 00:00:41 ID:AkjJY2OU
>>70 
VDDAとVREF+につながっているRは何かのおまじないですか? 

94 名前: 774ワット発電中さん 投稿日: 2008/04/11(金) 00:36:18 ID:zA/andxa
>91 
全く意味がない。 

> To improve conversion accuracy, the ADC has an independent power supply 
> that can be filtered separately, and shielded from noise on the PCB. 

とあるわけですが、基板上では大変な事になっています。 
ハイスピードクロックが直横を掠め、グランドも振ってくれています。 


開発環境

GCC4.3.0(March 5, 2008)からthumb-2対応の模様です.

Compiler and Library support for Thumb-2 and the ARMv7 architecture has been added.

scatter書いて、この石用のヘッダファイル作れば楽しめそうですね。実行バイナリさえ作れれば、ダウンロードはできる・・・んでしょうね??

ETM積んでいるのだから、デバッガ使いたいですよネェ... ARM7/9対応のmicro viewとかじゃダメなんだろうか。ダメだろうな。thumb-2対応のじゃないとだめなんだろうな.