Embedded C?

Home > 2006-10 /  > This Entry [com : 0][Tb : 0]

2006-10-10

長い間更新をサボっていました。最近は組み込みの話題から遠ざかっていたので、何とか組み込みの話題を取り上げてみたいと思います。といっても、今回はC++ではなくC言語の話題です。 Embedded Cという名前を目にしたとき、最初はEmbedded C++の間違いではないかと思いました。今回の記事のタイトルを見て、同じように思った方も少なくないのではないでしょうか?実は、Emebdded Cというのは、概ねISO/IEC JTC1 SC22 WG14のdraft Technical Report 18037のことで、C99に対する組み込み向けの拡張といった位置づけになります。 Embedded C++がC++98に対するサブセットであるのに対して、Emebedded Cは「拡張」であるというのが特徴です。それでは、具体的にどんな内容が含まれているのか見ていきましょう。 目次をざっと眺めたところ、拡張の内容は大きく分けて次の3点のようです。

  1. FIXED-POINT ARITHMETIC

  2. NAMED ADDRESS SPACES AND NAMED-REGISTER STORAGE CLASSES

  3. BASIC I/O HARDWARE ADDRESSING


斜め読みした感じでは、単なるライブラリの追加とかではなく、複素数型に匹敵するような文法拡張と、それに伴うライブラリの追加のように見えます。 FIXED-POINT ARITHMETIC は、文字通り固定小数点演算のための拡張で、

fract f = 0.25r; int i = 3; printf("%r\n", f*i);


とすると、

0.75


になるといった雰囲気です。実際にはこんなものではなく、かなりのボリュームの演算子とライブラリが追加されています。 NAMED ADDRESS SPACES AND NAMED-REGISTER STORAGE CLASSES は、これまでセクションとかnearやfarなどの拡張を、各処理系が独自に行っていたものを標準化しようとしているようです。また、レジスタ記憶クラスを指定する際に、具体的なレジスタ名まで指定できるようにもなっています。シンタックスは、

_X int a; _X int * _Y p;


とか

register _DP volatile unsigned char direct_page_register;


といった感じです。 最後の BASIC I/O HARDWARE ADDRESSING については、I/O制御のためのライブラリ拡張といったところです。 これが標準化され、主要な処理系が追随すれば、移植性の向上といった観点からはかなり朗報となります。ただし、これらの拡張は、C99にかなり依存していますので、C90をベースにおいしいところ取りをするというのはかなり難しそうです。 次期標準という意味では、おそらくCよりもC++の方が先ではないかと思いますが、この拡張がC++に取り入れられれば、それはそれでかなり強力な機能になりそうです。

Comment

Post a Comment









管理者にだけ表示を許可

Trackback

http://cppemb.blog17.fc2.com/tb.php/98-797ea91f

C++と組み込み環境 | Page Top▲

New >>
NVIパターン
<< old
クラステンプレート
ブログ内検索
RSSフィード