このページは、ソフトウェア、機器組込みのエンベデット・ソフトウェア(ファームウェア)の開発に関連したコラムのページです。このコラムはメールマガジン「アメニティ&サウンド 音と快適の空間へ」で連載していた技術・開発コラムを再編集したものを掲載しています。
前回は、コンパイラの生成コードに関連して主にアセンブラ言語について簡単なお話をしました。今回は、コンパイラのコード生成の評価について具体的にどのような評価をしているかなど簡単にご紹介して見たいと思います。
ANSIで決められているCコンパイラの評価の中で、組込などでは、影響が大きいものにchar型(文字のデータ型)の評価方法があります。
基本的にANSI規格に準拠というコンパイラであれば、整数型で演算評価されます。整数型は、16bit以上の語長と規定されていますので、char型が8bit語調のデータ型である場合、一旦、整数に型変換してから評価式が評価されます。
例えば、Cコンパイラの場合、次のようなソースコードの場合です。(ソフトウェア技術者ではない方にはスミマセン。)
char c; 変数cの定義
...
if ( c == 0 ) ... 変数cがゼロかを比較
このソースコードでは、cという変数はchar型の変数ですから、ゼロであるかを評価するためには、8bitの変数cを16bit以上の整数に変換してから評価されるのが、ANSI規格に沿った式評価の方式になります。(もし、32bit整数を標準とする32bitのCPUの場合、8bitの整数を32bitに変換する必要があります)。
そこで、このようなソースコードを作成して、実際にコンパイラにコードを生成させて、整数への変換が行なわれてから評価されるのか、それとも、8bitのまま処理することで、効率的なコードを優先的に生成するのかを調べます(オプティマイズを有効、無効を切り替えたり生成関連のオプションでの変化も調べます)。
CPUやDSPの組込コードの生成では、正しく評価できるのであれば、厳密にANSIに従うよりも、効率や生成コードサイズを優先させてほしいですから、コンパイラがこのような型変換を行なう部分を正しく処理されるかと、効率的なコード生成をさせることが可能かという2つの視点で評価します。
類似した評価として、演算を行なって代入(記憶)する場合があります。次のようなソースコードです。
char c1,c2;
...
c1 = c1 + 1; インクリメント(増加)はどうか
c2 = c1+2; 変数(結果)に定数を加算
この場合には、実際に演算しますので、その場合の評価はどのようにされるか、演算結果がそのまま次の処理でも利用できる場合には、効率的な処理を行なうか、単純な±1の場合には特殊なコードで効率化されるかなど、数種類のソースコードで結果を見ながら、コンパイラの生成コードの特徴を調べたり評価を行ないます。
ARIはハードウェア設計、製造、ファームウェア開発、 Windowsアプリケーションの開発をしています。 実績等に興味をお持ちいただけましたら、会社情報に主な開発実績を 「音響と開発」のコーナーには事例など関連情報を掲載していますのでご覧ください。
ソフトウェア開発と開発ツール関連の雑記
機器組込みのエンベデット・ソフトウェア(ファームウェア)の開発に関連したコラムです。 メールマガジン「アメニティ&サウンド 音と快適の空間へ」に連載していた技術・開発コラムを編集掲載しています。
ソフト、ハードウェア 技術関連の雑記
このコラムは無料メールマガジン「アメニティ&サウンド 音と快適の空間へ」 vol.36〜vol.64(2003年8/21〜2004年11/18)に 音響と開発の関連コラムとして連載していたものを編集掲載したものです。
技術・開発の閑話-2- vol.11〜20F1とコンピュータ技術 / ソフトウェアの標準と部品化
( 戦術と戦略の誤解 / アジャイル開発 / リファクタリング / 遺産と再生産 / 標準と生産管理 ほか)
|
技術・開発の閑話-2- vol.01〜10「ありえない」フェイルセーフと安全機能の連鎖 / HDD容量の差(天使の分け前) / リアルタイムとベストエフォート / エラーとコスト(ブルースクリーン/XP) / NDAと情報公開 / 専門ドメインの基礎範囲 / NHK技研公開(超高精細映像システム) |
エーアールアイはPCアプリケーション、デジタル機器の組込み(CPU)、信号処理(DSP)ソフトウェアの開発を行っています。 お客様のお役に立てることがございましたらご用命ください。