サポートされる 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。