(57)【要約】【課題】デバッグ機能等の複雑な機能を搭載することなく、自動的に短時間で異常原因を検出可能なＭＰＵを提供する。【解決手段】マイクロコントローラは、処理ユニットによるプログラムの実行開始を起点として、レジスタの格納情報が指定する期間が経過すると、処理ユニットにプログラムの実行を停止させるとともに、バッファにバス上の情報を格納させる制御ユニットと、バッファに格納した情報を外部に送信可能であると共に外部からの情報を受信可能である通信ユニットとを含み、処理ユニットは、通信ユニットにより外部から受信した情報とバッファに格納した情報とを比較し、該比較の結果に応じて、レジスタの格納情報を異なる期間を指定する情報に書き換えてプログラムの先頭からの実行を再度開始する動作、或いは、少なくともレジスタの格納情報を外部に出力する動作、の何れかを選択し実行する。【選択図】図１
2011159252.tif 000002
【特許請求の範囲】
【請求項１】
処理ユニットと、
バスと、
期間を指定する情報を格納するレジスタと、
前記バスに接続されるバッファと、
前記処理ユニットによる第１のプログラムの実行開始を起点として、前記レジスタの格納情報が指定する期間が経過すると、前記処理ユニットに前記第１のプログラムの実行を停止させるとともに、前記バッファに前記バス上の情報を格納させる制御ユニットと、
前記バッファに格納した情報を外部に送信可能であると共に外部からの情報を受信可能である通信ユニットと、
を含み、前記処理ユニットは、前記通信ユニットにより外部から受信した情報と前記バッファに格納した情報とを比較し、該比較の結果に応じて、前記レジスタの格納情報を異なる期間を指定する情報に書き換えて前記第１のプログラムの先頭からの実行を再度開始する第１の動作、或いは、少なくとも前記レジスタの格納情報を外部に出力する第２の動作、の何れかを選択し実行することを特徴とするマイクロコントローラ。
【請求項２】
前記処理ユニットは、前記第１のプログラムとは異なる第２のプログラムを実行することにより、前記比較動作、前記レジスタの格納情報の書き換え動作、及び前記レジスタの格納情報の外部出力動作を実行することを特徴とする請求項１記載のマイクロコントローラ。
【請求項３】
ＲＯＭを更に含み、前記第２のプログラムは前記ＲＯＭに格納されていることを特徴とする請求項２記載のマイクロコントローラ。
【請求項４】
前記制御ユニットは、
タイマと、
前記タイマの出力と前記レジスタの格納情報とが一致すると一致信号を生成する比較器と、
を含み、前記一致信号に応答して、前記処理ユニットが前記第１のプログラムの実行を停止し、前記バッファが前記バス上の情報を格納することを特徴とする請求項１乃至３何れか一項記載のマイクロコントローラ。
【請求項５】
請求項１記載のマイクロコントローラを２つ用意し、
前記２つのマイクロコントローラを前記通信ユニットを介して接続し、
前記２つのマイクロコントローラに前記第１のプログラムを実行させ、
前記２つのマイクロコントローラの一方から出力される前記レジスタの格納情報を記録する、
各段階を含むことを特徴とするマイクロコントローラの試験方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願開示は、一般にマイクロコントローラに関し、詳しくは試験機能を備えたマイクロコントローラに関する。
【背景技術】
【０００２】
ＭＣＵ（Micro Control Unit）は、マイクロコントローラとも呼ばれ、ＣＰＵ、メモリ、入出力回路等を含むコンピュータシステムを一つの集積回路に実装したものであり、組み込みシステムとして電子機器の制御などに用いられる。家電機器、携帯電話、自動車等の殆どの電子・機械製品において、ＭＣＵが利用されている。ＭＣＵに誤動作が発生した場合には、不良ＭＣＵの異常原因を特定して、以後製造されるＭＣＵ製品から異常原因を取り除くことが必要となる。
【０００３】
不良ＭＣＵの異常原因を調べるためには、まず、実行するプログラム中で動作異常の原因が発生する箇所を特定する作業を行なう。その際、一般には、現象から推論される異常発生箇所の候補をひとつずつチェックしていき、実際の異常発生箇所を見つけることになる。具体的には、プログラムの流れを解析し、シミュレーションやエミュレーションにより、異常データ出力箇所に関連する異常が発生しそうな箇所を予想し、チェックプログラムを追加して動作確認を行なう。このように異常発生場所を予想し、プログラムを書換えながら予想が正しいかどうかを判定し、それを丹念に繰り返すことにより、異常原因となるプログラム中の箇所を特定する。このような不良解析処理は手作業で行なわれ、かなりの時間と労力がかかってしまう。不良解析においては迅速な原因究明が求められ、自動的に短時間で異常原因を検出できる処理が望まれる。
【０００４】
不良解析の別の方法として、モニタ（又はデバッグ）機能をチップに搭載する方法がある。モニタを起動してプログラム実行を逐次チェックすることにより、プログラム中の異常原因を調べることができる。しかしながら、機器への組み込みシステムとして利用される各ＭＣＵチップにモニタを搭載することは、大幅な価格上昇につながるために好ましくない。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−８３３２０号公報
【特許文献２】特開２００９−６９０３６号公報
【特許文献３】特開２００９−４８５１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
以上を鑑みると、デバッグ機能等の複雑な機能を搭載することなく、自動的に短時間で異常原因を検出可能なＭＣＵ及び異常原因検出方法が望まれる。
【課題を解決するための手段】
【０００７】
マイクロコントローラは、処理ユニットと、バスと、期間を指定する情報を格納するレジスタと、前記バスに接続されるバッファと、前記処理ユニットによる第１のプログラムの実行開始を起点として、前記レジスタの格納情報が指定する期間が経過すると、前記処理ユニットに前記第１のプログラムの実行を停止させるとともに、前記バッファに前記バス上の情報を格納させる制御ユニットと、前記バッファに格納した情報を外部に送信可能であると共に外部からの情報を受信可能である通信ユニットとを含み、前記処理ユニットは、前記通信ユニットにより外部から受信した情報と前記バッファに格納した情報とを比較し、該比較の結果に応じて、前記レジスタの格納情報を異なる期間を指定する情報に書き換えて前記第１のプログラムの先頭からの実行を再度開始する第１の動作、或いは、少なくとも前記レジスタの格納情報を外部に出力する第２の動作、の何れかを選択し実行することを特徴とする。
【０００８】
またマイクロコントローラの試験方法は、上記のマイクロコントローラを２つ用意し、前記２つのマイクロコントローラを前記通信ユニットを介して接続し、前記２つのマイクロコントローラに前記第１のプログラムを実行させ、前記２つのマイクロコントローラの一方から出力される前記レジスタの格納情報を記録する各段階を含むことを特徴とする。
【発明の効果】
【０００９】
本願開示の少なくとも１つの実施例によれば、デバッグ機能等の複雑な機能を搭載することなく、自動的に短時間で異常原因を検出することができる。
【図面の簡単な説明】
【００１０】
【図１】ＭＣＵの構成の一例を示す図である。
【図２】図１のＭＣＵの動作解析を行なう動作解析方式の構成を示す図である。
【図３】図２の動作解析方式による動作解析の一例を示す図である。
【図４】図３の動作解析を詳細に示す図である。
【図５】図２の動作解析方式による動作解析の別の一例を示す図である。
【図６】図５の動作解析を詳細に示す図である。
【図７】図２の動作解析方式による動作解析の更に別の一例を示す図である。
【図８】図７の動作解析を詳細に示す図である。
【図９】図２の動作解析方式による特異点検出動作の一例を示す図である。
【図１０】図９の特異点検出動作を詳細に示す図である。
【図１１Ａ】ＭＣＵの動作解析を行なう動作解析方法のフローチャート（その１）である。
【図１１Ｂ】ＭＣＵの動作解析を行なう動作解析方法のフローチャート（その２）である。
【図１１Ｃ】ＭＣＵの動作解析を行なう動作解析方法のフローチャート（その３）である。
【図１２】良品及び不良品のＭＣＵの動作を示す図である。
【図１３】良品及び不良品のＭＣＵの動作を示す図である。
【図１４】良品及び不良品のＭＣＵの動作を示す図である。
【図１５】良品及び不良品のＭＣＵの動作を示す図である。
【図１６】良品及び不良品のＭＣＵの動作を示す図である。
【図１７】良品及び不良品のＭＣＵの動作を示す図である。
【図１８】良品及び不良品のＭＣＵの動作を示す図である。
【図１９】良品及び不良品のＭＣＵの動作を示す図である。
【図２０】割込み処理発生時の問題について説明するための図である。
【図２１】割込み処理発生時の問題を解決する方法について説明するための図である。
【図２２】割込み処理時にサイクルカウントの進行を停止させる構成の一例を示す図である。
【発明を実施するための形態】
【００１１】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【００１２】
図１は、ＭＣＵの構成の一例を示す図である。図１のＭＣＵ１０は、ＣＰＵ１１、アドレス＆データバス１２、レジスタ１３、タイマ１４、比較器１５、ＡＮＤ回路１６、バッファ１７、通信ユニット１８、ｎ個の機能ブロック１９−１乃至１９−ｎ、ＲＯＭ２０、ＲＡＭ２１、及び外部端子２２及び２３を含む。ＣＰＵ（Central Processing Unit）１１は、処理ユニットとしてＭＣＵ１０全体の動作を制御すると共に、ＭＣＵ１０の動作に関連する種々のデータ演算処理等を実行する。アドレス＆データバス１２には、ＣＰＵ１１、レジスタ１３、タイマ１４、バッファ１７、通信ユニット１８、機能ブロック１９−１乃至１９−ｎ、ＲＯＭ２０、ＲＡＭ２１等が接続される。バスマスタであるＣＰＵ１１が、アドレス＆データバス１２のアドレスバスにアドレスを送出することにより、アドレス空間中の指定アドレスの回路にアクセスする。ＣＰＵ１１は、指定アドレスの回路からデータを読み出したり、指定アドレスの回路にデータを書き込んだりする。データは、アドレス＆データバス１２のデータバスを介して伝搬される。
【００１３】
ＲＯＭ（Read Only Memory）２０には、プログラム（ユーザプログラム、オペレーティングシステム）やシステムの設定値等が格納される。またＲＯＭ２０には、後述する解析動作プログラムが格納される。ＣＰＵ１１がユーザプログラムを実行することにより、ユーザが意図するＭＣＵ１０の動作（組み込み対象の電子機器を制御する動作等）を実行する。またＲＡＭ（Random Access Memory）２１は、ＣＰＵ１１がデータ処理を行なう際のワークエリアとして使用される。
【００１４】
機能ブロック１９−１乃至１９−ｎは、ＭＣＵ１０に要求される種々の機能を実現するためのブロックである。例えば、ＡＤ変換機能、ＤＡ変換機能、パルス出力機能、入力パルス幅測定機能、各種タイマ機能、各種通信機能等が機能ブロック１９−１乃至１９−ｎにより提供されてよい。
【００１５】
レジスタ１３は、期間を指定する情報を格納する。ＦＩＦＯ等のバッファ１７は、アドレス＆データバス１２に接続され、アドレス＆データバス１２上のアドレス及びデータを格納する。タイマ１４、比較器１５、及びＡＮＤ回路１６は、制御ユニットを構成する。この制御ユニットは、ＣＰＵ１１によるユーザプログラムの実行開始を起点として、レジスタ１３の格納情報が指定する期間が経過すると、ＣＰＵ１１にユーザプログラムの実行を停止させるとともに、バッファ１７にアドレス＆データバス１２上の情報を格納させる。具体的には、制御ユニットのタイマ１４が、ＣＰＵ１１によるユーザプログラムの実行開始を起点として、クロック信号のパルスの計数を開始する。比較器１５が、タイマ１４の出力する計数値とレジスタ１３の格納情報とを比較する。タイマ１４の出力する計数値とレジスタ１３の格納情報とが一致すると、比較器１５は一致信号ＭＴを生成する。この一致信号ＭＴに応答して、ＣＰＵ１１がユーザプログラムの実行を停止する。また一致信号ＭＴがＡＮＤ回路１６を介して取り込み信号ＬＴとして供給されると、これに応答して、バッファ１７がアドレス＆データバス１２上のアドレス及びデータを格納する。このバッファ１７が格納するアドレス＆データバス１２上のアドレス及びデータは、ＣＰＵ１１がユーザプログラムの実行を停止する直前のアドレス及びデータであってよい。
【００１６】
上記の構成により、ユーザプログラムが実行されてから指定の期間が経過したタイミングでのアドレス＆データバス１２上のアドレス及びデータをバッファ１７に記録することができる。なおＡＮＤ回路１６は、ＣＰＵ１１からの取り込み内容指定信号ＬＳと一致信号ＭＴとのＡＮＤを取り、両信号がアサート状態の時に取り込み信号ＬＴをアサートする。取り込み内容指定信号ＬＳは、命令フェッチ動作中のアドレス及びデータと、命令実行中（ＲＡＭ，レジスタ、外部端子への読み書き動作等）のアドレス及びデータとの、何れかのアドレス及びデータを指定して記録するための信号である。命令フェッチ動作中のアドレス及びデータを記録する場合、ＣＰＵ１１は、命令実行中に取り込み内容指定信号ＬＳをアサートする。オペランド読み書き動作中のアドレス及びデータを記録する場合、ＣＰＵ１１は、命令実行中に取り込み内容指定信号ＬＳをアサートする。両方のアドレス及びデータを記録する場合、ＣＰＵ１１は、取り込み内容指定信号ＬＳを命令フェッチ動作中及び命令実行中の両方でアサートする。
【００１７】
通信ユニット１８は例えばＳＩＯ（シリアルＩＯ）であり、バッファ１７にラッチした情報を外部端子２２を介して外部に送信可能であると共に、外部からの情報を外部端子２３を介して受信可能なよう構成される。後述するように、誤動作する不良ＭＣＵ１０と正常動作する正常ＭＣＵ１０とを通信ユニット１８を介して接続し、双方のＭＣＵ１０の動作を比較することで、ユーザプログラム中の異常原因箇所を特定することができる。この際、異常ＭＣＵ１０側でバッファ１７にラッチした情報を通信ユニット１８を介して正常ＭＣＵ１０側に送信し、この送信された情報を正常ＭＣＵ１０側で通信ユニット１８により受信する。
【００１８】
ＣＰＵ１１は、通信ユニット１８により外部から受信した情報とバッファ１７にラッチした情報とを比較する。ＣＰＵ１１は、この比較の結果に応じて、第１の動作或いは第２の動作を選択して実行する。第１の動作は、レジスタ１３の格納情報を、現在の指定期間とは異なる期間を指定する情報に書き換えて、ユーザプログラムの先頭からの実行を再度開始する動作である。第２の動作は、少なくともレジスタ１３の格納情報を外部に出力する動作である。例えば比較結果が第１の状態（一致及び不一致の一方）を示す場合に、ＣＰＵ１１は、レジスタ１３の格納情報を、現在の指定期間とは異なる期間を指定する情報に書き換えて、ユーザプログラムの先頭からの実行を再度開始する。また比較結果が第２の状態（一致及び不一致の他方）を示す場合に、ＣＰＵ１１は、少なくともレジスタ１３の格納情報を外部に出力する。レジスタ１３の格納情報を外部に出力することで、解析用に用いている外部のパーソナルコンピュータ等の機器は、誤動作が発生した箇所に関する情報を取得することができる。この際、レジスタ１３の格納情報だけでなく、バッファ１７にラッチしたアドレス及びデータを外部に送出してよい。これにより、異常の原因に関してより詳細な情報を得ることができる。
【００１９】
ＲＯＭ２０に格納される解析動作プログラムは、ユーザプログラム実行時以外の上記のＣＰＵ１１の動作を実行するためのものである。即ち、ＣＰＵ１１は、この解析動作プログラムを実行することにより、比較動作、レジスタ１３の格納情報の書き換え動作、及びレジスタ１３の格納情報の外部出力動作等を実行する。なお解析動作プログラムの実行からユーザプログラムの実行に移行する際、ＣＰＵ１１は、リセット信号等の動作切替制御信号ＳＣを送出し、ＭＣＵ１０の状態をユーザプログラム開始のために初期状態に設定する。またユーザプログラムの実行から動作解析プログラムの実行に移行する際にも、ＣＰＵ１１は、リセット信号等の動作切替制御信号ＳＣを送出する。
【００２０】
図２は、図１のＭＣＵの動作解析を行なう動作解析方式の構成を示す図である。図１に示すＭＣＵ１０を２つ用意する。一方は誤動作することが分かっている不良ＭＣＵ１０である。他方は正常動作する良品ＭＣＵ１０である。各ＭＣＵ１０は、誤動作が検出されたユーザシステムの環境のままで動作解析される。即ち、各ＭＣＵ１０は、ユーザがＭＣＵ１０を組み込んだシステム３０に組み込まれたままの状態で動作解析される。
【００２１】
まず２つのＭＣＵ１０をそれぞれの通信ユニット１８を介して接続する。この接続経路が、シリアル通信経路３２として図２に示されている。また良品のＭＣＵ１０をパーソナルコンピュータ３１に接続し、解析動作の動作を指定する指定情報を書き込む。指定情報の書き込みは、ＳＩＯである通信ユニット１８を介して行なってよい。この指定情報は、例えば、指定期間を増減させる間隔を指定する情報、命令フェッチ時と命令実行時との何れを記録対象とするかを指定する情報等である。指定情報は、後述するように、良品ＭＣＵ１０から不良ＭＣＵ１０へと、シリアル通信経路３２を介して転送される。従って、良品ＭＣＵ１０と不良ＭＣＵ１０とは、同一の指定情報に基づいて解析動作を実行する。即ち、２つのＭＣＵ１０にユーザプログラムを実行させる。ユーザプログラム途中で実行動作が停止され、不良ＭＣＵ１０から良品ＭＣＵ１０へと転送されたアドレス及びデータと、良品ＭＣＵ１０で記録されたアドレス及びデータとを比較する。この比較結果が前記第２の状態を示す場合、２つのＭＣＵ１０の一方である良品ＭＣＵ１０からバッファ１７の格納情報が出力される。この出力された情報を、判定結果としてパーソナルコンピュータ３１が記録する。また比較結果が前記第２の状態を示しユーザプログラムが停止したことを明示的に示す情報を、ＭＣＵ１０からパーソナルコンピュータ３１に出力するように構成してもよい。
【００２２】
図２の動作解析方式では、解析動作の設定情報を入力するため、更には、解析結果の情報を受け取るためにパーソナルコンピュータ３１が用いられるが、特別なテスタや解析装置を必要としない。またＭＣＵの品種毎や異常現象毎に、異なる解析プログラムを作成する必要がなく、ＭＣＵの品種や異常のタイプに依存しない解析プログラムを内蔵することで、汎用的な動作解析を実現することができる。
【００２３】
図３は、図２の動作解析方式による動作解析の一例を示す図である。図３において横方向に延びる直線は時間の流れ、即ちユーザプログラムの実行の進行を示す。また横方向の直線の矢印とそれに対応するアルファベット（Ｂ'等）は、ユーザプログラムを構成する各プログラム部分（例えばプログラムルーチン等）を示す。丸印は比較結果が一致を示す箇所を示し、×印は比較結果が不一致を示す場所を示す。ユーザプログラム実行中のタイミングＴｘで、ＭＣＵ１０から異常波形（異常データ）が出力され、ユーザシステムが誤動作したとする。この場合、この異常波形の原因となるプログラム中の箇所は、タイミングＴｘよりも前の何れかのタイミングにある筈である。図３の動作解析方式の一例では、良品ＭＣＵ１０と不良ＭＣＵ１０との情報（アドレス及びデータ）の比較結果が一致（第１の状態）を示すと、指定期間を所定の長さだけ延長して、再度ユーザプログラムの実行を行なう。図２の左側から順番に各箇所で比較動作を実行すると、各丸印のタイミングで比較結果が一致を示し、異常原因ポイントＴｎ＋１で比較結果が最初に不一致（第２の状態）を示す。これにより、プログラムルーチンＣにおいて異常原因ポイントＴｎ＋１を検出することができる。
【００２４】
なおこの際、再度ユーザプログラムの実行を行なうときには、ユーザプログラムの先頭から毎回実行を開始する。これは、ユーザプログラムが停止した点から実行を再開させる構成にすると、ＭＣＵ１０内の全レジスタの格納値等を含む全てのパラメータをユーザプログラム停止時とユーザプログラム再開時とで一致させる必要があり、複雑な退避機構等が必要となるからである。全てのパラメータがユーザプログラム停止時とユーザプログラム再開時とで完全に一致していない場合には、本来誤動作が発生する筈の箇所で誤動作が発生しない等の再現性の問題が起きてしまう。それに対して、ユーザプログラムの先頭から毎回実行を開始する構成とすれば、複雑な退避機構等も必要なく、本来誤動作が発生する筈の箇所で確実に誤動作が発生することになる。
【００２５】
図４は、図３の動作解析を詳細に示す図である。図４において横方向に延びる水平の直線は時間の流れ、即ちユーザプログラムの実行の進行を示す。縦方向に並ぶ複数の水平の直線は、比較結果が一致を示す場合に指定期間を所定の長さだけ延長して、再度ユーザプログラムの実行を行なう様子を示すものである。最初の実行では、指定タイミングはＴ２であり、開始タイミングＴ１でユーザプログラムが実行開始し、タイミングＴ２でユーザプログラムの実行を停止して比較動作を実行する。その比較結果は一致を示す。次の実行では、指定タイミングはＴ３であり、開始タイミングＴ１でユーザプログラムが実行開始し、タイミングＴ３でユーザプログラムの実行を停止して比較動作を実行する。その比較結果は一致を示す。以降同様である。なお図４において、曲がった矢印は、ユーザプログラムを実行する指定期間を新たに延長した部分を示している。ｎ−１回目の実行では、指定タイミングはＴｎであり、開始タイミングＴ１でユーザプログラムが実行開始し、タイミングＴｎでユーザプログラムの実行を停止して比較動作を実行する。その比較結果は一致を示す。次のｎ回目の実行では、指定タイミングはＴｎ＋１であり、開始タイミングＴ１でユーザプログラムが実行開始し、タイミングＴｎ＋１でユーザプログラムの実行を停止して比較動作を実行する。その比較結果は不一致を示す。これにより、異常原因箇所を特定することができる。
【００２６】
図５は、図２の動作解析方式による動作解析の別の一例を示す図である。図５の表記は図３と同様である。ユーザプログラム実行中のタイミングＴｘで、ＭＣＵ１０から異常波形（異常データ）が出力され、ユーザシステムが誤動作したとする。図５の動作解析方式の一例では、良品ＭＣＵ１０と不良ＭＣＵ１０との情報（アドレス及びデータ）の比較結果が不一致（第１の状態）を示すと、指定期間を所定の長さだけ短縮して、再度ユーザプログラムの実行を行なう。図２の右側から順番に各箇所で比較動作を実行すると、各×印のタイミングで比較結果が不一致を示し、異常原因ポイントＴｎ＋１の１つ手前で比較結果が最初に一致（第２の状態）を示す。これにより、プログラムルーチンＣにおいて異常原因ポイントＴｎ＋１を検出することができる。なお比較結果の不一致に応じて再度ユーザプログラムの実行を行なうときには、ユーザプログラムの先頭から毎回実行を開始する。このようにユーザプログラムの先頭から毎回実行を開始する構成とすれば、複雑な退避機構等も必要なく、本来誤動作が発生する筈の箇所で確実に誤動作が発生することになる。
【００２７】
図６は、図５の動作解析を詳細に示す図である。図６の表記は図４と同様である。縦方向に並ぶ複数の水平の直線は、比較結果が不一致を示す場合に指定期間を所定の長さだけ短縮して、再度ユーザプログラムの実行を行なう様子を示すものである。最初の実行では、指定タイミングはＴｘ−１であり、ユーザプログラムが先頭から実行開始し、タイミングＴｘ−１でユーザプログラムの実行を停止して比較動作を実行する。その比較結果は不一致を示す。次の実行では、指定タイミングはＴｘ−２であり、ユーザプログラムが先頭から実行開始し、タイミングＴｘ−２でユーザプログラムの実行を停止して比較動作を実行する。その比較結果は不一致を示す。以降同様である。なお図４において、曲がった矢印は、ユーザプログラムを実行する指定期間を新たに短縮した部分を示している。その後、指定タイミングＴｎ＋１でユーザプログラムを先頭から実行開始し、タイミングＴｎ＋１でユーザプログラムの実行を停止して比較動作を実行する。その比較結果は不一致を示す。次の実行では、指定タイミングはＴｎであり、ユーザプログラムが先頭から実行開始し、タイミングＴｎでユーザプログラムの実行を停止して比較動作を実行する。その比較結果は一致を示す。これにより、異常原因箇所を特定することができる。なお最後に、指定期間を延長して再起動しているが、これは、異常原因箇所がＴｎではなくＴｎ＋１であり、このタイミングＴｎ＋１を異常原因箇所として出力するためである。実際には、タイミングＴｎで比較結果が一致となった時点で解析動作を終了し、解析動作実行順で１つ前のタイミングＴｎ＋１を異常原因箇所として出力すればよい。
【００２８】
図７は、図２の動作解析方式による動作解析の更に別の一例を示す図である。図７の表記は図３と同様である。ユーザプログラム実行中のタイミングＴｘで、ＭＣＵ１０から異常波形（異常データ）が出力され、ユーザシステムが誤動作したとする。図５の動作解析方式の一例では、二分探索により、迅速に異常原因箇所Ｔｎ＋１を特定する。なお探索過程において、比較結果に応じて再度ユーザプログラムの実行を行なうときには、ユーザプログラムの先頭から毎回実行を開始する。このようにユーザプログラムの先頭から毎回実行を開始する構成とすれば、複雑な退避機構等も必要なく、本来誤動作が発生する筈の箇所で確実に誤動作が発生することになる。
【００２９】
図８は、図７の動作解析を詳細に示す図である。図８の表記は図４と同様である。縦方向に並ぶ複数の水平の直線は、比較結果に応じて指定期間を延長又は短縮して、再度ユーザプログラムの実行を行なう様子を示すものである。但し最上部に示す水平直線は、ユーザプログラムの開始タイミングＴ１と異常波形出力タイミングＴｘとの位置関係を示すものである。この開始タイミングＴ１と異常波形出力タイミングＴｘとの間の範囲を二分探索していく。最初の実行では、Ｔ１とＴｘとの二分点であるＴｍが指定タイミングであり、ユーザプログラムが先頭Ｔ１から実行開始し、タイミングＴｍでユーザプログラムの実行を停止して比較動作を実行する。その比較結果は不一致を示す。次の実行では、Ｔ１とＴｍとの二分点であるＴｋが指定タイミングであり、ユーザプログラムが先頭Ｔ１から実行開始し、タイミングＴｋでユーザプログラムの実行を停止して比較動作を実行する。その比較結果は一致を示す。以降同様である。なお図４において、曲がった矢印は、ユーザプログラムを実行する指定期間を新たに延長又は短縮した部分を示している。また二分探索においては、現在の指定タイミングと、現在のタイミングでの比較結果と異なる比較結果を有する最も最近のタイミングとの間の二分点を、次回のユーザプログラム実行を停止させる指定タイミングとする。
【００３０】
その後、指定タイミングＴｎでユーザプログラムを先頭から実行開始し、タイミングＴｎでユーザプログラムの実行を停止して比較動作を実行する。その比較結果は一致を示す。次の実行では、指定タイミングはＴｎ＋１であり、ユーザプログラムが先頭から実行開始し、タイミングＴｎ＋１でユーザプログラムの実行を停止して比較動作を実行する。その比較結果は不一致を示す。二分探索で、指定期間を延長又は短縮させる変化幅が所定の単位間隔（例えばＴｎとＴｎ＋１との間の間隔）になった時点で、探索を終了する。これにより、異常原因箇所を特定することができる。異常原因箇所は、二分探索で探索され比較結果が不一致となった箇所のうちで、最も左側（最もユーザプログラムの先頭に近い側）の箇所である。
【００３１】
図９は、図２の動作解析方式による特異点検出動作の一例を示す図である。図９の表記は図３と同様である。特異点Ｔｓとは、その前後の箇所での比較結果が一致するが、その箇所において比較結果が不一致となる点である。例えば図５に示す逆方向探索や図７に示す二分探索の場合、図９に示すような特異点が見逃されてしまう恐れがある。真の異常原因箇所は、逆方向探索や二分探索により見つけられたタイミングＴｎ＋１ではなく、特異点Ｔｓであると考えられ、そのような特異点タイミングＴｓを見落としなく検出することが望まれる。図９の特異点検出動作の一例では、異常原因箇所として特定されたタイミングＴｎ＋１から、指定期間を所定の長さだけ順次短縮していきながら、ユーザプログラムの実行を繰り返し行なう。タイミングＴｎ＋１から順番に各箇所で比較動作を実行すると、各○印のタイミングで比較結果が一致を示し、特異点Ｔｓで比較結果が最初に不一致を示す。これにより、特異点Ｔｓを検出することができる。なお、比較結果の一致に応じて再度ユーザプログラムの実行を行なうときには、ユーザプログラムの先頭から毎回実行を開始する。
【００３２】
図１０は、図９の特異点検出動作を詳細に示す図である。図１０の表記は図４と同様である。縦方向に並ぶ複数の水平の直線は、比較結果が一致を示す場合に指定期間を所定の長さだけ短縮して、再度ユーザプログラムの実行を行なう様子を示すものである。最初の実行では、指定タイミングはＴｎであり、ユーザプログラムが先頭から実行開始し、タイミングＴｎでユーザプログラムの実行を停止して比較動作を実行する。その比較結果は一致を示す。次の実行では、指定タイミングはＴｎ−１であり、ユーザプログラムが先頭から実行開始し、タイミングＴｎ−１でユーザプログラムの実行を停止して比較動作を実行する。その比較結果は一致を示す。以降同様である。なお図１０において、曲がった矢印は、ユーザプログラムを実行する指定期間を新たに短縮した部分を示している。その後、指定タイミングＴｓ＋１でユーザプログラムを先頭から実行開始し、タイミングＴｓ＋１でユーザプログラムの実行を停止して比較動作を実行する。その比較結果は一致を示す。次の実行では、指定タイミングはＴｓであり、ユーザプログラムが先頭から実行開始し、タイミングＴｓでユーザプログラムの実行を停止して比較動作を実行する。その比較結果は不一致を示す。これにより、特異点Ｔｓを真の異常原因箇所として特定することができる。
【００３３】
図１１Ａ乃至１１Ｃは、ＭＣＵの動作解析を行なう動作解析方法のフローチャートである。図１１Ａ乃至１１Ｃにおいて、良品ＭＣＵ１０の各動作ステップをステップＳＧｘ（ｘは数値）として示し、不良品ＭＣＵ１０の各動作ステップをステップＳＦｘ（ｘは数値）として示してある。以降の説明においては、これらＳＧ又はＳＦのステップ名を用い、特に必要がない限り、ステップが良品及び不良品の何れのＭＣＵ１０が実行するものであるのかを明示的な記載を省略する。
【００３４】
まず良品及び不良品のＭＣＵ１０において、所定の外部端子（モード端子及びリセット端子等）に所定の信号レベルを印加することにより、各ＭＣＵ１０を起動させると共に、起動後にＲＯＭ２０の解析動作プログラムを実行させる。図１２は、良品及び不良品のＭＣＵ１０の動作を示す図である。図１２において、図１と同一の構成要素は同一の番号で参照し、その説明は省略する。図１２において、起動時における所定の外部端子（モード端子及びリセット端子等）への所定の信号レベルの印加が、動作Ｏ１として示される。
【００３５】
次に、良品ＭＣＵ１０において、ステップＳＧ１で、解析のための情報をＳＩＯで受信する。図１２において、この動作が動作Ｏ２として示される。ステップＳＧ２で、受信した情報をレジスタ１３に格納する。図１２において、この動作が動作Ｏ３として示される。この受信情報には、最初の指定タイミングＴ０、指定タイミングの増減幅ΔＴ、命令フェッチ動作及びオペランド読み書き動作のうちで検査対象となる動作を指定する情報Ｔｉｍｉｎｇ等が含まれる。ステップＳＧ３で、格納した情報をＳＩＯ経由で不良品に送信する。この動作が図１２において動作Ｏ４として示される。なお図１２のＳＩＯは図１のバッファ１７及び通信ユニット１８に対応する。
【００３６】
不良品ＭＣＵ１０において、ステップＳＦ１で、良品からの情報をＳＩＯ経由で受信する。この動作が図１２において動作Ｏ５として示される。ステップＳＦ２で、受信した情報をレジスタ１３に格納する。この動作が図１２において動作Ｏ６として示される。ステップＳＦ３で、格納した情報をＳＩＯから送信する。この動作が図１２において動作Ｏ７として示される。なおこの情報送信は、不良品ＭＣＵ１０において、正しく情報設定されたことを確認するために送信される。
【００３７】
ステップＳＧ４で受信及び送信動作が完了したか否かを判定し、完了していない場合にはステップＳＧ１に戻り受信及び送信動作を繰り返す。同様に、ステップＳＦ４で受信及び送信動作が完了したか否かを判定し、完了していない場合にはステップＳＦ４に戻り受信及び送信動作を繰り返す。
【００３８】
次にステップＳＧ５及びＳＦ５で、良品及び不良品のＭＣＵ１０において、解析動作(高位の割込み処理)から、通常動作(初期)に状態遷移する。即ち、解析動作プログラムの実行から、ユーザプログラムの実行に移行し、ユ―ザプログラムを先頭から実行する。この動作が図１２において動作Ｏ８として示される。その後、タイマ１４の出力が指定タイミングＴ０と一致し、比較器１５が一致信号ＭＴを生成する。この動作が図１３において動作Ｏ９として示される。一致信号ＭＴに応答して、アドレス及びデータがＳＩＯのバッファ（図１のバッファ１７）に格納される。
【００３９】
ステップＳＧ６及びＳＦ６で、良品及び不良品のＭＣＵ１０において、移行信号（一致信号ＭＴ）により、通常動作から解析動作(高位の割込み処理)に状態遷移する。即ち、ユーザプログラムの実行から、解析動作プログラムの実行に移行する。この動作が図１３において動作Ｏ１０として示される。更にステップＳＦ７で、不良品のＭＣＵ１０は、格納されたアドレス情報とデータ情報とをＳＩＯ経由で良品に送信する。この動作が図１３において動作Ｏ１１として示される。ステップＳＧ７で、良品のＭＣＵ１０は、アドレス情報とデータ情報とをＳＩＯ経由で不良品から受信する。この動作が図１３において動作Ｏ１２として示される。なお図１３の例においては、命令フェッチサイクルでのアドレス及びデータ（「−ｆ」又は「−ｆ'」が末尾に付く情報）と命令実行サイクルでのアドレス及びデータ（「−ｏ」又は「−ｏ'」が末尾に付く情報）との両方が記録されている。
【００４０】
ステップＳＧ８で受信動作が完了したか否かを判定し、完了していない場合にはステップＳＧ７に戻り受信動作を繰り返す。同様に、ステップＳＦ８で送信動作が完了したか否かを判定し、完了していない場合にはステップＳＦ７に戻り送信動作を繰り返す。
【００４１】
図１１ＢのステップＳＧ９において、良品のＭＣＵ１０のＣＰＵ１１は、良品側の情報と不良品側の情報とを比較する。この動作が図１４において動作Ｏ１３として示される。ステップＳＧ１０において、ＣＰＵ１１は、情報が一致すれば正常と判定し、一致しなければ異常と判定する。なおこれは、図３及び図４に示す順方向探索の場合の例である。ステップＳＧ１１で、判定結果をレジスタに格納する。この動作が図１４において動作Ｏ１４として示される。ステップＳＧ１２で、ＣＰＵ１１が、新たなタイミングを計算する。この動作が図１４において動作Ｏ１５として示される。順方向探索の場合には、 Ｔ１ ＝ Ｔ０ ＋ ΔＴとして、次のタイミングＴ１が計算される。一般に、現在のタイミングをＴｎ−１とすれば、次のタイミングは Ｔｎ ＝ Ｔｎ−１ ＋ ΔＴとして計算される。ステップＳＧ１３で、ＣＰＵ１１は、計算したタイミングをレジスタ１３に格納する。この動作が図１４において動作Ｏ１６として示される。
【００４２】
ステップＳＧ１４で、良品のＭＣＵ１０は、格納された新しいタイミング情報をＳＩＯ経由で不良品に送信する。この動作が図１５において動作Ｏ１７として示される。ステップＳＦ９で、不良品のＭＣＵ１０は、新しいタイミング情報をＳＩＯ経由で良品から受信し、レジスタ１３に格納する。この動作が図１５において動作Ｏ１８として示される。
【００４３】
ステップＳＧ１５で、ＳＩＯ送信完了を良品のＣＰＵ１１が確認する。またステップＳＦ１０で、ＳＩＯ受信完了を不良品のＣＰＵ１１が確認する。これらの動作が図１６において動作Ｏ１９として示される。ステップＳＧ１６で送信動作が完了したか否かを判定し、完了していない場合にはステップＳＧ１４に戻り送信動作を繰り返す。同様に、ステップＳＦ１１で受信動作が完了したか否かを判定し、完了していない場合にはステップＳＦ９に戻り受信動作を繰り返す。
【００４４】
その後ステップＳＧ１７及びＳＦ１２で、良品のＭＣＵ１０及び不良品のＭＣＵ１０それぞれにおいて、ＣＰＵ１１がＭＣＵ自身に対して内部リセットを発行する。この内部リセット共に、モード指示信号により解析動作モード（解析動作プログラム実行）を指示する。これらの動作が図１６において動作Ｏ２０として示される。更にステップＳＧ１８及びＳＦ１３で、良品のＭＣＵ１０及び不良品のＭＣＵ１０それぞれにおいて、解析動作(高位の割込み処理)から通常動作(初期)に状態遷移する。即ち、解析動作プログラムの実行から、ユーザプログラムの実行に移行し、ユ―ザプログラムを先頭から実行する。この動作が図１６において動作Ｏ２１として示される。その後、タイマ１４の出力が指定タイミングＴｎと一致し、比較器１５が一致信号ＭＴを生成する。この動作が図１７において動作Ｏ２２として示される。一致信号ＭＴに応答して、アドレス及びデータがＳＩＯのバッファ（図１のバッファ１７）に格納される。
【００４５】
図１１ＣのステップＳＧ１９及びＳＦ１４で、良品及び不良品のＭＣＵ１０において、移行信号（一致信号ＭＴ）により、通常動作から解析動作(高位の割込み処理)に状態遷移する。即ち、ユーザプログラムの実行から、解析動作プログラムの実行に移行する。この動作が図１７において動作Ｏ２３として示される。更にステップＳＦ１５で、不良品のＭＣＵ１０は、格納されたアドレス情報とデータ情報とをＳＩＯ経由で良品に送信する。この動作が図１７において動作Ｏ２４として示される。ステップＳＧ２０で、良品のＭＣＵ１０は、アドレス情報とデータ情報とをＳＩＯ経由で不良品から受信する。この動作が図１７において動作Ｏ２５として示される。
【００４６】
ステップＳＧ２１で受信動作が完了したか否かを判定し、完了していない場合にはステップＳＧ２０に戻り受信動作を繰り返す。同様に、ステップＳＦ１６で送信動作が完了したか否かを判定し、完了していない場合にはステップＳＦ１５に戻り送信動作を繰り返す。送信動作が完了した場合には、ステップＳＦ１７で、不良品ＭＣＵ１０の処理はステップＳＦ９に戻る。
【００４７】
ステップＳＧ２２において、良品のＭＣＵ１０のＣＰＵ１１は、良品側の情報と不良品側の情報とを比較する。この動作が図１８において動作Ｏ２６として示される。ステップＳＧ２３において、ＣＰＵ１１は、情報が一致すれば正常と判定し、一致しなければ異常と判定し、判定結果をレジスタに格納する。この動作が図１８において動作Ｏ２７として示される。ステップＳＧ２４で、ＣＰＵ１１が、終了判定を行ない、終了ならばステップＳ２８の検出処理に進む。この終了判定動作が図１８において動作Ｏ２８として示される。この例のように順方向探索の場合であれば、指定のタイミングＴｎで不一致が検出されると、終了と判定される。また例えば逆方向探索の場合であれば、指定のタイミングＴｎで一致が検出されると、終了と判定される。終了でないと判定された場合には、ステップＳＧ２５に進む。
【００４８】
ステップＳＧ２５で、ＣＰＵ１１が、新たなタイミングを計算する。この動作が図１８において動作Ｏ２９として示される。順方向探索の場合には、 Ｔｎ＋１ ＝ Ｔｎ ＋ ΔＴとして、次のタイミングＴｎ＋１が計算される。ステップＳＧ２６で、ＣＰＵ１１は、計算したタイミングをレジスタ１３に格納する。この動作が図１８において動作Ｏ３０として示される。ステップＳＧ２７で、良品ＭＣＵ１０の処理はステップＳＧ１４に戻る。
【００４９】
ステップＳＧ２８で、良品ＭＣＵ１０は、格納された検出結果情報（ＥＮＤ，Ｔｎ，Ａｄｄｒｅｓｓ，Ｄａｔａ）をＳＩＯ経由で外部に送信する。この動作が図１９において動作Ｏ３１として示される。ここで、ＥＮＤは終了を示すデータ、Ｔｎは異常原因箇所を示すデータ、Ａｄｄｒｅｓｓ及びＤａｔａは異常原因箇所で検出されたアドレス及びデータである。なおＡｄｄｒｅｓｓ及びＤａｔａは異常原因箇所の前に検出されたアドレス及びデータを含んでもよい。
【００５０】
図２０は、割込み処理発生時の問題について説明するための図である。図１に示すＭＣＵ１０において、ＣＰＵ１１がユーザプログラムを実行している最中に、外部事象に起因する割込みが発生し、割込み処理プログラムの実行に遷移する場合がある。図２に示すような動作解析方式において、良品のＭＣＵ１０と不良品のＭＣＵ１０とを比較する場合、外部要因のために２つのＭＣＵ１０の間で割込み処理タイミングが僅かにずれることがある。このように割込み処理タイミングがずれた場合、２つのＭＣＵ１０はそれぞれ正常な動作をしているにもかかわらず、割込み処理タイミングのズレにより比較対象となる動作結果が不一致となってしまう。図２０に示す例においては、良品においてｎ＋２のサイクルで割込みが発生し、ｎ＋３のサイクルからｎ＋１５のサイクルまで割込み処理が実行され、その後通常処理に戻っている。また不良品においてｎ＋９のサイクルで割込みが発生し、ｎ＋１０のサイクルからｎ＋２２のサイクルまで割込み処理が実行され、その後通常処理に戻っている。この場合、良品のｎ＋１６からｎ＋２２までのサイクルでの処理と、不良品のｎ＋３からｎ＋９までのサイクルでの処理とは、同一内容であるにも関わらず処理タイミングが異なってしまっている。従って例えば、良品のｎ＋１６のサイクルの処理のアドレス及びデータと不良品のｎ＋１６のサイクルの処理のアドレス及びデータとを比較すると、不一致が検出されてしまう。
【００５１】
図２１は、割込み処理発生時の問題を解決する方法について説明するための図である。図２１に示す例では、良品においてｎ＋２のサイクルで割込みが発生するが、割込み処理の実行中には、サイクルカウントの進行（図１のタイマ１４の進行）を停止させ、通常処理に戻ってからサイクルカウントをｎ＋３から再開している。また不良品においてｎ＋９のサイクルで割込みが発生するが、割込み処理の実行中には、サイクルカウントの進行を停止させ、通常処理に戻ってからサイクルカウントをｎ＋１０から再開している。このような動作とすれば、良品の各サイクルでの処理と不良品の各サイクルでの処理とは、同一の処理内容であれば同一のタイミング（同一のサイクルカウント）で実行されることになる。従って、各サイクルの処理でのアドレス及びデータを比較すると、正常動作であれば常に一致が検出されることになる。
【００５２】
図２２は、割込み処理時にサイクルカウントの進行を停止させる構成の一例を示す図である。図２２に示すタイマ１４は、図１に示すＭＣＵ１０に内蔵されるタイマ１４である。割込み処理時にサイクルカウントの進行を停止させるために、ＡＮＤ回路４０の出力の負論理により、タイマ１４のカウントアップ動作のイネーブル制御を行なっている。ＡＮＤ回路４０には、割込み処理の実行中にアサート状態になる割込み処理信号と、割込み処理時にカウント停止する設定がされるとアサート状態になるカウント停止信号とが印加される。割込み処理時にカウント停止するか否かはオプションで選択できるようなＭＣＵ１０の構成となっており、例えば図１１ＡのステップＳＧ１に示す解析のための情報の初期設定処理で、カウント停止するか否かを示す設定データを入力すればよい。
【００５３】
割込み処理時にカウント停止する設定がされている状態で割込み処理が発生すると、ＡＮＤ回路４０の出力はアサート状態となる。このアサート状態により、タイマ１４はディスエーブルされ、カウント動作（クロックパルスの計数動作）を停止する。このようにして、割込み処理の実行中には、図１のタイマ１４の進行を停止させることができる。
【００５４】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【００５５】
なお本願発明は以下の内容を含むものである。
（付記１）
処理ユニットと、
バスと、
期間を指定する情報を格納するレジスタと、
前記バスに接続されるバッファと、
前記処理ユニットによる第１のプログラムの実行開始を起点として、前記レジスタの格納情報が指定する期間が経過すると、前記処理ユニットに前記第１のプログラムの実行を停止させるとともに、前記バッファに前記バス上の情報を格納させる制御ユニットと、
前記バッファに格納した情報を外部に送信可能であると共に外部からの情報を受信可能である通信ユニットと、
を含み、前記処理ユニットは、前記通信ユニットにより外部から受信した情報と前記バッファに格納した情報とを比較し、該比較の結果に応じて、前記レジスタの格納情報を異なる期間を指定する情報に書き換えて前記第１のプログラムの先頭からの実行を再度開始する第１の動作、或いは、少なくとも前記レジスタの格納情報を外部に出力する第２の動作、の何れかを選択し実行することを特徴とするマイクロコントローラ。
（付記２）
前記処理ユニットは、前記第１のプログラムとは異なる第２のプログラムを実行することにより、前記比較動作、前記レジスタの格納情報の書き換え動作、及び前記レジスタの格納情報の外部出力動作を実行することを特徴とする付記１記載のマイクロコントローラ。
（付記３）
ＲＯＭを更に含み、前記第２のプログラムは前記ＲＯＭに格納されていることを特徴とする付記２記載のマイクロコントローラ。
（付記４）
前記制御ユニットは、
前記第１のプログラムの実行開始からの時間を計時するタイマと、
前記タイマの出力と前記レジスタの格納情報とが一致すると一致信号を生成する比較器と、
を含み、前記一致信号に応答して、前記処理ユニットが前記第１のプログラムの実行を停止し、前記バッファが前記バス上の情報を格納することを特徴とする付記１乃至３何れか一項記載のマイクロコントローラ。
（付記５）
前記制御ユニットは、前記第１のプログラムの実行中に実行される割込み処理中には前記タイマの計時動作を停止するよう構成されることを特徴とする付記４記載のマイクロコントローラ。
（付記６）
付記１記載のマイクロコントローラを２つ用意し、
前記２つのマイクロコントローラを前記通信ユニットを介して接続し、
前記２つのマイクロコントローラに前記第１のプログラムを実行させ、
前記２つのマイクロコントローラの一方から出力される前記レジスタの格納情報を記録する、
各段階を含むことを特徴とするマイクロコントローラの試験方法。
（付記７）
前記２つのマイクロコントローラはシステムに組み込まれた状態であることを特徴とする付記６記載のマイクロコントローラの試験方法
【符号の説明】
【００５６】
１０  ＭＣＵ
１１  ＣＰＵ
１２  アドレス＆データバス
１３  レジスタ
１４  タイマ
１５  比較器
１６  ＡＮＤ回路
１７  バッファ
１８  通信ユニット
１９−１乃至１９−ｎ  機能ブロック
２０  ＲＯＭ
２１  ＲＡＭ
２２，２３  外部端子
【図１】
2011159252.tif 000003
【図２】
2011159252.tif 000004
【図３】
2011159252.tif 000005
【図４】
2011159252.tif 000006
【図５】
2011159252.tif 000007
【図６】
2011159252.tif 000008
【図７】
2011159252.tif 000009
【図８】
2011159252.tif 000010
【図９】
2011159252.tif 000011
【図１０】
2011159252.tif 000012
【図１１Ａ】
2011159252.tif 000013
【図１１Ｂ】
2011159252.tif 000014
【図１１Ｃ】
2011159252.tif 000015
【図１２】
2011159252.tif 000016
【図１３】
2011159252.tif 000017
【図１４】
2011159252.tif 000018
【図１５】
2011159252.tif 000019
【図１６】
2011159252.tif 000020
【図１７】
2011159252.tif 000021
【図１８】
2011159252.tif 000022
【図１９】
2011159252.tif 000023
【図２０】
2011159252.tif 000024
【図２１】
2011159252.tif 000025
【図２２】
2011159252.tif 000026