(57)【特許請求の範囲】
【請求項１】
外部の電子機器の回路を制御する該電子機器のソフトウェアデータが読み込まれて該ソフトウェアデータのミスを検出するソフトウェアミス検出ツールであって、
前記ソフトウェアデータが読み込まれて格納されるソフトウェアデータ格納部と、
前記電子機器の回路のハードウェアデータが読み込まれて格納されるハードウェアデータ格納部と、
前記ハードウェアデータに対応したソフトウェア仕様データを格納する仕様テーブルと、
前記ハードウェアデータの言語に基づいて規定された検索条件データを格納する検索条件データ格納部と、
前記検索条件データに対応する前記仕様テーブルのソフトウェア仕様データを抽出し、この抽出されたソフトウェア仕様データと前記ソフトウェアデータとを比較して、前記ソフトウェアデータのミスを検出するコード作成ミス検出手段と
を具備することを特徴とするソフトウェアミス検出ツール。
【請求項２】
さらに、操作入力手段を有し、
前記検索条件データは、当該操作入力手段から入力されることを特徴とする請求項１又は１記載のソフトウェアミス検出ツール。
【請求項３】
前記ソフトウェアデータはソースコードであり、前記ハードウェアデータは回路のネットリストであることを特徴とする請求項１記載のソフトウェアミス検出ツール。
【請求項４】
前記仕様テーブルのソフトウェア仕様データは、正しいデータまたは誤ったデータとして規定されていることを特徴とする請求項１記載のソフトウェアミス検出ツール。
【請求項５】
前記ハードウェアデータおよびソフトウェアデータは、汎用入出力ポートの入出力切替ピンに関連のデータであることを特徴とする請求項１記載のソフトウェアミス検出ツール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子機器等に内蔵されるソフトウェアの開発設計段階において、ソフトウェ
アのソースコードの作成ミスを検出するツールに関する。
【背景技術】
【０００２】
電子機器等に内蔵されるＧＰＩＯ（汎用入出力ポート）は、汎用入出力ピンの状態設定
がプログラマブルであり、入力ピン状態／出力ピン状態の設定、および汎用入出力ピンの
内部Ｐｕｌｌ Ｕｐ／Ｐｕｌｌ Ｄｏｗｎ／Ｎｏ Ｐｕｌｌの状態設定が、電子機器に内蔵
されるソフトウェアにより設定可能となっている。どう設定するか予め決められた設計仕
様に対して、ソフトウェア設計者が、誤って、異なる状態にソフトウェアを作成しても、
電子機器の実機テストでは、ソフトウェアの作成ミスの発見が困難な場合が多々ある。
【０００３】
作成ミスを低減する手法として、電子機器に内蔵されるソフトウェア自体に、設計仕様
を記載したテーブルを設け、ＧＰＩＯへの設定は、そのテーブルを呼び出して設定する方
法がある。しかし、ソフトウェア設計者が、そのテーブルを呼び出して設定する方法を確
実に実行すればよいが、忘れて、直接にＧＰＩＯへ設定してしまい、それが設計仕様とは
異なって設定してしまうこともあり、防ぎきれるものではない。特に、他のソフトウェア
設計者が設計したり、引継ぎ漏れ等により、確実に保証できるものではない。
【０００４】
特許文献として、ソフトウェア開発の初期段階においてレジスタ設定値間違いを発見す
るレジスタ設定値監視モジュール、システム、方法がある（例えば、特許文献１参照。）
。このシステム（実機）は、従来のＣＰＵ２と機能モジュール６−８（ＤＭＡコントロー
ラやタイマーなど）に加えて、レジスタ設定値監視モジュール４と、機能モジュール６−
８に設定する期待値が予め格納された期待値レジスタ２２８、２２９などを実機内に備え
る。
【０００５】
そして、実機内で、レジスタ設定値監視モジュール４は、ＣＰＵ２が機能モジュール６
−８にソフトウェアでアクセスする設定値と、期待値レジスタ２２８、２２９とを比較し
て、ソフトウェアのミスを発見している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−２９３６４１号公報（頁５−１２、図３５）
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１のシステムは、実機内に、レジスタ設定値監視モジュール４や期待値レジス
タ２２８、２２９などを新たに設ける必要があり、実機の規模がテストのために大きくな
ってしまうという問題がある。また、テスト時の比較処理を行っている期間はレジスタア
クセスを遅延させる必要があり、ＣＰＵ２のペリフェラルへのＩＯアクセス自体が低速化
してしまうので、ソフトウェア開発後期や製品化時には、レジスタ設定値監視モジュール
４をパスして通常のアクセスを保証する必要がある。
【０００８】
本発明は、電子機器内のソフトウェアのソースコードのミスを発見するために、電子機
器の内部構成を変えることなく、このソースコードが読み込まれて外部でミスを発見する
ソフトウェアミス検出ツールを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明のソフトウェアミス検出ツールは、外部の電子機器の回路を制御する該電子機器のソフトウェアデータが読み込まれて該ソフトウェアデータのミスを検出するソフトウェアミス検出ツールであって、前記ソフトウェアデータが読み込まれて格納されるソフトウェアデータ格納部と、前記電子機器の回路のハードウェアデータが読み込まれて格納されるハードウェアデータ格納部と、前記ハードウェアデータに対応したソフトウェア仕様データを格納する仕様テーブルと、前記ハードウェアデータの言語に基づいて規定された検索条件データを格納する検索条件データ格納部と、前記検索条件データに対応する前記仕様テーブルのソフトウェア仕様データを抽出し、この抽出されたソフトウェア仕様データと前記ソフトウェアデータとを比較して、前記ソフトウェアデータのミスを検出するコード作成ミス検出手段とを具備することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、電子機器の内部構成を変えることなく、外部のソフトウェアミス検出
ツールにより、電子機器内のソフトウェアのミスを発見することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の各実施例に係る電子機器１００の回路図（ＧＰＩＯ２１関連）。
【図２】標準規格のＩ２Ｃバスのデータ信号とクロック信号のタイムチャート。
【図３】本発明の各実施例に係る電子機器１００のハードウェアデータ（ＧＰＩＯ２１関連）。
【図４】本発明の各実施例に係る電子機器１００のＨＷ／ＳＷ仕様テーブル６（正誤表）を説明する図（ＧＰＩＯ２１関連）。
【図５】本発明の各実施例に係る電子機器１００のソフトウェアデータの一例を説明する図（ＧＰＩＯ２１関連）。
【図６】本発明の各実施例に係るソフトウェアミス検出ツール２００のブロック図。
【図７】本発明の実施例１に係るソフトウェアミス検出ツール２００の判定処理モジュール８の動作フローチャート。
【図８】本発明の実施例２に係るソフトウェアミス検出ツール２００の判定処理モジュール８の動作フローチャート。
【発明を実施するための形態】
【００１２】
図１は、本発明の各実施例に係る電子機器１００のＧＰＩＯ２１（汎用ＩＯ）の関連部
分の回路図である。この構成そのものは本発明ではなく、電子機器１００に内蔵のソフト
ウェア（ＲＯＭ２６に格納されたプログラム）の設計ミスが、電子機器１００自体の実機
テストでは発見がむずかしい一例として説明する。このような場合に特に、後述の本発明
のソフトウェアミス検出ツール２００（図６）により、電子機器１００に内蔵のソフトウ
ェアの設計ミスの発見が有用である。もちろん、本発明のソフトウェアミス検出ツール２
００は、実機テストで発見がむずかしい場合に限る必要はなく、その他通常のソフトウェ
アに対しても適用できる。
【００１３】
以下、電子機器１００のＧＰＩＯ２１関連部分の構成と動作について説明する。電子機
器１００のＧＰＩＯ２１関連部分は、ＧＰＩＯ２１、電子部品２２、電子部品２３、抵抗
２４（外部Ｐｕｌｌ Ｕｐ）、制御部２５、ＲＯＭ２６などから構成される。
【００１４】
図１の（括弧）書きの部分は、この回路図部分が搭載される印刷回路基板の回路図上の
表記であり、印刷回路基板のハードウェア設計時のハードウェアデータ（ＮＥＴリストお
よびＩＣピン表）として、全ての構成要素、ピン、信号線に表記されるが、図１では、制
御部２５、ＲＯＭ２６、ＣＰＵバス等についてはＨＷデータ表記は省略する。
【００１５】
制御部２５は、不図示のＣＰＵ、ＲＡＭなどを有し、ＲＯＭ２６に格納されたプログラ
ムを実行する。この例では、制御部２５は、ＲＯＭ２６に格納されたプログラムに基づい
て、ＧＰＩＯ２１の内部設定や入出力制御やＩ２Ｃ制御機能を実行する。ＲＯＭ２６には
、ソフトウェア設計者が設計したプログラムのソースコードがコンパイルおよびアセンブ
ルされた機械語が格納されている。
【００１６】
ＧＰＩＯ２１は、汎用ＩＯであり、複数の入出力ピン、ここでは、ピン番号（１）とピ
ン番号（２）の２個の入出力ピンのそれぞれの実施例を示す。ピン番号（１）はピン名称
（ＧＰＩＯ＿１）、ピン番号（２）はピン名称（ＧＰＩＯ＿２）である。各入出力ピン毎
にモード設定が可能であり、入力ピンとして動作させるか出力ピンとして動作させるかの
入力ピン／出力ピン設定がプログラマブルである。また、内部ＰｕｌｌＵｐ／内部Ｐｕｌ
ｌＤｏｗｎ／内部ＮｏＰｕｌｌの設定がプログラマブルである。汎用ＩＯゆえにプログラ
マブルであるが、逆に設定ミスの要因ともなる。
【００１７】
このプログラマブルであるＧＰＩＯ２１の入出力ピンの内部構成は、周知であり、ドラ
イバ３１（３５）、レシーバ３２（３６）、内部ＰｕｌｌＵｐ抵抗３３（３７）、内部Ｐ
ｕｌｌＤｏｗｎ抵抗３４（３８）、スイッチ等から構成され、これにより、前記の入力ピ
ン／出力ピン設定、内部ＰｕｌｌＵｐ／内部ＰｕｌｌＤｏｗｎ／内部ＮｏＰｕｌｌの設定
ができる。
【００１８】
このＧＰＩＯ２１に対する設定を行うＲＯＭ２６のプログラムのソースコードの設計ミ
スが、電子機器１００の実機テストでは発見がむずかしい例として、以下の２とおりにつ
いて説明する。
【００１９】
「１．通常の出力ポート」
ＧＰＩＯ２１のピン番号（１）を通常の出力ピンとして設定した例である。ＧＰＩＯ２
１のピン番号（１）は、信号線名（Ａ＿ＯＵＴ）で電子部品２２のピン番号（１）と繋が
る。電子部品２２は、ＧＰＩＯ２１のピン番号（１）の出力で制御される被制御対象であ
り、例えば、ランプ点灯、ブザー鳴動、その他の信号伝達など何でもよい。
【００２０】
ＧＰＩＯ２１のピン番号（１）が出力ピンに設定された場合は、ドライバ３１はアクテ
ィブ状態であり、内部ＰｕｌｌＵｐ抵抗３３や内部ＰｕｌｌＤｏｗｎ抵抗３４でＨｉｇｈ
／Ｌｏｗレベルを制御する必要はない。したがって、内部ＮｏＰｕｌｌ設定にすればよい
。
【００２１】
ところが、ソフトウェア設計者が間違って、内部ＰｕｌｌＵｐ状態や内部ＰｕｌｌＤｏ
ｗｎ状態に設定してしまった場合でも、ドライバ３１の出力でピン番号（１）の論理出力
レベルが決まるので、論理動作上の支障はまったく発生しない。しかし、内部ＰｕｌｌＵ
ｐ抵抗３３や内部ＰｕｌｌＤｏｗｎ抵抗３４に電流が流れるので、消費電流が増えてしま
うという問題がある。この間違った状態は、電子機器１００の実機テストでは発見は極め
て困難である。
【００２２】
「２．Ｉ２Ｃバスのバスマスター」
ＧＰＩＯ２１のピン番号（２）をＩ２Ｃバスのバスマスターとして使用する例であり、
特殊な使い方をする。Ｉ２Ｃバスは、周知のように、データ信号とクロック信号の２本の
信号線で構成され、ＧＰＩＯ２１と電子部品２３とがこのデータ信号とクロック信号の２
本の信号線で繋がるが、図１では、クロック信号関連のみ図示し、同様の構成のデータ信
号関連は図示を省略する。ＧＰＩＯ２１のピン番号（２）側がバスマスター（以下、マス
ター）、電子部品２３のピン番号（１）側がバススレーブ（以下、スレーブ）である。
【００２３】
このＩ２Ｃバスは標準規格で決められており、次に説明する。  
図２は、標準規格のＩ２Ｃバスのデータ信号とクロック信号のタイムチャートである。
データ信号とクロック信号は同期が取れており、スレーブは、クロック信号の立上がりで
、データ信号を取り込む。
【００２４】
データ信号は、マスターとスレーブ間で双方向であり、データ信号の構成は、スタート
ビットＳ、スレーブアドレスＡ７−Ａ１、Ｒ／Ｗ、ＡＣＫ、データＤ７−Ｄ０のシリアル
構成である。この内、Ｓ、Ａ７−Ａ１、Ｒ／Ｗの各ビットは、バスマスターが出力する。
Ａ７−Ａ１で指定されたスレーブは、Ｒ／Ｗを確認後に、１ビット時間、ＬレベルのＡＣ
Ｋを返信出力する。Ｄ７−Ｄ０は、Ｒ／ＷがＲｅａｄならばスレーブが出力し、Ｒ／Ｗが
Ｗｒｉｇｈｔならばマスターが出力する。
【００２５】
クロック信号は、常時マスターが出力する。しかし、ＡＣＫ期間中において、以下に説
明するクロックストレッチが発生する状況では、マスターは点線で示すようにクロック信
号の出力を継続するが、スレーブもＡＣＫのタイミングで実線で示すクロック信号を同じ
クロック信号ラインに出力し、両信号がぶつかるが、クロック信号ラインは、実線で示す
クロック信号となるように構成される必要がある。
【００２６】
次に、このクロックストレッチについて説明する。前述のスレーブがデータ信号でＡＣ
Ｋを返信出力するタイミングは厳しく規定されており、マスターがクロック信号を点線の
Ｈレベルにする前、すなわち、クロック信号がＬレベルの内に、スレーブは、Ｌレベルの
ＡＣＫを返信出力する必要がある。
【００２７】
ところが、スレーブは、何らかの処理中で、このＡＣＫの返信出力が遅れることがある
。これに対応するために、スレーブは、クロックストレッチと呼ばれる処理を行う。すな
わち、スレーブは、ＡＣＫビットのためのマスター出力のクロック信号がＬレベルのタイ
ミングで、スレーブがクロック信号をＬレベルにして出力する。マスター出力のＬレベル
とスレーブ出力のＬレベルが共に低インピーダンス出力でバスファイトしても、同じＬレ
ベルなので、クロック信号のラインは、Ｌレベルとなる。
【００２８】
マスター出力のクロック信号が点線のようにＨレベルになったときも、スレーブはクロ
ック信号をＬレベルにする（クロックストレッチ）。ＨレベルとＬレベルがバスファイト
するが、この状態でクロック信号ラインが強制的にスレーブ出力のＬレベルになるように
、ハードウェアを構成する必要があり、あと（図１）で説明する。
【００２９】
マスターは、クロック信号を出力しながらクロック信号をモニターしており、点線のよ
うにＨレベル出力してもＬレベルをモニターしたときは、クロック信号がＨレベルになる
のを待つ。マスターは、モニターしたクロック信号がＨレベルになったら、データ信号を
チェックしてＬレベル（ＡＣＫ）であれば、指定のスレーブが存在することを知る。そし
て、マスターは、クロック信号をＬレベルにして、ＡＣＫ確認のフェーズを終了し、以降
のＤ７−Ｄ０のフェーズに入る。
【００３０】
なお、図示しないが、Ｄ７−Ｄ０のフェーズにおいても、ＡＣＫと同様の方法でクロッ
クストレッチを行うことができる。
【００３１】
再び、図１に戻り、前記クロックストレッチでバスファイト時のクロック信号が前記所
定のレベルとなるための構成について説明する。マスター側のＧＰＩＯ２１のピン番号（
２）がＩ２Ｃバスのクロック信号ラインである信号線名（Ｉ２Ｃ＿ＳＣＬ）でスレーブ側
の電子部品２３のピン番号（１）と繋がる。クロック信号ラインは、抵抗２４（部品番号
（Ｒ１））により、外部ＰｕｌｌＵｐされる。
【００３２】
マスター側のＧＰＩＯ２１のピン番号（２）に対する制御部２５とＲＯＭ２６によるプ
ログラマブル設定は以下のように行う必要がある。  
・Ｌレベル出力を行う時は、ＧＰＩＯの一般的な使用方法であり、出力ピン設定および
内部ＮｏＰｕｌｌ設定し、その後、Ｌレベル出力を行う。すなわち、ドライバ３５による
低インピーダンスのＬレベル出力である。したがって、外部ＰｕｌｌＵｐの抵抗２４があ
っても、クロック信号ラインはＬレベルとなる。この状態で、スレーブ側の電子部品２３
のピン番号（１）が低インピーダンスのＬレベル出力を行っても、同じＬレベルなのでバ
スファイトは発生せず、クロック信号ラインはＬレベルである。
【００３３】
・Ｈレベル出力を行う時は、ＧＰＩＯとして特殊な使い方をする。すなわち、出力を行
うにも関わらず、入力ピン設定および内部ＮｏＰｕｌｌ設定とする。ドライバ３５はＨｉ
−Ｚ（高インピーダンス）であり、したがって、クロック信号ラインは外部ＰｕｌｌＵｐ
の抵抗２４によりＨレベルとなる。この状態で、スレーブ側の電子部品２３のピン番号（
１）が低インピーダンスのＬレベル出力を行うと、抵抗２４よりも低インピーダンスのこ
のＬレベル出力によりクロック信号ラインはＬレベルになる。マスターは、Ｈレベル出力
しているとは言え、入力ピン設定および内部ＮｏＰｕｌｌ設定なので、クロック信号ライ
ンの状態をレシーバ３６でモニターすることができ、スレーブのＬレベル出力を知ること
ができる。
【００３４】
以上の構成により、ＧＰＩＯ２１のピン番号（２）をＩ２Ｃバスのクロック信号のマス
ターとして使用することができるものである。
【００３５】
ところで、Ｉ２Ｃバス用に、Ｈレベル出力を行う時は、出力を行うにも関わらず、入力
ピン設定および内部ＮｏＰｕｌｌ設定とすることは、ＧＰＩＯ２１の一般的な使い方とし
てはまれであり、Ｉ２Ｃバス以外の通常では、Ｈレベル出力を行う時は出力ピン設定でＨ
レベル出力とするのが普通である。
【００３６】
それだけに、ソフトウェア設計者は、ＧＰＩＯ２１のＨレベル出力を行うときに、出力
ピン設定でＨレベル出力として設計してしまうおそれが多分にある。もし、間違ってこの
ように設計してしまった場合、クロックストレッチ時、マスターの出力ピン設定での低イ
ンピーダンスのＨレベル出力と、スレーブの低インピーダンスのＬレベル出力とがバスフ
ァイトしてしまい、クロック信号ラインのＨ／Ｌレベルは不定となり、誤動作を引き起こ
す。
【００３７】
しかし、電子機器１００の実機動作テストでは、Ｉ２Ｃバスの定常動作は簡単に発生で
きてテストできるが、イレギュラーな非定常動作のスレーブのＡＣＫ応答が遅れてクロッ
クストレッチを行うという事象は発生させることが難しく、その分のテストが行われずに
、ソフトウェアの設計ミスを見逃してしまうことがある。
【００３８】
ＧＰＩＯ２１を、通常の出力ポートとして使用する例も、Ｉ２Ｃバスのバスマスターと
して使用する例も、ソフトウェアの設計ミスが、電子機器１００の実機動作テストでは発
見が難しい事例であり、そのような場合、特に、電子機器１００の外部である本発明のソ
フトウェアミス検出ツール２００が有効となる。
【００３９】
次に、ソフトウェアミス検出ツール２００で使用する電子機器１００の回路のハードウ
ェアデータとソフトウェアデータについて説明する。
【００４０】
図３は、本発明の各実施例に係る電子機器１００の回路のハードウェアデータを説明す
る図である。ハードウェア開発ツール（不図示）で回路設計時に得られるデータである。
図１の回路の（括弧）書きの部分のみについて説明する。図３（Ａ）は、ハードウェアデ
ータの内、回路の接続を表すＮＥＴリストである。図３（Ｂ）は、ハードウェアデータの
内、ＩＣのピン表であり、ピン番号とそのピン名称を表すデータである。
【００４１】
図３（Ａ）のＮＥＴリストは、信号線毎に、この信号線に繋がる全ての部品とその部品
のピン番号を表すリストであり、１つの信号線に関して繋がるピンの数分のリストとして
表される。１つの信号線に繋がるピンが２つあれば２つのリスト、１つの信号線に繋がる
ピンが３つあれば３つのリストとして表される。  
・リスト  “信号線名”：“部品名称”：“部品番号”：“ピン番号”
部品名称のない部品については、“部品名称”部分を削除する。
【００４２】
具体的には、ＧＰＩＯ２１のピン番号（１）関連（通常の出力ポートの例）として、
・Ｎ１  “Ａ＿ＯＵＴ”：“ＣＨＩＰＳＥＴ”：“ＩＣ００１”：“１”
・Ｎ２  “Ａ＿ＯＵＴ”：“ＭＯＤＵＬＥ＿Ａ”：“ＩＣ００２”：“１”
すなわち、Ｎ１は、信号線名（Ａ＿ＯＵＴ）が、部品名称（ＣＨＩＰＳＥＴ）、部品番
号（ＩＣ００１）のピン番号（１）に繋がることを表す。Ｎ２は、同じ信号線名（Ａ＿Ｏ
ＵＴ）が、部品名称（ＭＯＤＵＬＥ＿Ａ）、部品番号（ＩＣ００２）のピン番号（１）に
繋がることを表す。
【００４３】
ＧＰＩＯ２１のピン番号（２）関連（Ｉ２Ｃのバスマスターの例）として、
・Ｎ３  “Ｉ２Ｃ＿ＳＣＬ”：“ＣＨＩＰＳＥＴ”：“ＩＣ００１”：“２”
・Ｎ４  “Ｉ２Ｃ＿ＳＣＬ”：“ＭＯＤＵＬＥ＿Ｂ”：“ＩＣ００３”：“１”
・Ｎ５  “Ｉ２Ｃ＿ＳＣＬ：“Ｒ１”：“２”
・Ｎ６  “Ｌ２６Ｖ”：“Ｒ１”：“１”
となる。
【００４４】
図３（Ｂ）のＩＣのピン表は、ＩＣの部品番号とその全てのピン番号とそのピン名称が
以下のように表される。  
・部品名称    部品番号（１段目は、部品名と部品番号）
・ピン番号：ピン名称（２段目以降は、全てのピン番号とピン名称）
・ピン番号：ピン名称
・ピン番号：ピン名称
具体的には、
・ＣＨＩＰＳＥＴ    ＩＣ００１
・１：ＧＰＩＯ＿１
・２：ＧＰＩＯ＿２
・ＭＯＤＵＬＥ＿Ａ    ＩＣ００２
・１：Ａ＿１
・ＭＯＤＵＬＥ＿Ｂ    ＩＣ００３
・１：Ｉ２Ｃ＿ＣＬＫ
となる。
【００４５】
図４は、本発明の各実施例に係る電子機器１００のＧＰＩＯ２１の入出力ピン関連のＨ
Ｗ／ＳＷ仕様テーブル６（正誤表）を説明する図であり、電子機器１００の予め決められ
た設計仕様に相当する。入出力ピンを制御すべき正しいソフトウェアデータ（ソースコー
ド）と誤ったソフトウェアデータ（ソースコード）を示す図である。このテーブルは、後
（図６）で説明するソフトウェアミス検出ツール２００に入力される。
【００４６】
ＨＷ／ＳＷ仕様テーブル６は、ＧＰＩＯ２１に繋がる信号線毎に、ＩＣピン表のＧＰＩ
Ｏのピン名、ソフトウェアデータ（ソースコード）の正誤を示す。
【００４７】
Ｔ１は、入出力ピン（１）を通常の出力ピンとして使う場合であり、信号線名（Ａ＿Ｏ
ＵＴ）、ピン名（ＧＰＩＯ＿１）である。  
Ｔ１１は、このピン名（ＧＰＩＯ＿１）に対するモード設定の正しいソースコードであ
り、ピン名（ＧＰＩＯ＿１）を出力ピン（ｏｕｔ）として設定（ｓｅｔ）し、また、内部
ＮｏＰｕｌｌ（ｎｏｐｕｌｌ）に設定する。これにより、余分な電流を消費しない。  
Ｔ１２、Ｔ１３は、ピン名（ＧＰＩＯ＿１）に対するモード設定の誤ったソースコード
であり、ピン名（ＧＰＩＯ＿１）を内部ＰｕｌｌＵｐ（ｐｕｌｌｕｐ）、又は、内部Ｐｕ
ｌｌＤｏｗｎ（ｐｕｌｌｄｏｗｎ）に設定しており、余分な電流を消費してしまう。
【００４８】
Ｔ２は、入出力ピン（２）をＩ２Ｃバスのクロック信号のバスマスターとして使う場合
であり、信号線名（Ｉ２Ｃ＿ＳＣＬ）、ピン名（ＧＰＩＯ＿２）である。  
Ｔ２１は、このピン名（ＧＰＩＯ＿２）に対するＨレベル出力の正しいソースコードで
あり、ピン名（ＧＰＩＯ＿２）を入力ピン（ｉｎ）として設定（ｓｅｔ）し、また、内部
ＮｏＰｕｌｌ（ｎｏｐｕｌｌ）に設定する。Ｈレベル出力するのに入力ピン設定とするだ
けで、外部のＰｕｌｌＵｐ抵抗２４（図１）によりＨレベルとなり、かつモニターできる
Ｉ２Ｃでの特殊な使い方である。
【００４９】
Ｔ２２のペアのソースコードは、ピン名（ＧＰＩＯ＿２）に対するＨレベル出力の誤っ
たソースコードであり、ピン名（ＧＰＩＯ＿２）をまず、出力ピン（ｏｕｔ）に設定（ｓ
ｅｔ）し、次に、Ｈレベル（Ｈ）を出力（ｏｕｔ）している。これは、Ｉ２Ｃ以外では一
般的な使い方であるが、Ｉ２Ｃでは、バスファイトで誤動作の原因となる。
【００５０】
Ｔ２３のペアのソースコードは、ピン名（ＧＰＩＯ＿２）に対するＬレベル出力の正し
いソースコードであり、ピン名（ＧＰＩＯ＿２）をまず、出力ピン（ｏｕｔ）に設定（ｓ
ｅｔ）し、次に、Ｌレベル（Ｌ）を出力（ｏｕｔ）している。これは、Ｉ２Ｃ以外の一般
的な使い方と同じである。
【００５１】
図５は、本発明の各実施例に係る電子機器１００のＧＰＩＯ２１を制御するソフトウェ
アデータの一例を説明する図である。ソフトウェア開発ツール(不図示)でソフトウェア設
計時に得られる膨大なソースコードの一部を抜粋したものである。このソースコードがコ
ンパイルおよびアセンブルされて等価な機械語がＲＯＭ２６に格納される。
【００５２】
ソフトウェア設計者は、本来は、図４に示した正しいソースコードがソフトウェア外部
仕様として与えられるので、その正しいソースコードどおりに設計すればソフトウェアミ
スは発生しない。しかし、開発段階で色々な修正を加えたり、他のソフトウェア設計者に
変わったりした場合など、正しいソースコードどおりに設計できるとは限らない。特に、
ＧＰＩＯの入出力ピンの制御は一般的には簡単なだけに、ついミスをしてしまうことが起
こり得る。
【００５３】
図５（Ａ）は、ＧＰＩＯ２１のピン名（ＧＰＩＯ＿１）を通常の出力ピンとして使用す
る場合であり、図４で説明したように、Ｃ１のモード設定命令は正しい。Ｃ２はＨ出力命
令、Ｃ３はＬ出力命令である。Ｃ４のモード設定命令は間違いである。
【００５４】
図５（Ｂ）は、ＧＰＩＯ２１のピン名（ＧＰＩＯ＿２）をＩ２Ｃバスのバスマスターと
して使用する場合であり、図４で説明したように、Ｃ５は正しい。Ｃ６とＣ７のペアは間
違いである。Ｃ８とＣ９のペアは正しい。
【００５５】
以上説明した図３のハードウェアデータ（ＮＥＴリストとＩＣピン表）と図５のソフト
ウェアデータ（ソースコード）は、電子機器１００の設計情報として、ハードウェア設計
ツール（不図示）やソフトウェア設計ツール（不図示）に存在する。
【００５６】
そして、これらのデータは、後（図６）で説明するソフトウェアミス検出ツール２００
に入力されて格納される。また、図４のＨＷ／ＳＷ仕様テーブル６（正誤表）もソフトウ
ェアミス検出ツール２００に入力されて格納される。
【００５７】
次に、これらのデータによりソフトウェアのミスを発見するソフトウェアミス検出ツー
ル２００について説明する。  
図６は、本発明の各実施例に係るソフトウェアミス検出ツール２００のブロック図であ
る。ソフトウェアミス検出ツール２００は、ＰＣ（パーソナルコンピュータ）等であり、
ＨＷデータフォルダ１、ＳＷデータフォルダ２、キーボード３、ミス検出モジュール１０
、表示部１１などから構成される。
【００５８】
ミス検出モジュール１０は、ソフトウェアミス検出ツール２００にインストールされた
モジュールであり、内部に、ＨＷデータ入力モジュール４、ＳＷデータ入力モジュール５
、ＨＷ／ＳＷ仕様テーブル６、検索条件入力モジュール７、判定処理モジュール８、判定
結果ストアモジュール９などを有する。
【００５９】
ユーザは、まず、ハードウェア設計ツール(不図示)で設計されたハードウェアデータの
ＮＥＴリスト（図３（Ａ））とＩＣピン表（図３（Ｂ））を、ＨＷデータフォルダ１、例
えば￥Ｃ￥ＨＷに保存する。
【００６０】
また、ユーザは、ソフトウェア設計ツール(不図示)で設計されたソフトウェアデータの
ソースコード（図５）を、ＳＷデータフォルダ２、例えば￥Ｃ￥ＳＷに保存する。このソ
フトウェアデータの保存は、ソフトウェアミス検出を行うために、ソフトウェアデータを
変更する毎に行うことが望ましい。
【００６１】
また、ユーザは、キーボード３から、ＨＷ／ＳＷ仕様（図４）を入力し、ＨＷ／ＳＷ仕
様テーブル６に書き込まれる。このＨＷ／ＳＷ仕様は、ソフトウェアミス検出の基準とな
るものであり、確実に入力されるものとする。そして、電子機器１００のシステム変更が
ない限りは固定される。ＨＷ／ＳＷ仕様は、フォルダに保存してもよい。ソフトウェアミ
ス検出ツール２００を汎用性のあるツールにするためには、ＨＷ／ＳＷ仕様テーブル６を
設け、その内容を電子機器１００の内容に応じて、書き換えるようにしてもよい。
【００６２】
そして、ソフトウェアミス検出を行うユーザは、キーボード３から検索条件を入力し、
検索条件入力モジュール７に書き込まれる。検索条件については、後述（図７〜図８）す
る。
【００６３】
これらのハードウェアデータ（図３相当）、ソフトウェアデータ（図５相当）、ＨＷ／
ＳＷ仕様データ（図４相当）、検索条件データは、ミス検出モジュール１０により、ＨＷ
データ入力モジュール４、ＳＷデータ入力モジュール５、検索条件入力モジュール７を介
して、または直接に、判定処理モジュール８に読み込まれる。
【００６４】
これらの情報を基に、判定処理モジュール８は、後述（図７〜図８）するように、ソフ
トウェアのミスを判定し、判定結果を判定結果ストアモジュール９に記録し、表示部１１
に表示させる。
【実施例１】
【００６５】
図７は、本発明の実施例１に係るソフトウェアミス検出ツール２００の判定処理モジュ
ール８の動作フローチャートである。実施例１は、ユーザが検索条件として、ソフトウェ
アのソースコードに基づく検索条件データを入力する場合である。
【００６６】
ユーザは、ＧＰＩＯの出力ピン設定時の内部ＰｕｌｌＵｐ／内部ＰｕｌｌＤｏｗｎ／内
部ＮｏＰｕｌｌの設定ミス、すなわち、余分な消費電流を確認したいときには、ソースコ
ードに基づく「ｇｐｉｏ＿ｓｅｔ（？，ｏｕｔ，？）」をキーボード３から入力する。
【００６７】
これは、図４のソースコードに示すように、「ｇｐｉｏ＿ｓｅｔ（ＧＰＩＯのピン名，
ｏｕｔ，内部ｐｕｌｌ状態）」に対応したデータであり、最初の「？」は、ＧＰＩＯのピ
ン名は何でもよいの意味、２番目の「？」は、内部ｐｕｌｌ状態は何でもよいの意味であ
る。
【００６８】
判定処理モジュール８は、まず、キーボード３から入力された検索条件を確認する（ス
テップＳ１）。ここで、「ｇｐｉｏ＿ｓｅｔ（？，ｏｕｔ，？）」が確認されれば、この
条件でソフトウェアデータ(図５全体)を検索し、以下が検出される（ステップＳ２）。  
・Ｃ１・ｇｐｉｏ＿ｓｅｔ（ＧＰＩＯ＿１，ｏｕｔ，ｎｏｐｕｌｌ）
・Ｃ４・ｇｐｉｏ＿ｓｅｔ（ＧＰＩＯ＿１，ｏｕｔ，ｐｕｌｌｕｐ）
・Ｃ６・ｇｐｉｏ＿ｓｅｔ（ＧＰＩＯ＿２，ｏｕｔ，ｎｏｐｕｌｌ）
・Ｃ８・ｇｐｉｏ＿ｓｅｔ（ＧＰＩＯ＿２，ｏｕｔ，ｎｏｐｕｌｌ）
そして、判定処理モジュール８は、ステップＳ２で検出したソースコードに対して、Ｈ
Ｗ／ＳＷ仕様テーブル６（図４）の正誤表を基に判定し、Ｃ４はＮＧ、Ｃ４以外はＯＫで
あると判定する。ＧＰＩＯのＩ２Ｃバスについての検索条件ではないので、Ｃ６もＯＫと
判定され（ステップＳ３）、判定結果ストアモジュール９に記録する。
【００６９】
そして、Ｃ４にミスがあることと、Ｃ４を内部ＮｏＰｕｌｌに修正するように表示させ
る（ステップＳ４）。もし、Ｃ８が内部ＰｕｌｌＵｐに設定してあれば、それもミスとし
て検出される。
【００７０】
ユーザは、ソフトウェア設計ツール（不図示）により、電子機器１００のソフトウェア
（ソースコード）のＣ４の「ｐｕｌｌｕｐ」を「ｎｏｐｕｌｌ」に修正し、電子機器１０
０のＲＯＭ２６を修正することにより、電子機器１００の消費電流の無駄な増加を抑える
ことができる。
【００７１】
実施例１によれば、ソースコードに基づく検索条件で検索するので、ソースコード全体
に対して、判定がなされ、上述したように、ＧＰＩＯの全ての出力ピン設定のソースコー
ドの判定を行うことができる。
【実施例２】
【００７２】
図８は、本発明の実施例２に係るソフトウェアミス検出ツール２００の判定処理モジュ
ール８の動作フローチャートである。実施例２は、ユーザが検索条件として、ハードウェ
アのＮＥＴリストの信号線名を検索条件データとして入力する場合である。
【００７３】
実施例１のようにソースコードで検索した場合は、ソースコード全体に対して判定がな
されるが、ＧＰＩＯの出力ピン設定時の用途として、内部ＮｏＰｕｌｌが全て正解かとい
うと、用途によっては、例えば、出力ピンのドライブ能力を高める場合に内部ＰｕｌｌＵ
ｐする用途もありえる。
【００７４】
実施例２は、そのような場合も含めて、ＧＰＩＯの入出力ピンの用途毎、すなわち、Ｎ
ＥＴリストの信号線名を検索条件とするものである。信号線は、回路図中に同じものは存
在しないので、１つ１つを指定することができる。
【００７５】
ユーザは、例えば、ＧＰＩＯの入出力ピンをＩ２Ｃバスのマスターとして使用する用途
の場合、そのソフトウェアのミスを検出する目的で、ＮＥＴリストの信号線名「Ｉ２Ｃ＿
ＳＣＬ」をキーボード３から入力する。
【００７６】
判定処理モジュール８は、まず、キーボード３から入力された検索条件を確認する（ス
テップＳ１１）。ここで、「Ｉ２Ｃ＿ＳＣＬ」がが確認されれば、この条件でＮＥＴリス
ト(図３（Ａ）全体) を検索し、以下が検出される（ステップＳ１２）。  
・Ｎ３・“Ｉ２Ｃ＿ＳＣＬ”：“ＣＨＩＰＳＥＴ”：“ＩＣ００１”：“２”
・Ｎ４・“Ｉ２Ｃ＿ＳＣＬ”：“ＭＯＤＵＬＥ＿Ｂ”：“ＩＣ００３”：“１”
・Ｎ５・“Ｉ２Ｃ＿ＳＣＬ：“Ｒ１”：“２”
次に、判定処理モジュール８は、上記検出したＮＥＴリスト中から、その信号線名「Ｉ
２Ｃ＿ＳＣＬ」が繋がる部品とピン番号を確認し、以下が得られる(ステップＳ１３)。  
・“ＣＨＩＰＳＥＴ”：“ＩＣ００１”：“２”
・“ＭＯＤＵＬＥ＿Ｂ”：“ＩＣ００３”：“１”
・“Ｒ１”：“２”
次に、判定処理モジュール８は、上記部品の内、ＩＣピン表（図３（Ｂ））にあるピン
名を確認し、以下が得られる（ステップＳ１４）。  
・ＧＰＩＯ＿２
・Ｉ２Ｃ＿ＣＬＫ
次に、判定処理モジュール８は、上記抽出したピン名の内、ＧＰＩＯであるものを確認
し、「ＧＰＩＯ＿２」が確認される（ステップＳ１５）。  
以上で、信号線「Ｉ２Ｃ＿ＳＣＬ」を制御するＧＰＩＯのピン名が「ＧＰＩＯ＿２」で
あることがわかる。
【００７７】
次に、判定処理モジュール８は、図５のソフトウェアデータ全てから、ピン名称「ＧＰ
ＩＯ＿２」が含まれるソースコードを検出し、以下が得られる（ステップＳ１６）。  
・Ｃ５：ｇｐｉｏ＿ｓｅｔ（ＧＰＩＯ＿２，ｉｎ，ｎｏｐｕｌｌ）
・Ｃ６：ｇｐｉｏ＿ｓｅｔ（ＧＰＩＯ＿２，ｏｕｔ，ｎｏｐｕｌｌ）
・Ｃ７：ｇｐｉｏ＿ｏｕｔ（ＧＰＩＯ＿２，Ｈ）
・Ｃ８：ｇｐｉｏ＿ｓｅｔ（ＧＰＩＯ＿２，ｏｕｔ，ｎｏｐｕｌｌ）
・Ｃ９：ｇｐｉｏ＿ｏｕｔ（ＧＰＩＯ＿２，Ｌ）
そして、判定処理モジュール８は、ステップＳ１６で検出したソースコードに対して、
ＨＷ／ＳＷ仕様テーブル６（図４）の「Ｉ２Ｃ＿ＳＣＬ」についての正誤表Ｔ２を基に判
定し（ステップＳ１７）、ＨＷ／ＳＷ仕様テーブル６（図４）のＴ２２の誤ペアのソース
コードと同じＣ６とＣ７のペアがミスと判定され、判定結果ストアモジュール９に記録す
る。
【００７８】
そして、Ｃ６とＣ７のペアがミスであることと、Ｃ６とＣ７のペアを、ＨＷ／ＳＷ仕様
テーブル６（図４）のＴ２１の正解のソースコードと同じ内容に修正するように表示させ
る（ステップＳ１８）。
【００７９】
ユーザは、ソフトウェア設計ツール（不図示）により、電子機器１００のソフトウェア
（ソースコード）のＣ６とＣ７のペアを、入力ピン設定（Ｔ２１と同じ）に修正し、電子
機器１００のＲＯＭ２６を修正することにより、電子機器１００のＩ２Ｃ機能を正常にす
ることができる。
【００８０】
なお、ユーザが検索条件として「Ａ−ＯＵＴ」を入力した場合、判定処理モジュール８
は、「Ａ−ＯＵＴ」、すなわち、ＧＰＩＯ＿１についてのソフトウェアを対象にして、Ｈ
Ｗ／ＳＷ仕様テーブル６（図４）の「Ａ−ＯＵＴ」の正誤表Ｔ１を基に判定する。
【００８１】
実施例２によれば、ＮＥＴリストの信号線名を検索条件として検索するので、ＧＰＩＯ
の個々の入出力ピンの用途に合ったソフトウェアのミスを検出することができる。
【００８２】
なお、ユーザが実施例１と実施例２の検索条件を両方入力した場合は、判定処理モジュ
ール８は、両方の検索とミス検出を行う。
【００８３】
また、ＨＷ／ＳＷ仕様テーブル６を設けたが、ソフトウェアミス検出ツール２００が特
定の電子機器１００に限定したツールであるならば、ＨＷ／ＳＷ仕様テーブル６を設けず
に、図７、図８の動作フローチャートのステップ中に判定条件を直接組み込んでもよい。
【００８４】
また、電子機器１００の例として、ＧＰＩＯの通常の出力ピン用途と、Ｉ２Ｃバス用途
について説明したが、ＧＰＩＯの他の使い方であってもよい。また、ＧＰＩＯ以外のＣＰ
Ｕ周辺ペリフェラル、例えば、ＤＭＡＣやカウンタなど、プログラムにより動作するもの
であれば何でもよい。また、上記は、電子機器１００の実機テストではソフトウェアの設
計ミスを発見しにくい場合について説明したが、本発明のツールは、どのようなソフトウ
ェアに対しても有効である。
【００８５】
以上説明したように、本発明によれば、特に、電子機器１００の実機テストでは発見し
にくいソフトウェアのミスを、外部のソフトウェアミス検出ツール２００で発見すること
ができる。
【符号の説明】
【００８６】
１  ＨＷデータフォルダ
２  ＳＷデータフォルダ
３  キーボード
４  ＨＷデータ入力モジュール
５  ＳＷデータ入力モジュール
６  ＨＷ／ＳＷ仕様テーブル
７  検索条件入力モジュール
８  判定処理モジュール
９  判定結果ストアモジュール
１０  ミス検出モジュール
１１  表示部
２１  ＧＰＩＯ
２２、２３  電子部品
２４  抵抗（外部ＰｕｌｌＵｐ）
２５  制御部
２６  ＲＯＭ
３１  ドライバ
３２  レシーバ
３３  内部ＰｕｌｌＵｐ抵抗
３４  内部ＰｕｌｌＤｏｗｎ抵抗
３５  ドライバ
３６  レシーバ
３７  内部ＰｕｌｌＵｐ抵抗
３８  内部ＰｕｌｌＤｏｗｎ抵抗
１００  電子機器
２００  ソフトウェアミス検出ツール
【図１】
0005391962.tif 000002
【図２】
0005391962.tif 000003
【図３】
0005391962.tif 000004
【図４】
0005391962.tif 000005
【図５】
0005391962.tif 000006
【図６】
0005391962.tif 000007
【図７】
0005391962.tif 000008
【図８】
0005391962.tif 000009