メインコンテンツ

サポートされる Keil または IAR 言語拡張

Polyspace® 解析では、一般的な C/C++ の言語構成要素のサブセットと拡張キーワードを既定で解釈できます。コンパイラ固有のキーワードについては、コンパイラの選択肢を指定しなければなりません。[コンパイラ] (-compiler) に対して [keil] または [iar] を指定すると、Polyspace 検証では Keil コンパイラまたは IAR コンパイラ固有の言語拡張が許可されます。

メモ

IAR Embedded Workbench コンパイラを使用している場合は、オプション [IAR Embedded Workbench コンパイラ] (-compiler iar-ew) を使用して、C 言語の IAR 固有の拡張を有効にしてください。

特殊機能レジスタのデータ型

組み込み制御アプリケーションは、ポートのデータの読み取りと書き込み、タイマー レジスタの設定、そして入力キャプチャの読み取りを頻繁に行います。アセンブリ言語を使用せずにこの要件を処理するために、一部のマイクロプロセッサ コンパイラでは sfrsbit などの特別なデータ型が定義されています。標準的な宣言は次のとおりです。

sfr A0 = 0x80; 
sfr A1 = 0x81; 
sfr ADCUP = 0xDE; 
sbit EI = 0x80; 

この宣言は、基本的な 80Cxxx マイクロ プロセッサの場合、regxx.h などのヘッダー ファイルにあります。この宣言により、コンパイラがターゲット プロセッサにカスタマイズされます。

レジスタやポートには次のように sfrsbit を使用してアクセスします。ただし、これらのデータ型は 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) */ 
} 

このタイプのコードを解析するには、以下のオプションを使用します。

たとえば、sbit データ型を次のように定義するとします。

sbit ADST = ADCUP^7;
以下のオプションを使用します。
-compiler keil -sfr-types sfr=8

一部の構造体、キーワードおよび構文が C99 規格ではない場合でも、解析では Keil 言語拡張がサポートされます。

追加の sbit 構文のサポート

次のように、sbit 定義でビット セレクターとしてキャレット (^) ではなく、ドット (.) またはコロン (:) を使用している場合:

sbit ADST = ADCUP.7;
// or 
sbit ADST = ADCUP:7;
解析の前処理段階の後で次の Perl スクリプトを実行して、前処理済みのコードに含まれるドットまたはコロンをキャレットで置き換えます。
#!/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 — bdataidatainterruptreentrant__interrupt

    マクロ __C51__ が定義されている場合、キーワード codedatafarhugelargepdatasdataxdataxhuge も前処理中に削除されます。

  • IAR — bdatacodeidatainterruptnon_bankedpdataplmreentrant__interrupt__intrinsic