サポートされる Keil または IAR 言語拡張
Polyspace® 解析では、一般的な C/C++ の言語構成要素のサブセットと拡張キーワードを既定で解釈できます。コンパイラ固有のキーワードについては、コンパイラの選択肢を指定しなければなりません。[コンパイラ] (-compiler)
に対して [keil]
または [iar]
を指定すると、Polyspace 検証では Keil コンパイラまたは IAR コンパイラ固有の言語拡張が許可されます。
メモ
IAR Embedded Workbench コンパイラを使用している場合は、オプション [IAR Embedded Workbench コンパイラ] (-compiler iar-ew)
を使用して、C 言語の IAR 固有の拡張を有効にしてください。
特殊機能レジスタのデータ型
組み込み制御アプリケーションは、ポートのデータの読み取りと書き込み、タイマー レジスタの設定、そして入力キャプチャの読み取りを頻繁に行います。アセンブリ言語を使用せずにこの要件を処理するために、一部のマイクロプロセッサ コンパイラでは sfr
や sbit
などの特別なデータ型が定義されています。標準的な宣言は次のとおりです。
sfr A0 = 0x80; sfr A1 = 0x81; sfr ADCUP = 0xDE; sbit EI = 0x80;
この宣言は、基本的な 80Cxxx
マイクロ プロセッサの場合、regxx.h
などのヘッダー ファイルにあります。この宣言により、コンパイラがターゲット プロセッサにカスタマイズされます。
レジスタやポートには次のように sfr
や sbit
を使用してアクセスします。ただし、これらのデータ型は C99 規格には含まれていません。
int status,P0; void main (void) { ADCUP = 0x08; /* Write data to register */ A1 = 0xFF; /* Write data to Port */ status = P0; /* Read data from Port */ EI = 1; /* Set a bit (enable all interrupts) */ }
このタイプのコードを解析するには、以下のオプションを使用します。
[コンパイラ] (-compiler)
—[keil]
を指定します。[sfr 型のサポート] (-sfr-types)
— データ型とビット単位のサイズを指定します。
たとえば、sbit
データ型を次のように定義するとします。
sbit ADST = ADCUP^7;
-compiler keil -sfr-types sfr=8
一部の構造体、キーワードおよび構文が C99 規格ではない場合でも、解析では Keil 言語拡張がサポートされます。
追加の sbit
構文のサポート
次のように、sbit
定義でビット セレクターとしてキャレット (^
) ではなく、ドット (.
) またはコロン (:
) を使用している場合:
sbit ADST = ADCUP.7; // or sbit ADST = ADCUP:7;
#!/usr/bin/perl binmode STDOUT; # Process every line from STDIN until EOF while ($line = <STDIN>) { # Replace bit selector "." in sbit declarations by "^" # For example, the following line # sbit readybit = ADC.2; # Will be replaced by: # sbit readybit = ADC^2; $line =~ s/(sbit\s*[A-Za-z0-9_]+\s*=.*)\.([0-9])/\1^\2/g; # Same kind of replacement for the case where the bit selector is ":" $line =~ s/(sbit\s*[A-Za-z0-9_]+\s*=.*):([0-9])/\1^\2/g; # Print the current processed line to STDOUT print $line; }
前処理済みファイルに適用するコマンド/スクリプト (-post-preprocessing-command)
を参照してください。前処理中に削除されるキーワード
Keil または IAR コンパイラを指定すると、解析ではコード内のコンパイラ固有のキーワードが認識されます。キーワードが解析に関連しない場合は、前処理中にソース コードから削除されます。
キーワードを無効にして代わりにそれを識別子として使用する場合、Polyspace を使ってコードをコンパイルするとコンパイル エラーが発生する可能性があります。Keil または IAR コンパイラに関連する Polyspace コンパイル エラーの修正を参照してください。
次のキーワードが、前処理中に削除されます。
Keil —
bdata
、idata
、interrupt
、reentrant
、__interrupt
。マクロ
__C51__
が定義されている場合、キーワードcode
、data
、far
、huge
、large
、pdata
、sdata
、xdata
、xhuge
も前処理中に削除されます。IAR —
bdata
、code
、idata
、interrupt
、non_banked
、pdata
、plm
、reentrant
、__interrupt
、__intrinsic
。