(57)【要約】【課題】分割された処理をする階層のタスクを含む複数のタスクの実行順を同一処理レベルで診断することのできるタスク実行順診断装置を提供することにある。【解決手段】分割された処理をする階層Ｈ２，Ｈ３のタスクＴ２１〜Ｔ３７２を含む複数のタスクＴ１〜Ｔ３７２の実行順を診断するタスク実行順診断回路２であって、現在のタスクコードを記憶する現在番号レジスタ２４と、前回のタスクコードを記憶する前回番号レジスタ２５と、階層Ｈ１〜Ｈ３毎の最終タスクコードを管理する番号管理テーブル２６と、前回のタスクコードに基づいて、現在のタスクコードが妥当であるか否かを診断する診断回路２７と、現在のタスクコードと番号管理テーブル２６の最終タスクコードを比較する比較回路２８と、比較回路２８の比較結果に基づいて、前回番号レジスタ２５のタスクコードを更新する。【選択図】図１
2014092860.tif 000002
【特許請求の範囲】
【請求項１】
分割された処理をする階層のタスクを含む複数のタスクの実行順を診断する診断装置であって、
診断対象のタスクを示すタスクコードを記憶する第１のタスクコード記憶手段と、
前記診断対象のタスクを診断するためのタスクコードを記憶する第２のタスクコード記憶手段と、
前記階層毎に最後に実行されるタスクを示す最終タスクコードを記憶する最終タスクコード記憶手段と、
前記第２のタスクコード記憶手段に記憶された前記タスクコードに基づいて、前記第１のタスクコード記憶手段に記憶された前記診断対象のタスクを示す前記タスクコードが妥当であるか否かを診断する診断手段と、
前記診断対象のタスクを示す前記タスクコードが前記最終タスクコード記憶手段に記憶された前記最終タスクコードか否かを階層毎に判断する最終タスクコード判断手段と、
前記最終タスクコード判断手段による判断結果に基づいて、前記第２のタスクコード記憶手段に記憶された前記タスクコードを更新する更新手段と
を備えることを特徴とするタスク実行順診断装置。
【請求項２】
前記最終タスクコード記憶手段は、前記タスクを実行させるファームウェアにより前記最終タスクコードが設定されること
を特徴とする請求項１に記載のタスク実行順診断装置。
【請求項３】
前記第１のタスクコード記憶手段は、前記タスクを実行するプロセッサにより前記診断対象のタスクを示す前記タスクコードが書き込まれ、
前記診断手段は、前記プロセッサによる前記タスクコードの書き込みサイクル内で診断を完了すること
を特徴とする請求項１又は請求項２に記載のタスク実行順診断装置。
【請求項４】
前記診断手段による診断結果が妥当である場合、前記第１のタスクコード記憶手段に記憶された前記タスクコードを前記第２のタスクコード記憶手段に転送するタスクコード転送手段を備え、
前記更新手段は、前記最終タスクコード判断手段により前記最終タスクコードと判断された場合、前記第２のタスクコード記憶手段に転送された前記タスクコードを初期化すること
を特徴とする請求項１から請求項３のいずれか１項に記載のタスク実行順診断装置。
【請求項５】
分割された処理をする階層のタスクを含む複数のタスクの実行順を診断装置により診断する診断方法であって、
前記診断装置は、診断対象のタスクを示すタスクコードを記憶し、
前記診断装置は、前記診断対象のタスクを診断するためのタスクコードを記憶し、
前記診断装置は、前記階層毎に最後に実行されるタスクを示す最終タスクコードを記憶し、
前記診断装置は、記憶した前記診断対象のタスクを診断するための前記タスクコードに基づいて、記憶した前記診断対象のタスクを示す前記タスクコードが妥当であるか否かを診断し、
前記診断装置は、前記診断対象のタスクを示す前記タスクコードが前記最終タスクコードか否かを階層毎に判断し、
前記診断装置は、前記最終タスクコードか否かの判断結果に基づいて、前記診断対象のタスクを診断するためのタスクコードを更新すること
を含むことを特徴とするタスク実行順診断方法。
【請求項６】
前記最終タスクコードは、前記タスクを実行させるファームウェアにより設定されること
を特徴とする請求項５に記載のタスク実行順診断方法。
【請求項７】
前記診断対象のタスクを示す前記タスクコードは、前記タスクを実行するプロセッサにより書き込まれ、
前記タスクコードの診断は、前記プロセッサによる前記タスクコードの書き込みサイクル内で完了すること
を特徴とする請求項５に記載のタスク実行順診断方法。
【請求項８】
前記診断装置は、前記タスクコードの診断結果が妥当である場合、診断した前記タスクコードを前記診断対象のタスクを診断するための前記タスクコードとして記憶し、
前記診断装置は、診断した前記タスクコードを前記最終タスクコードと判断した場合、記憶した前記診断対象のタスクを診断するための前記タスクコードを初期化すること
を特徴とする請求項５に記載のタスク実行順診断方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータにより実行されたタスクの順序を診断する装置に関する。
【背景技術】
【０００２】
一般に、ファームウェアの正常動作を監視する方法として、タスク実行順診断が知られている。タスク実行順診断は、前回実行されるべきタスクと今回実行するタスクの妥当性を確認することで診断する。
【０００３】
例えば、自タスクの情報及び自タスクの前に実行されるタスクを特定する情報を含む識別情報を各タスクが起動時に監視部に設定することで実行順を診断することが開示されている（例えば、特許文献１参照）。
【０００４】
また、マイクロプロセッサによって実行されるプログラムを模擬する回路が予め実装された動作検査回路で、実行順を診断することが開示されている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−９２９６号公報
【特許文献２】特許第４３５９６３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、タスク内の処理を複数回に分割して実行する場合、分割されたタスクの属する階層の処理レベル毎に、タスクの実行順を診断することになり、全てのタスクを同一処理レベルで診断することについては知られていない。処理レベル毎にタスクの実行順を診断する場合、診断方法が複雑になり、診断時間が長くなる。また、ファームウェアの変更などでタスクの実行順が変わる場合、診断装置の変更が容易にできない可能性がある。
【０００７】
そこで、本発明の目的は、分割された処理をする階層のタスクを含む複数のタスクの実行順を同一処理レベルで診断することのできるタスク実行順診断装置を提供することにある。
【課題を解決するための手段】
【０００８】
本発明の観点に従ったタスク実行順診断装置は、分割された処理をする階層のタスクを含む複数のタスクの実行順を診断する診断装置であって、診断対象のタスクを示すタスクコードを記憶する第１のタスクコード記憶手段と、前記診断対象のタスクを診断するためのタスクコードを記憶する第２のタスクコード記憶手段と、前記階層毎に最後に実行されるタスクを示す最終タスクコードを記憶する最終タスクコード記憶手段と、前記第２のタスクコード記憶手段に記憶された前記タスクコードに基づいて、前記第１のタスクコード記憶手段に記憶された前記診断対象のタスクを示す前記タスクコードが妥当であるか否かを診断する診断手段と、前記診断対象のタスクを示す前記タスクコードが前記最終タスクコード記憶手段に記憶された前記最終タスクコードか否かを階層毎に判断する最終タスクコード判断手段と、前記最終タスクコード判断手段による判断結果に基づいて、前記第２のタスクコード記憶手段に記憶された前記タスクコードを更新する更新手段とを含む。
【発明の効果】
【０００９】
本発明によれば、タスク内の処理を複数回に分割して実行するタスクを含む複数のタスクの実行順を同一処理レベルで診断することのできるタスク実行順診断装置を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施形態に係るタスク実行順診断回路が適用されたマイコンの構成を示す構成図。
【図２】本実施形態に係るファームウェアのタスクの構成を表す概念図。
【図３】本実施形態に係るファームウェアのタスクの実行順を示す図。
【図４】本実施形態に係る現在番号レジスタの記憶領域の構造を示す構造図。
【図５】本実施形態に係る前回番号レジスタの記憶領域の構造を示す構造図。
【図６】本実施形態に係る番号管理テーブルの記憶領域の構造を示す構造図。
【図７】本実施形態に係る前回番号レジスタのデータの更新状態を表すデータ変化図。
【図８】本実施形態に係るタスクコードを表すデータの構造を示すデータ構造図。
【図９】本実施形態に係るタスクコードを表す拡張されたデータの構造を示すデータ構造図。
【図１０】本実施形態に係る実行順診断回路の第１の動作を表すタイミングチャート。
【図１１】本実施形態に係る実行順診断回路の第２の動作を表すタイミングチャート。
【図１２】本実施形態に係る実行順診断回路の第３の動作を表すタイミングチャート。
【発明を実施するための形態】
【００１１】
以下図面を参照して、本発明の実施形態を説明する。
【００１２】
（実施形態）
図１は、本発明の実施形態に係るタスク実行順診断回路２が適用されたマイクロコンピュータ（以下、「マイコン」という。）１０の構成を示す構成図である。なお、図面における同一部分には同一符号を付してその詳しい説明を省略し、異なる部分について主に述べる。
【００１３】
マイコン１０は、マイクロプロセッサ１と、実行順診断回路２と、ファームウェア記憶部３と、ワークメモリ４と、メモリマップドＩ／Ｏ５とを備える。マイコン１０を構成する各構成部分は、アドレスバスＡＢ及びデータバスＤＢで接続されている。これにより、各構成部分間の通信を行う。
【００１４】
マイクロプロセッサ１は、プログラムを実行する演算処理部である。マイクロプロセッサ１は、アドレスバスＡＢによりメモリバスサイクルで対象デバイスのアドレスを出力する。これにより、マイクロプロセッサ１は、読み出し又は書き込みをする対象デバイスを指定する。マイクロプロセッサ１は、データバスＤＢによりメモリバスサイクルで、対象デバイスとデータの伝送をする。マイクロプロセッサ１は、メモリバスサイクルでコマンドを出力することにより、データの読み出し又は書き込み、及びそのタイミングを指示する。
【００１５】
実行順診断回路２は、マイクロプロセッサ１で実行されたファームウェア（プログラム）のタスクの実行順を診断する回路である。実行順診断回路２は、コンピュータで構成されている。実行順診断回路２は、マイクロプロセッサ１が実行順診断回路２にタスクコードの書き込みをするサイクル内で、診断を完了する。タスクコードは、タスク毎に割り当てられたタスクを示す固有のコードである。
【００１６】
ファームウェア記憶部３は、ファームウェアが記憶されたメモリである。ファームウェア記憶部３は、例えば、ＦＲＯＭ(flash read only memory)である。
【００１７】
ワークメモリ４は、マイクロプロセッサ１が演算処理に用いるデータを一時的に記憶するためのメモリである。ワークメモリ４は、例えば、ＲＡＭ(random access memory)である。
【００１８】
メモリマップドＩ／Ｏ５は、外部回路と伝送するためのインタフェース機能がある回路である。
【００１９】
次に、実行順診断回路２の構成について説明する。
【００２０】
実行順診断回路２は、アドレスデコード回路２１と、Ｒ／Ｗ制御回路２２と、タイミング回路２３と、現在番号レジスタ２４と、前回番号レジスタ２５と、番号管理テーブル２６と、診断回路２７と、比較回路２８とを備える。
【００２１】
アドレスデコード回路２１は、アドレスバスＡＢから受信したアドレスをデコードする。アドレスデコード回路２１は、アドレスのデコード結果をＲ／Ｗ制御回路２２に出力する。アドレスデコード回路２１は、マイコン１０のバスインターフェースとして機能する。
【００２２】
Ｒ／Ｗ制御回路２２は、マイクロプロセッサ１から受信したコマンド及びアドレスデコード回路２１から受信したアドレスのデコード結果に基づいて、実行順診断回路２内のレジスタ又はテーブルに対して、データの読み出し及び書き込みを制御する。
【００２３】
タイミング回路２３は、診断回路２７及び比較回路２８に処理を開始するタイミングを決定する。タイミング回路２３は、決定したタイミングで診断回路２７及び比較回路２８を処理させるための信号を出力する。
【００２４】
現在番号レジスタ２４には、マイクロプロセッサ１により実行される現在のタスクコードが書き込まれる。現在番号レジスタ２４に書き込まれたタスクコードの示すタスクが実行順診断回路２による診断対象となる。
【００２５】
前回番号レジスタ２５には、診断回路２７による診断前の前回のタスクコードが書き込まれる。前回番号レジスタ２５に書き込まれているタスクコードは、診断対象となるタスクを診断するためのタスクコードである。従って、前回番号レジスタ２５には、必ずしも前回のタスクコードがそのまま保持されているとは限らず、診断に必要な修正が施されていてもよい。
【００２６】
番号管理テーブル２６には、初期化時に各階層の最終タスクコードが管理情報としてマイクロプロセッサ１により設定される。最終タスクコードは、各階層で最後に実行されるタスクを示すタスクコードである。
【００２７】
診断回路２７は、タイミング回路２３から出力されたタイミングＴＡで、現在番号レジスタ２４に保持されている現在のタスクコード及び前回番号レジスタ２５に保持されている前回のタスクコードを参照して、ファームウェアのタスクの実行順の妥当性を診断する。診断回路２７は、診断後、現在番号レジスタ２４に保持されている現在のタスクコードを前回番号レジスタ２５に書き込むための転送指令を出力する。これにより、前回番号レジスタ２５には、現在のタスクコードが書き込まれる。
【００２８】
比較回路２８は、タイミング回路２３から出力されたタイミングＴＢで、番号管理テーブル２６の管理情報を参照して、前回番号レジスタ２５に保持されている診断の終了した現在のタスクコード（現在番号レジスタ２４に保持されているタスクコードと同じ）が最終タスクか否かを判断する。比較回路２８は、最終タスクと判断した場合、前回番号レジスタ２５に保持されているタスクコードを次回の診断のために初期化する。
【００２９】
次に、実行順診断回路２の動作について説明する。図２は、本実施形態に係るファームウェアのタスクＴ１〜Ｔ７２８の構成を表す概念図である。ここでは、図２に示すタスクＴ１〜Ｔ７２８の構成を用いて主に説明するが、タスクの構成がどのような構成でも同様である。
【００３０】
まず、タスクＴ１〜Ｔ７２８の構成について説明する。
【００３１】
マイクロプロセッサ１は、最上位階層の第１の階層Ｈ１のタスクＴ１からタスクＴ９までを順次に繰り返し実行する。
【００３２】
タスクＴ２、タスクＴ４、タスクＴ６、及びタスクＴ７は、処理が複数回に分割されている。タスクＴ２は、第２の階層Ｈ２で、５つのタスクＴ２１〜Ｔ２５に分割されている。タスクＴ４は、第２の階層Ｈ２で、３つのタスクＴ４１〜Ｔ４３に分割されている。タスクＴ６は、第２の階層Ｈ２で、４つのタスクＴ６１〜Ｔ６４に分割されている。タスクＴ７は、第２の階層Ｈ２で、２つのタスクＴ７１，Ｔ７２に分割されている。
【００３３】
タスクＴ４の第２の階層Ｈ２の２つのタスクＴ４１，Ｔ４３及びタスクＴ７の第２の階層Ｈ２の２つのタスクＴ７１，Ｔ７２は、さらに処理が複数回に分割されている。第２の階層Ｈ２のタスクＴ４１は、第３の階層Ｈ３で、３つのタスクＴ４１１〜Ｔ４１３に分割されている。第２の階層Ｈ２のタスクＴ４３は、第３の階層Ｈ３で、６つのタスクＴ４３１〜Ｔ４３６に分割されている。第２の階層Ｈ２のタスクＴ７１は、第３の階層Ｈ３で、３つのタスクＴ７１１〜Ｔ７１３に分割されている。第２の階層Ｈ２のタスクＴ７２は、第３の階層Ｈ３で、８つのタスクＴ７２１〜Ｔ７２８に分割されている。
【００３４】
図３は、マイクロプロセッサ１により実行されるタスクＴ１〜Ｔ７２８の実行順を表す図である。シーケンス順は、第１の階層Ｈ１の各タスクＴ１〜Ｔ９を実行する順番を示している。
【００３５】
マイクロプロセッサ１は、タスクＴ１からタスクＴ９を順次に実行する。
【００３６】
まず、１スキャン目（１巡目）について説明する。
【００３７】
タスクＴ１は、分割されていないため、タスクＴ１の実行後、タスクＴ２が実行される。
【００３８】
タスクＴ２は、１スキャン目では、第２の階層Ｈ２のタスクＴ２１を実行する。タスクＴ２１は分割されていないため、タスクＴ２１の実行後、タスクＴ３が実行される。
【００３９】
タスクＴ３は、分割されていないため、タスクＴ３の実行後、タスクＴ４が実行される。
【００４０】
タスクＴ４は、１スキャン目では、第２の階層Ｈ２のタスクＴ４１を実行する。ここで、タスクＴ４１は、さらに第３の階層Ｈ３で分割されている。従って、タスクＴ４１は、第３の階層Ｈ３のタスクＴ４１１を実行する。タスクＴ４１１の実行後、タスクＴ５が実行される。
【００４１】
タスクＴ５は、分割されていないため、タスクＴ５の実行後、タスクＴ６が実行される。
【００４２】
タスクＴ６は、１スキャン目では、第２の階層Ｈ２のタスクＴ６１を実行する。タスクＴ６１は分割されていないため、タスクＴ６１の実行後、タスクＴ７が実行される。
【００４３】
タスクＴ７は、１スキャン目では、第２の階層Ｈ２のタスクＴ７１を実行する。ここで、タスクＴ７１は、さらに第３の階層Ｈ３で分割されている。従って、タスクＴ７１は、第３の階層Ｈ３のタスクＴ７１１を実行する。タスクＴ７１１の実行後、タスクＴ８が実行される。
【００４４】
タスクＴ８は、分割されていないため、タスクＴ８の実行後、タスクＴ９が実行される。
【００４５】
タスクＴ９は、分割されていないため、タスクＴ９の実行後、２スキャン目として、タスクＴ１が実行される。
【００４６】
次に、２スキャン目について説明する。
【００４７】
タスクＴ１の実行後、タスクＴ２が実行される。タスクＴ２は、２スキャン目では、第２の階層Ｈ２のタスクＴ２２を実行する。タスクＴ２２の実行後、タスクＴ３が実行される。タスクＴ３の実行後、タスクＴ４が実行される。
【００４８】
タスクＴ４は、２スキャン目では、第２の階層Ｈ２の１スキャン目と同じタスクＴ４１を実行する。これは、第２の階層Ｈ２の下位に位置する第３の階層Ｈ３で分割された全てのタスクＴ４１１〜Ｔ４１３の実行が終了していないためである。タスクＴ４１は、２スキャン目では、タスクＴ４１２を実行する。タスクＴ４１２の実行後、タスクＴ５が実行される。タスクＴ５の実行後、タスクＴ６が実行される。
【００４９】
タスクＴ６は、２スキャン目では、第２の階層Ｈ２のタスクＴ６２を実行する。タスクＴ６２の実行後、タスクＴ７が実行される。
【００５０】
タスクＴ７は、２スキャン目では、第２の階層Ｈ２の１スキャン目と同じタスクＴ７１を実行する。タスクＴ７１は、２スキャン目では、タスクＴ７１２を実行する。タスクＴ７１２の実行後、タスクＴ８が実行される。タスクＴ８の実行後、タスクＴ９が実行される。タスクＴ９の実行後、３スキャン目として、タスクＴ１が実行される。
【００５１】
３スキャン目以降も、１スキャン目及び２スキャン目と同様に、図３に示すように、タスクＴ１〜Ｔ７２８を実行する。
【００５２】
図４は、本実施形態に係る現在番号レジスタ２４の記憶領域の構造を示す構造図である。
【００５３】
現在番号レジスタ２４には、３つの階層Ｈ１〜Ｈ３にそれぞれ対応した３つの記憶領域ＲＰ１，ＲＰ２，ＲＰ３が割り当てられている。記憶領域ＲＰ１には、第１の階層Ｈ１のタスク番号が記憶される。記憶領域ＲＰ２には、第２の階層Ｈ２のタスク番号が記憶される。記憶領域ＲＰ３には、第３の階層Ｈ３のタスク番号が記憶される。
【００５４】
ここで、タスク番号は、次のように決められているものとする。
【００５５】
第２の階層Ｈ２及び第３の階層Ｈ３があるタスクについては、各階層Ｈ１〜Ｈ３のタスク番号をそれぞれの階層において実行される順番の番号とする。また、存在しない階層Ｈ２，Ｈ３のタスク番号は、‘１’とする。例えば、タスクＴ４３１は、第１の階層Ｈ１のタスク番号が‘４’、第２の階層Ｈ２のタスク番号が‘３’、第３の階層Ｈ３のタスク番号が‘１’となる。また、タスク５の第２の階層Ｈ２及び第３の階層Ｈ３は、‘１’である。なお、タスク番号は、数値に限らず、ビット配列で表されていてもよいし、その他の方法で表されていてもよい。
【００５６】
次に、現在番号レジスタ２４に３２ビットの記憶領域がある場合について説明する。
【００５７】
１ビット目から１５ビット目は、記憶領域ＲＰ３に、１６ビット目から２３ビット目は、記憶領域ＲＰ２に、２４ビット目から３１ビット目は、記憶領域ＲＰ１に、それぞれ割り当てられている。現在のタスクコードが第３の階層Ｈ３のタスクＴ４１１である場合、記憶領域ＲＰ１に‘４’が書き込まれ、記憶領域ＲＰ２に‘１’が書き込まれ、記憶領域ＲＰ３に‘１’が書き込まれる。
【００５８】
図５は、本実施形態に係る前回番号レジスタ２５の記憶領域の構造を示す構造図である。
【００５９】
前回番号レジスタ２５には、第１の階層Ｈ１のタスク番号を記憶する記憶領域ＲＮ１と、第１の階層Ｈ１のタスクＴ１〜Ｔ９の個数分の第２の階層Ｈ２及び第３の階層Ｈ３のそれぞれのタスク番号を記憶する記憶領域ＲＮ１２〜ＲＮ９３とが割り当てられている。
【００６０】
前回番号レジスタ２５は、現在番号レジスタ２４からタスクコードが転送されてくると、このタスクコードの示すタスクＴ１〜Ｔ７２８のタスク番号を、対応する記憶領域ＲＮ１２〜ＲＮ９３に書き込む。例えば、タスクＴ７２４を示すタスクコードが転送されてきた場合、第１の階層Ｈ１の記憶領域ＲＮ１に‘７’が書き込まれ、タスクＴ７の第２の階層Ｈ２の記憶領域ＲＮ７２に‘２’が書き込まれ、タスクＴ７の第３の階層Ｈ３の記憶領域ＲＮ７３に‘４’が書き込まれる。
【００６１】
図６は、本実施形態に係る番号管理テーブル２６の記憶領域の構造を示す構造図である。
【００６２】
番号管理テーブル２６には、第１の階層Ｈ１の最終タスク番号を記憶する記憶領域ＲＴ１と、第２の階層Ｈ２の最終タスク番号を記憶する記憶領域ＲＴ１２〜ＲＴ９２と、第３の階層Ｈ３の最終タスク番号を記憶する記憶領域ＲＴ１３１〜ＲＴ９３１とが割り当てられている。例えば、記憶領域ＲＴ１には、第１の階層Ｈ１で最後に実行される９番目のタスクＴ９を示すタスク番号の‘９’が設定されている。記憶領域ＲＴ４２には、第１の階層Ｈ１のタスクＴ４の第２の階層Ｈ２で最後に実行される３番目のタスクＴ４３を示すタスク番号の‘３’が設定されている。また、実行されるタスクが無い階層では、‘１’が設定されている。例えば、第１の階層Ｈ１のタスクＴ５では、第２の階層Ｈ２で実行されるタスクは無いため、記憶領域ＲＴ５２には、‘１’が設定されている。
【００６３】
次に、前回番号レジスタ２５のデータの更新について説明する。ここでは、タスクＴ１〜Ｔ７２８の実行順が全て正常（妥当）である場合について説明する。
【００６４】
図７は、本実施形態に係る前回番号レジスタ２５のデータの更新状態を表すデータ変化図である。
【００６５】
前回番号レジスタ２５は、初期状態では、全ての記憶領域ＲＮ１〜ＲＮ９３に‘０’が書き込まれている。
【００６６】
現在番号レジスタ２４に書き込まれたタスクＴ１のタスクコードが正常であると判断されると、タスクＴ１のタスクコードが前回番号レジスタ２５に書き込まれる。これにより、第１の階層Ｈ１の記憶領域ＲＮ１、タスクＴ１の第２の階層Ｈ２の記憶領域ＲＮ１２及びタスクＴ１の第３の階層Ｈ３の記憶領域ＲＮ１３に、‘１’が書き込まれる。番号管理テーブル２６との比較により、タスクＴ１の第２の階層Ｈ２及び第３の階層Ｈ３が最終タスク番号であると判断されると、第２の階層Ｈ２の記憶領域ＲＮ１２及び第３の階層Ｈ３の記憶領域ＲＮ１３は、‘０’に初期化される。
【００６７】
１スキャン目のタスクＴ１の実行後、タスクＴ２１が実行されるため、現在番号レジスタ２４に、タスクＴ２１のタスクコードが書き込まれる。
【００６８】
現在番号レジスタ２４に書き込まれたタスクＴ２１のタスクコードが正常であると判断されると、タスクＴ２１のタスクコードが前回番号レジスタ２５に書き込まれる。これにより、第１の階層Ｈ１の記憶領域ＲＮ１に‘２’が書き込まれ、タスクＴ２の第２の階層Ｈ２の記憶領域ＲＮ２２及びタスクＴ２の第３の階層Ｈ３の記憶領域ＲＮ２３に、‘１’が書き込まれる。番号管理テーブル２６との比較により、タスクＴ２の第３の階層Ｈ３が最終タスク番号であると判断されると、階層Ｈ３の記憶領域ＲＮ２３は、‘０’に初期化される。
【００６９】
１スキャン目のタスクＴ２１の実行後、タスクＴ３が実行されるため、現在番号レジスタ２４に、タスクＴ３のタスクコードが書き込まれる。
【００７０】
現在番号レジスタ２４に書き込まれたタスクＴ３のタスクコードが正常であると判断されると、タスクＴ３のタスクコードが前回番号レジスタ２５に書き込まれる。これにより、第１の階層Ｈ１の記憶領域ＲＮ１に‘３’が書き込まれ、タスクＴ３の第２の階層Ｈ２の記憶領域ＲＮ３２及びタスクＴ３の第３の階層Ｈ３の記憶領域ＲＮ３３に、‘１’が書き込まれる。番号管理テーブル２６との比較により、タスクＴ３の第２の階層Ｈ２及び第３の階層Ｈ３が最終タスク番号であると判断されると、第２の階層Ｈ２の記憶領域ＲＮ２２及び第３の階層Ｈ３の記憶領域ＲＮ２３は、‘０’に初期化される。
【００７１】
このようにして、前回番号レジスタ２５のデータが順次に更新される。
【００７２】
図８は、本実施形態に係るデータバスＤＢで伝送されるタスクコードを表すデータＤＴの構造を示すデータ構造図である。なお、ここでは、データＤＴの容量を３２ビットで説明するが、データＤＴの容量はいくつでもよい。
【００７３】
データＤＴは、各階層Ｈ１〜Ｈ３のタスク番号を表す領域Ｄ１〜Ｄ３と拡張フラグＦＬを含む。２４ビットから３１ビットまでの領域Ｄ１は、第１の階層Ｈ１のタスク番号を表している。１６ビットから２３ビットまでの領域Ｄ２は、第２の階層Ｈ２のタスク番号を表している。１ビットから１５ビットまでの領域Ｄ３は、第３の階層Ｈ３のタスク番号を表している。
【００７４】
図８に示すように、シーケンス順に従って、データＤＴの各領域Ｄ１〜Ｄ３のタスク番号が変更される。
【００７５】
拡張フラグＦＬは、０ビットに位置する領域である。拡張フラグＦＬは、データＤＴを拡張するデータがある場合は‘１’、データＤＴを拡張するデータがない場合は‘０’である。拡張フラグＦＬは、第３の階層Ｈ３よりも下位の階層がある場合に‘１’になる。従って、図２に示すタスクＴ１〜Ｔ７２８の実行順の構成では、第３の階層Ｈ３よりも下位の階層はないため、拡張フラグＦＬは、常に‘０’である。
【００７６】
図９は、拡張されたデータＤＴ１〜ＤＴ３の構造を示すデータ構造図である。図９を参照して、３つのデータＤＴ１〜ＤＴ３に分けて、第１の階層Ｈ１から第８の階層Ｈ８まであるタスクコードを表す場合について説明する。なお、各階層Ｈ１〜Ｈ８のタスク番号を表す領域Ｄ１〜Ｄ８の容量は、３つのデータＤＴ１〜ＤＴ３にどのように割り当ててもよい。
【００７７】
第１のデータＤＴ１は、拡張フラグＦＬが‘１’になっている点以外は、上述した図８に示すデータＤＴの構造と同じである。従って、第１のデータＤＴ１には、第１の階層Ｈ１から第３の階層Ｈ３までのタスク番号を表す領域Ｄ１〜Ｄ３がある。拡張フラグＦＬが‘１’であるため、第１のデータＤＴ１を受信した処理部は、第２のデータＤＴ２の受信を待つ。
【００７８】
第２のデータＤＴ２は、第４の階層Ｈ４及び第５の階層Ｈ５のそれぞれのタスク番号を表す領域Ｄ４，Ｄ５と拡張フラグＦＬを含む。拡張フラグＦＬが‘１’であるため、第２のデータＤＴ２を受信した処理部は、第３のデータＤＴ３の受信を待つ。
【００７９】
第３のデータＤＴ３は、第６の階層Ｈ６及び第８の階層Ｈ８のそれぞれのタスク番号を表す領域Ｄ６〜Ｄ８と拡張フラグＦＬを含む。拡張フラグＦＬが‘０’であるため、第３のデータＤＴ３を受信した処理部は、タスクコードを表すデータの受信処理を終了する。
【００８０】
図１０は、本実施形態に係る実行順診断回路２の第１の動作を表すタイミングチャートである。第１の動作は、タスクの実行順が正常であり、かつ診断するタスクが最終タスクでない場合の動作である。なお、図中の網掛けの部分は、動作状態が不確定であることを示している。
【００８１】
マイクロプロセッサ１は、実行順診断回路２による診断をする前に、実行順診断回路２を初期化する。具体的には、マイクロプロセッサ１は、番号管理テーブル２６に管理情報を書き込み、前回番号レジスタ２５に‘０’を書き込む。番号管理テーブル２６の管理情報の初期化は、マイコン１０の初期化時にファームウェアで設定できるようにしてもよい。
【００８２】
マイクロプロセッサ１は、タスクＴ１〜Ｔ７２８の実行時に、実行するタスクＴ１〜Ｔ７２８の固有のタスクコードを現在番号レジスタ２４に書き込む。
【００８３】
具体的には、マイクロプロセッサ１は、タスクＴ１〜Ｔ７２８の実行時に、現在番号レジスタ２４のアドレスをアドレスデコード回路２１に出力し、実行順診断回路２にデータを書き込むためのコマンドをＲ／Ｗ制御回路２２に出力し、実行するタスクＴ１〜Ｔ７２８の固有のタスクコードを現在番号レジスタ２４に出力する。
【００８４】
アドレスデコード回路２１は、受信したアドレスをデコードし、デコードしたアドレスをＲ／Ｗ制御回路２２に出力する。Ｒ／Ｗ制御回路２２は、受信したアドレス及びコマンドに基づいて、現在番号レジスタ２４に書き込み指令を出力する。これにより、現在番号レジスタ２４に、マイクロプロセッサ１から出力されたタスクコードが書き込まれる。
【００８５】
現在番号レジスタ２４にタスクコードが書き込まれると、Ｒ／Ｗ制御回路２２は、マイクロプロセッサ１にＷＡＩＴ信号を出力する。これにより、マイクロプロセッサ１のバスサイクルが待機状態になる。また、Ｒ／Ｗ制御回路２２は、実行順を診断させるための診断起動指令をタイミング回路２３に出力する。
【００８６】
タイミング回路２３は、診断起動指令を受信すると、実行順診断のシーケンスを制御する。
【００８７】
まず、タイミング回路２３は、診断起動指令を受信すると、タイミングＴＡを診断回路２７に出力する。診断回路２７は、タイミングＴＡを受信すると、現在番号レジスタ２４に保存されたタスクコードと前回番号レジスタ２５に保存されている前回の実行順診断で保存したタスクコードを参照して、実行順が妥当（正常）か否かを診断する。
【００８８】
ここで、診断回路２７による診断方法について説明する。
【００８９】
診断回路２７は、上位の階層から下位の階層の順番に、現在番号レジスタ２４と前回番号レジスタ２５がそれぞれ示すタスク番号を比較して診断する。
【００９０】
まず、診断回路２７は、第１の階層Ｈ１の診断を次のように行う。
【００９１】
診断回路２７は、現在番号レジスタ２４が示すタスクの第１の階層Ｈ１（最上位階層）のタスク番号と、前回番号レジスタ２５が示すタスクの第１の階層Ｈ１のタスク番号に１を足した値（インクリメントした値）が同じであるか否かを判断する。同じでない場合、診断回路２７は、実行順が異常と判断する。
【００９２】
診断回路２７は、第１の階層Ｈ１が正常であると判断した場合、第２の階層Ｈ２の診断を次のように行う。
【００９３】
前回番号レジスタ２５が示すタスクの第３の階層Ｈ３が‘０’である場合、診断回路２７は、現在番号レジスタ２４が示すタスクの第２の階層Ｈ２のタスク番号と、前回番号レジスタ２５が示すタスクの第２の階層Ｈ２のタスク番号に１を足した値が同じであるか否かを判断する。同じでない場合、診断回路２７は、実行順が異常と判断する。
【００９４】
前回番号レジスタ２５が示すタスクの第３の階層Ｈ３が‘０’でない場合、診断回路２７は、現在番号レジスタ２４が示すタスクの第２の階層Ｈ２のタスク番号と、前回番号レジスタ２５が示すタスクの第２の階層Ｈ２のタスク番号が同じであるか否かを判断する。同じでない場合、診断回路２７は、実行順が異常と判断する。
【００９５】
診断回路２７は、第２の階層Ｈ２が正常であると判断した場合、次のように第３の階層Ｈ３の診断をする。
【００９６】
診断回路２７は、現在番号レジスタ２４が示すタスクの第３の階層Ｈ３のタスク番号と、前回番号レジスタ２５が示すタスクの第３の階層Ｈ３のタスク番号に１を足した値が同じであるか否かを判断する。同じでない場合、診断回路２７は、実行順が異常と判断する。
【００９７】
診断回路２７は、いずれの階層Ｈ１〜Ｈ３も異常と判断しなかった場合、実行順が妥当（正常）と判断する。
【００９８】
診断回路２７は、実行順が妥当と診断すると、診断結果をタイミング回路２３に出力し、現在番号レジスタ２４に保存されているタスクコードを、前回番号レジスタ２５に転送させるための転送指令を出力する。これにより、前回番号レジスタ２５に保存されているタスクコードが現在番号レジスタ２４に保存されているタスクコードに更新される。
【００９９】
タイミング回路２３は、実行順が妥当とする診断結果を受信すると、タイミングＴＢを比較回路２８に出力する。
【０１００】
比較回路２８は、タイミングＴＢを受信すると、番号管理テーブル２６の管理情報を参照して、前回番号レジスタ２５に保存されている診断が終了したタスクコードが最終タスクか否かを判断する。比較回路２８は、前回番号レジスタ２５に保存されているタスクコードが最終タスクでない（管理情報と不一致）と判断すると、前回番号レジスタ２５を初期化しない。比較回路２８は、比較が完了すると、比較完了通知をタイミング回路２３に出力する。
【０１０１】
タイミング回路２３は、比較完了通知を受信すると、診断完了通知をＲ／Ｗ制御回路２２に出力する。Ｒ／Ｗ制御回路２２は、診断完了通知を受信すると、マイクロプロセッサ１のバスサイクルの待機状態を解除する。
【０１０２】
図１１は、本実施形態に係る実行順診断回路２の第２の動作を表すタイミングチャートである。第２の動作は、タスクの実行順が正常であり、かつ診断するタスクが最終タスクである場合の動作である。なお、図中の網掛けの部分は、動作状態が不確定であることを示している。ここでは、図１０に示す第１の動作と異なる部分について主に説明する。
【０１０３】
比較回路２８による処理が開始されるまでは、前述した第１の動作と同様である。
【０１０４】
比較回路２８は、前回番号レジスタ２５に保存されているタスクコードが最終タスクである（管理情報と一致）と判断すると、前回番号レジスタ２５を初期化する。比較回路２８は、比較が完了すると、比較完了通知をタイミング回路２３に出力する。
【０１０５】
その他の動作については、第２の動作は、図１０に示す第１の動作と同じである。
【０１０６】
図１２は、本実施形態に係る実行順診断回路２の第３の動作を表すタイミングチャートである。第３の動作は、タスクの実行順が異常である場合の動作である。なお、図中の網掛けの部分は、動作状態が不確定であることを示している。ここでは、図１０に示す第１の動作と異なる部分について主に説明する。
【０１０７】
診断回路２７による診断が開始されるまでは、前述した第１の動作と同様である。
【０１０８】
診断回路２７は、実行順が異常と診断すると、異常を示す診断結果をタイミング回路２３に出力し、前回番号レジスタ２５を更新しない。
【０１０９】
タイミング回路２３は、異常を示す診断結果を受信すると、実行順異常通知をマイクロプロセッサ１に出力し、診断完了通知をＲ／Ｗ制御回路２２に出力する。Ｒ／Ｗ制御回路２２は、診断完了通知を受信すると、マイクロプロセッサ１のバスサイクルの待機状態を解除する。
【０１１０】
マイクロプロセッサ１は、実行順異常通知を受信することで、診断結果を得ることができる。実行順異常通知により、マイクロプロセッサ１の割り込み処理を起動することで、マイクロプロセッサ１は、実行順の異常を検出することができる。
【０１１１】
本実施形態によれば、番号管理テーブル２６により各階層Ｈ１〜Ｈ３の最終タスクコードを管理情報として一元的に管理することにより、分割された処理をする階層Ｈ２，Ｈ３のタスクＴ２１〜Ｔ７２８を含む複数のタスクＴ１〜Ｔ７２８の実行順を各階層Ｈ１〜Ｈ３で隔てることなく同一処理レベルで診断することができる。
【０１１２】
また、番号管理テーブル２６をマイコン１０の初期化時に、ファームウェアにより設定することで、タスク実行順を変更したファームウェアでも容易に対応した診断することができる。
【０１１３】
さらに、実行順診断回路２は、マイクロプロセッサ１が実行順診断回路２にタスクコードの書き込みをするサイクル内で診断を完了させることで、マイクロプロセッサ１が実行順診断回路２による診断のために待機状態となる時間を最小限に抑えることができる。
【０１１４】
なお、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１１５】
１…マイクロプロセッサ、２…実行順診断回路、３…ファームウェア記憶部、４…ワークメモリ、５…メモリマップドＩ／Ｏ、６…外部回路、１０…マイコン、２１…アドレスデコード回路、２２…Ｒ／Ｗ制御回路、２３…タイミング回路、２４…現在番号レジスタ、２５…前回番号レジスタ、２６…番号管理テーブル、２７…診断回路、２８…比較回路。
【図１】
2014092860.tif 000003
【図２】
2014092860.tif 000004
【図３】
2014092860.tif 000005
【図４】
2014092860.tif 000006
【図５】
2014092860.tif 000007
【図６】
2014092860.tif 000008
【図７】
2014092860.tif 000009
【図８】
2014092860.tif 000010
【図９】
2014092860.tif 000011
【図１０】
2014092860.tif 000012
【図１１】
2014092860.tif 000013
【図１２】
2014092860.tif 000014