2.21 排他制御チェック・ツール

排他制御チェック・ツールは,排他制御期間外にグローバル変数(static変数を除く)にアクセスしている関数がないかどうか,つまり排他制御機構を使わずにいきなりグローバル変数(static変数を除く)にアクセスしている関数がないかをチェックするツールです。

注意 1.

本ツールは,CC-RH V1.04.00以上でサポートします。

注意 2.

本機能は排他制御機構(排他制御期間中は変数に他からアクセスすることを禁止する)に問題がないかをチェックする機能ではありません。

 

[使い方]

(1)

関数変数アクセス表 パネルを開く

ソリューション一覧 パネルを開き,排他制御チェック・ツールの[GO]ボタンをクリックすると,関数変数アクセス表 パネルが開きます。

図 2.155

関数変数アクセス表 パネル

 

(2)

排他制御チェックの準備を行う

排他制御チェック前に行う設定を説明します。

(a)

クロス・リファレンスを出力する設定にしてビルドを行う

関数がどの変数にアクセスしているのかの情報(クロス・リファレンス)を構築するため,関数変数アクセス表 パネル上のツールバーの をクリックします。

ビルドが成功するとグローバル変数(static変数を除く)にアクセスしている関数の直交表が生成されます。

図 2.156

関数変数アクセス表 パネル

 

(b)

チェック対象の変数を選択する

直交表でチェック対象の変数を選択します。変数は複数選択可能です。

関数が変数の値を読み込んでいる場合は“R”,値を書き込んでいる場合は“W”が表示されます。かっこ内の数字は何箇所からアクセスされたかを示しています。

(c)

排他制御チェック・ツール ダイアログを開く

関数変数アクセス表 パネル上のツールバーの[排他制御漏れのチェック...]ボタンをクリックすると排他制御チェック・ツール ダイアログが開きます。

図 2.157

排他制御チェック・ツール ダイアログ

 

(d)

チェックを終了するアドレス,またはシンボルを設定する

チェックはプログラムを実行し変数へのアクセス情報を記録・解析することで行います。そのため,チェックをどこで停止させるかを指定する必要があります。アドレス,またはシンボルで設定可能です。

(e)

変数へのアクセスを制御する関数を設定する

変数へのアクセスを制御する関数(制御開始関数,制御終了関数)を設定します。制御開始関数は変数へのアクセスを禁止するために使用する関数,制御終了関数は変数へのアクセスを許可するために使用する関数です。

(3)

チェックを開始する

[チェック開始]ボタンをクリックします。

変数へのアクセス情報は,ソフトウェア・トレース命令をプログラム中に埋め込み,埋め込まれたソフトウェア・トレース命令がどう実行されたかを解析することによって入手します。そのため,ソフトウェア・トレース命令がプログラムに埋め込まれた状態で得た変数へのアクセス情報と,ソフトウェア・トレース命令がプログラムに埋め込まれていない状態で得たアクセス情報は,プログラムの実行タイミングの関係で同一にならない場合があります。アクセス情報を一致させた状態にしたい場合は,[ソフトウェア・トレース(DBTAG)用ビルド・オプションを今後も付加する]をチェックしたままにしておいてください。

(4)

チェック結果を確認する

チェックが完了すると,制御漏れを検出した箇所が,関数変数アクセス表 パネル上でエラー色で表示されます。ダブルクリック,または[Enter]キーを押下することで該当箇所をエディタで開くことができ,問題のある箇所をすぐに見つけることが可能です。

図 2.158

関数変数アクセス表 パネル

 

注意

ソフトウェア・トレース(DBTAG)用ビルド・オプションを使用した場合,以下の点に注意してください。

-

本機能を使用すると,コンパイラの-Xcrefオプション,およびリンカの-list -showオプションを自動的に付加します(ビルド結果のロード・モジュールに影響ありません)。

-

指定した変数はvolatile扱いになるため,最適化結果が異なる場合があります。

-

埋め込むDBTAG命令はNOP相当です。メモリ・レジスタに変化は生じませんが,ごくわずかなプログラム実行に関係するタイミングの相違があります。

-

排他制御チェック・ツールを使用する場合,ユーザ・プログラム中にDBTAG命令を記載しないでください。
排他制御チェック・ツールが制御漏れを正しくチェックできなくなります。