(57)【要約】【課題】イベントに関して演算処理を行なうためのプログラムの実行を効率化することにより、プログラムを記憶しておくメモリを節約し、効率的な処理を実現して保守性を向上させることができる制御装置、制御方法及びコンピュータプログラムを提供する。【解決手段】入力処理部７０にて入力した各スイッチ２の状態から検知されたイベントをイベント管理部８０へ通知する。イベント管理部８０は、アプリケーション毎に関連するイベントを対応付けてあるイベントテーブル２０を参照し、検知されたイベント全てを総合して起動すべきアプリケーションのリストをイベント管理情報２１として作成し、システム管理部９０はイベント管理情報２１に基づき起動されるべきアプリケーション５１，５２，５３を実行する。【選択図】図２
2012048703.tif 000002
【特許請求の範囲】
【請求項１】
接続される１又は複数の入力装置からの情報を夫々入力する入力処理と、入力した情報に基づく演算処理を夫々行なうための１又は複数のプログラムを実行する実行処理と、該実行処理により得られる情報を、接続される制御対象の１又は複数の装置へ出力する出力処理とを、順次実行するようにしてある制御装置において、
各プログラムにつき、入力される情報との関連の有無を対応付けたテーブルと、
該テーブルを参照し、前記入力処理にて入力される情報に基づき、実行されるべきプログラムのリストを作成する作成手段と、
作成したリストに基づき、実行されるべきプログラムを起動する手段と
を備えることを特徴とする制御装置。
【請求項２】
前記テーブルは、前記プログラムにつき、実行順序が対応付けてあること
を特徴とする請求項１に記載の制御装置。
【請求項３】
前記複数のプログラムの内のいずれか１つの実行処理では、前記１つ自身又は他のプログラムの実行要求を出力するようにしてあり、
前記作成手段は、出力された実行要求に基づき、次に実行されるべきプログラムのリストを作成するようにしてあること
を特徴とする請求項１又は２に記載の制御装置。
【請求項４】
前記テーブルでは、プログラム毎に関連する情報が複数対応付けられており、
前記作成手段は、複数の関連する情報のいずれか１つが入力された場合、対応するプログラムで前記リストを作成するようにしてあること
を特徴とする請求項１乃至３のいずれかに記載の制御装置。
【請求項５】
前記出力処理は、出力先別に実行される複数の出力処理を含み、
該複数の出力処理と、出力する情報との関連の有無を対応付けたテーブルと、
該テーブルを参照し、実行すべき複数の出力処理の内のいずれかのリストを作成する手段と、
作成したリストに基づき、前記複数の出力処理の内のいずれか１又は複数を実行する手段と
を備えることを特徴とする請求項１乃至４のいずれかに記載の制御装置。
【請求項６】
前記複数の出力処理では夫々、自身又は他の出力処理を実行すべきときに実行要求を出力するようにしてあり、
出力した実行要求に基づき、実行されるべき出力処理のリストを作成するようにしてあること
を特徴とする請求項５に記載の制御装置。
【請求項７】
プログラムの実行処理毎に、処理に係る負荷量を対応付けた負荷テーブルと、
該負荷テーブル及び前記作成手段が作成したリストに基づき、実行すべきプログラムの実行処理に係る合計負荷量を算出する手段と、
算出した合計負荷量に応じて、前記実行処理の処理速度を調整する速度調整手段と
を備えることを特徴とする請求項１乃至６のいずれかに記載の制御装置。
【請求項８】
プログラムの出力処理毎に、処理に係る負荷量を対応付けた負荷テーブルと、
該負荷テーブル及び前記作成手段が作成したリストに基づき、実行すべきプログラムの出力処理に係る合計負荷量を算出する手段と、
算出した合計負荷量に応じて、前記出力処理の処理速度を調整する速度調整手段と
を備えることを特徴とする請求項１乃至７のいずれかに記載の制御装置。
【請求項９】
前記速度調整手段は、処理速度を規定するクロック信号の周波数を調整するようにしてあること
を特徴とする請求項７又は請求項８に記載の制御装置。
【請求項１０】
制御対象を制御する制御装置が、１又は複数の入力装置からの情報を夫々入力する入力処理と、入力した情報に基づく演算処理を夫々行なうための１又は複数のプログラムを実行する実行処理と、該実行処理により得られる情報を、接続される制御対象の１又は複数の出力装置へ出力する出力処理とを、順次実行する方法において、
各プログラムにつき、入力される情報との関連の有無を対応付けたテーブルを参照し、
前記入力処理にて入力される情報に基づき、実行されるべきプログラムのリストを作成し、
作成したリストに基づき、実行されるべきプログラムを起動する
ことを特徴とする制御方法。
【請求項１１】
コンピュータに、１又は複数の入力装置からの情報を夫々入力する入力処理と、入力した情報に基づく演算処理を夫々行なうための１又は複数のプログラムを実行する実行処理と、該実行処理により得られる情報を、接続される制御対象の１又は複数の出力装置へ出力する出力処理とを、各別に順次実行させるコンピュータプログラムにおいて、
コンピュータに、
各プログラムにつき、入力される情報との関連の有無を対応付けたテーブルを参照する処理、
前記入力処理にて入力される情報に基づき、実行されるべきプログラムのリストを作成する処理、及び
作成したリストに基づき、実行されるべきプログラムを起動する処理
を実行させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータプログラムに基づき制御対象を制御する処理を実行する電子制御装置に関し、プログラムを記憶しておくメモリを節約し、効率的な処理を実現して保守性を向上させることができる制御装置、制御方法及びコンピュータプログラムに関する。
【背景技術】
【０００２】
記憶部に書き込まれたコンピュータプログラムに基づいてプロセッサが処理を行なうことで、多様な処理を実現するＥＣＵ（電子制御装置；Electronic Control Unit）が各分
野で多用されている。例えば、車両には複数のＥＣＵが配置され、各ＥＣＵの制御処理によって制動制御、ボディ系の動作制御などが実現される。
【０００３】
１つのＥＣＵは、１つの制御対象のみならず、複数の制御対象を制御するように構成されている。特に車両の分野では、燃費向上のために多数のＥＣＵを配置することなしに、１つのＥＣＵが多数の制御対象を制御するようにしてＥＣＵの数を削減するように努力されている。
【０００４】
１つのＥＣＵが複数の制御対象を制御するためには、ＥＣＵは基本的に、制御対象毎にプログラムを記憶しておき、スケジューリング方式にて順次実行する。しかしながら、各制御対象に対応する演算を行なうために個々に存在する複数のプログラムは、同一の入力装置からの入力、同一の出力装置への出力など、重複する部分がある場合がある。
【０００５】
そこで特許文献１には、制御対象毎のプログラムの重複を無くすようにしたＥＣＵの発明が開示されている。特許文献１に開示されたＥＣＵの発明では、入出力の部分を演算のためのアプリケーションプログラムから独立させ、入力処理のみ順次行なう期間、アプリケーションプログラムを順次実行する期間、及び出力処理のみ順次行なう期間に分けて周期的に繰り返す。そして、入力処理を行なう期間にて、発生した各イベントについてフラグを有効にし、アプリケーションプログラムを実行する際に、同一のイベントに関連するアプリケーションプログラムをまとめて実行する構成とする。
【０００６】
また車両に搭載されるＥＣＵにおいては、バッテリ上がりなどを防止するために、消費電力の低減が求められる。例えば特許文献２においては、動作クロックを高速又は低速に切り替え可能とし、制御処理に影響を与えることなく動作クロックを切り替えることによって、消費電力の低減を図ったマイクロコンピュータ（以下、マイコンという）の発明が開示されている。特許文献２に開示されたマイコンの発明では、マイコンの起動後は動作クロックを高速に設定し、その後に制御が一旦終了してアイドル状態になると、次のウェイクアップ時に動作クロックが低速になるように設定した後、動作クロックを停止させてマイクロコンピュータをスリープ状態にする。ウェイクアップ時には低速の動作クロックで動作し、この状態でアプリケーションプログラムからのスピードアップ要求が与えられた場合に動作クロックを高速に設定し、アプリケーションプログラムの処理を実行している間は動作クロックが低速に切り替わることはない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００２−２０２８９１号公報
【特許文献２】特許第３７５８４７７号
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１に開示された発明により、プログラムの重複が回避されるのでメモリを節約することができ、更に、プログラムのモジュール性を高めることができる。しかしながら、特許文献１に開示されたＥＣＵの発明では、上述したように、同一のイベントに関連するアプリケーションプログラムをまとめて実行するが、各イベントに関連するアプリケーションプログラムを対応付けたイベントテーブルを記憶する構成である。したがって、イベントの数だけイベントテーブルが大きくなり、プログラムサイズが増大するので、メモリの節約が不十分である。しかも、特許文献１に開示されている方法では、入力処理、アプリケーションプログラム、及び出力処理を周期的に繰り返す構成であるために、一のイベントに関し、繰り返し同一のアプリケーションプログラムを実行する場合には、次の周期以降に対応するイベント発生が検知されるように処理を行なう必要がある。したがってプログラムの構成が複雑化し、更新、不具合の検出などの管理が困難となる。また、特許文献１に開示された方法では、アプリケーションプログラム側から、自分自身又は他のアプリケーションプログラムの起動要求ができない。
【０００９】
また、特許文献２に開示された発明では、動作クロックを低速から高速に切り替えるために、アプリケーションプログラムがスピードアップ要求を出力する必要があるため、従来のアプリケーションプログラムに対してスピードアップ要求を出力する機能を追加する修正が必要となる。また各アプリケーションプログラムは、他のアプリケーションプログラムの動作状態が通知され、自他の動作状態に基づいてスピードアップ要求を出力するか否かを判定しなければならず、各アプリケーションプログラムの処理が複雑化し、アプリケーションプログラムの開発効率が低下するという問題がある。
【００１０】
本発明は、斯かる事情に鑑みてなされたものであり、イベントに関して演算処理を行なうためのプログラムの実行を効率化することにより、プログラムを記憶しておくメモリを節約し、効率的な処理を実現して保守性を向上させることができる制御装置、制御方法及びコンピュータプログラムを目的とする。
【００１１】
また本発明の他の目的とするところは、アプリケーションプログラムの開発効率を低下させることなく、処理速度の調整を容易に行うことができ、消費電力の低減が可能な制御装置を提供することにある。
【課題を解決するための手段】
【００１２】
第１発明に係る制御装置は、接続される１又は複数の入力装置からの情報を夫々入力する入力処理と、入力した情報に基づく演算処理を夫々行なうための１又は複数のプログラムを実行する実行処理と、該実行処理により得られる情報を、接続される制御対象の１又は複数の装置へ出力する出力処理とを、順次実行するようにしてある制御装置において、各プログラムにつき、入力される情報との関連の有無を対応付けたテーブルと、該テーブルを参照し、前記入力処理にて入力される情報に基づき、実行されるべきプログラムのリストを作成する作成手段と、作成したリストに基づき、実行されるべきプログラムを起動する手段とを備えることを特徴とする。
【００１３】
第２発明に係る制御装置は、前記テーブルは、前記プログラムにつき、実行順序が対応付けてあることを特徴とする。
【００１４】
第３発明に係る制御装置は、前記複数のプログラムの内のいずれか１つの実行処理では、前記１つ自身又は他のプログラムの実行要求を出力するようにしてあり、前記作成手段は、出力された実行要求に基づき、次に実行されるべきプログラムのリストを作成するようにしてあることを特徴とする。
【００１５】
第４発明に係る制御装置は、前記テーブルでは、プログラム毎に関連する情報が複数対応付けられており、前記作成手段は、複数の関連する情報のいずれか１つが入力された場合、対応するプログラムで前記リストを作成するようにしてあることを特徴とする。
【００１６】
第５発明に係る制御装置は、前記出力処理は、出力先別に実行される複数の出力処理を含み、該複数の出力処理と、出力する情報との関連の有無を対応付けたテーブルと、該テーブルを参照し、実行すべき複数の出力処理の内のいずれかのリストを作成する手段と、作成したリストに基づき、前記複数の出力処理の内のいずれか１又は複数を実行する手段とを備えることを特徴とする。
【００１７】
第６発明に係る制御装置は、前記複数の出力処理では夫々、自身又は他の出力処理を実行すべきときに実行要求を出力するようにしてあり、出力した実行要求に基づき、実行されるべき出力処理のリストを作成するようにしてあることを特徴とする。
【００１８】
第７発明に係る制御装置は、プログラムの実行処理毎に、処理に係る負荷量を対応付けた負荷テーブルと、該負荷テーブル及び前記作成手段が作成したリストに基づき、実行すべきプログラムの実行処理に係る合計負荷量を算出する手段と、算出した合計負荷量に応じて、前記実行処理の処理速度を調整する速度調整手段とを備えることを特徴とする。
【００１９】
第８発明に係る制御装置は、プログラムの出力処理毎に、処理に係る負荷量を対応付けた負荷テーブルと、該負荷テーブル及び前記作成手段が作成したリストに基づき、実行すべきプログラムの出力処理に係る合計負荷量を算出する手段と、算出した合計負荷量に応じて、前記出力処理の処理速度を調整する速度調整手段とを備えることを特徴とする。
【００２０】
第９発明に係る制御装置は、前記速度調整手段が、処理速度を規定するクロック信号の周波数を調整するようにしてあることを特徴とする。
【００２１】
第１０発明に係る制御方法は、制御対象を制御する制御装置が、１又は複数の入力装置からの情報を夫々入力する入力処理と、入力した情報に基づく演算処理を夫々行なうための１又は複数のプログラムを実行する実行処理と、該実行処理により得られる情報を、接続される制御対象の１又は複数の出力装置へ出力する出力処理とを、順次実行する方法において、各プログラムにつき、入力される情報との関連の有無を対応付けたテーブルを参照し、前記入力処理にて入力される情報に基づき、実行されるべきプログラムのリストを作成し、作成したリストに基づき、実行されるべきプログラムを起動することを特徴とする。
【００２２】
第１１発明に係るコンピュータプログラムは、コンピュータに、１又は複数の入力装置からの情報を夫々入力する入力処理と、入力した情報に基づく演算処理を夫々行なうための１又は複数のプログラムを実行する実行処理と、該実行処理により得られる情報を、接続される制御対象の１又は複数の出力装置へ出力する出力処理とを、各別に順次実行させるコンピュータプログラムにおいて、コンピュータに、各プログラムにつき、入力される情報との関連の有無を対応付けたテーブルを参照する処理、前記入力処理にて入力される情報に基づき、実行されるべきプログラムのリストを作成する処理、及び作成したリストに基づき、実行されるべきプログラムを起動する処理を実行させることを特徴とする。
【００２３】
本発明では、入力処理にて入力される各情報にプログラムを対応付けるのではなく、各プログラムに入力される情報との関連を対応付けたテーブルを記憶してある。テーブルと入力処理にて入力された情報とを参照して、実行されるべきプログラムが整理されてリストとして作成され、該リストに基づきプログラムが起動される。これにより、多数の入力情報に関連して重複するプログラムの情報（関数アドレス等）を記憶する必要がない。
【００２４】
本発明では、入力される情報に基づき実行されるべきプログラムのリストが作成される際、テーブル内に対応付けられている実行順序に基づき作成される。これにより、入力された情報に基づく演算処理によって情報の齟齬が回避されると共に、入力処理と関連する演算のためのプログラムとの間の依存関係がなくなる。
【００２５】
本発明では、実行処理内でのプログラムに基づく処理からも、該プログラム自身又は他のプログラムの実行が要求され、入力される情報のみならず、実行要求に基づいても、次に実行されるべきプログラムのリストが作成される。これにより、プログラム自身が反復的に実行されるべき場合、入力処理にて疑似的に情報が入力されたようにせずともよい。
【００２６】
本発明では、実行されるべきプログラムのリストが作成されるに際し、異なる複数の入力情報に重複して同一のプログラムが関連する場合、いずれかが入力された場合に実行されるべきとしてリストが作成される。つまり、テーブルにおけるプログラム毎に、該プログラムに関連する情報の入力の有無の論理和がとられ、入力有の場合は、実行処理中で１回起動される。これにより、実行処理中における各プログラムの実行は効率的となる。
【００２７】
本発明では、出力処理は、制御対象即ち、演算の結果の情報の出力先に応じて複数の出力処理に分けられており、該複数の出力処理と出力する情報との対応が記憶されてある。出力する情報に応じて、実行されるべき出力処理がリストにされ、出力処理内で実際に実行される。これにより、出力処理のプログラムもモジュール化して必要なプログラムのみ実行されることにより、処理が効率化される。
【００２８】
本発明では、複数の出力処理は夫々、自身又は他の出力処理が次回、実行されるべきであるときは、次に起動時に実行されるように実行要求を出力することが可能である。これにより、出力される情報を疑似的に作成せずとも、反復的に同一の出力処理を実行することが可能となる。
【００２９】
本発明では、各プログラムの実行処理又は出力処理毎に負荷量（例えば処理に要する時間など）を対応付けた負荷テーブルを予め記憶しておく。この負荷テーブルと作成された上記のリストとに基づいて、実行されるべき一又は複数の実行処理又は出力処理の合計負荷量を算出することができる。例えば定められた時間内に処理が完了できないなど、合計負荷量が所定の閾値より大きい場合などには、処理速度を高く設定することができる。また合計負荷量が所定の閾値より小さい場合などには、処理速度を低く設定し、これにより消費電力を低減することができる。
【００３０】
本発明では、クロック信号の周波数を調整することによって、実行処理又は出力処理の処理速度を調整する。クロック信号の周波数は、例えばクロック信号を分周する分周回路などを用いることによって段階的に調整することができ、容易に処理速度の調整を行うことができる。
【発明の効果】
【００３１】
本発明による場合、多数の入力情報に関連するプログラムを全て記憶する必要がないので、制御装置のメモリを節約することができる。また、反復的に入力処理、実行処理及び出力処理を行なった場合でも、実行処理では各プログラムは予め決まった実行順序で実行されるので、入力処理を実現するプログラムと、演算処理を行なうためのプログラムとの間の依存関係が無くなるので、開発効率を向上させることができる。
【００３２】
また本発明による場合、負荷テーブルに基づいて実行されるべき処理の合計負荷量を算出し、合計負荷量に応じて処理速度を調整することによって、負荷量に応じた適切な処理速度で処理を行うことができ、消費電力を低減することができる。また、各プログラムが処理速度を変化させるか否かの判断を行う必要がなく、プログラムを追加する場合などであっても、追加するプログラムの負荷量を負荷テーブルに追加するのみでよいため、プログラムの開発効率を向上させることができる。
【図面の簡単な説明】
【００３３】
【図１】本実施の形態におけるＥＣＵの構成を示すブロック図である。
【図２】ＣＰＵにより実現される機能を示す機能ブロック図である。
【図３】ＲＯＭに記憶されているイベントテーブルを示す説明図である。
【図４】ＲＡＭに記憶されるイベント管理情報、起動要求情報及び起動関数リストを示す説明図である。
【図５】アプリケーションイベントテーブルの内容例を示す説明図である。
【図６】イベント管理部により作成されるアプリケーションイベント管理情報の内容例を示す説明図である。
【図７】イベント管理部により作成されるアプリケーション起動要求情報の内容例を示す説明図である。
【図８】イベント管理部により作成される起動すべきアプリケーション関数のリスト（アプリケーション起動関数リスト）の例を示す説明図である。
【図９】出力処理イベントテーブルの内容例を示す説明図である。
【図１０】出力処理イベント管理情報の内容例を示す説明図である。
【図１１】出力処理起動要求情報の内容例を示す説明図である。
【図１２】起動すべき出力処理関数のリスト（出力処理起動関数リスト）の例を示す説明図である。
【図１３】本実施の形態におけるＥＣＵのＣＰＵにより実行される処理手順の一例を示すフローチャートである。
【図１４】本実施の形態におけるＥＣＵのＣＰＵにより実行される処理手順の一例を示すフローチャートである。
【図１５】本実施の形態におけるＥＣＵのＣＰＵにより実行される処理手順の一例を示すフローチャートである。
【図１６】入力処理部による入力処理の手順の一例を示すフローチャートである。
【図１７】アプリケーション部によるアプリケーション処理の手順の一例を示すフローチャートである。
【図１８】出力処理部による出力処理の手順の一例を示すフローチャートである。
【図１９】実施の形態２におけるＥＣＵの構成を示すブロック図である。
【図２０】実施の形態２に係るＥＣＵのＣＰＵにより実現される機能を示す機能ブロック図である。
【図２１】アプリケーション処理負荷テーブルの内容例を示す説明図である。
【図２２】出力処理負荷テーブルの内容例を示す説明図である。
【図２３】アプリケーション処理を行う際のクロック信号切替処理の手順を示すフローチャートである。
【図２４】出力処理を行う際のクロック信号切替処理の手順を示すフローチャートである。
【発明を実施するための形態】
【００３４】
以下、本発明をその実施の形態を示す図面に基づき具体的に説明する。
なお、以下に説明する実施の形態では、本発明を車両に搭載されてボディ系の制御を行なうＥＣＵ（Electronic Control Unit）に適用する例を挙げて説明する。
【００３５】
（実施の形態１）
図１は、本実施の形態におけるＥＣＵ１の構成を示すブロック図である。ＥＣＵ１は、ＣＰＵ（Central Processing Unit）１０と、ＲＯＭ（Read Only Memory）１１と、ＲＡ
Ｍ（Random Access Memory）１２と、記憶部１３と、入出力部１４とを備える。
【００３６】
ＣＰＵ１０はＲＯＭ１１に記憶されている制御プログラム１Ｐに基づき、各構成部と共働して各機能を実現する。
【００３７】
ＲＯＭ１１は、マスクＲＯＭ、フラッシュメモリ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable and Programmable ROM）、ＥＥＰＲＯＭ（Electrically EPROM）等
の不揮発性メモリを利用する。ＲＯＭ１１には、上述のように制御プログラム１Ｐ及びイベントテーブル２０が予め記憶されている。
【００３８】
ＲＡＭ１２は、ＤＲＡＭ（Dynamic Random Access Memory）、ＳＲＡＭ（Static Random Access Memory）等の揮発性メモリを利用している。ＲＡＭ１２にはＣＰＵ１０の処理
によって作成されるイベント管理情報及び起動要求情報（後述）が記憶される。
【００３９】
入出力部１３は、ＥＣＵ１が制御するアクチュエータ及びセンサなどとのインタフェースである。なお入出力部１３は、アクチュエータとスイッチ２を介して接続しており、スイッチ２のＯＮ／ＯＦＦを制御してアクチュエータ等を制御し、ＯＮ／ＯＦＦでセンサの状態を読み取る。また、入出力部１３は、センサで測定した情報を読み出す場合、これをスイッチのＯＮ／ＯＦＦ状態として読み取る。入出力部１３は、Ｄ／Ａ変換、Ａ／Ｄ変換機能を有していてもよい。
【００４０】
ＲＯＭ１１に記憶されている制御プログラム１Ｐは、アプリケーションプログラム１５，１５，…、出力プログラム１６，１６，…、入力プログラム１７，１７，…、イベント管理プログラム１８、及びシステム管理プログラム１９を含む。アプリケーションプログラム１５，１５，…はＣＰＵ１０にボディ系の制御処理を夫々実行させるためのプログラムである。出力プログラム１６，１６，…は、ＣＰＵ１０に、アクチュエータ２又はスイッチ夫々に応じて制御信号の出力指示を実行させるためのプログラムである。入力プログラム１７，１７，…は、ＣＰＵ１０にセンサ３又はスイッチなどが夫々に応じて、接続する入出力部１４から通知されるイベントを夫々解釈する処理を行なわせるためのプログラムである。イベント管理プログラム１８は、ＣＰＵ１０にイベント管理情報及び起動要求情報（後述）を作成させるためのプログラムである。システム管理プログラム１９は、ＣＰＵ１０がイベント管理プログラム１８に基づき作成したイベント管理情報及び起動要求情報を参照して、実行されるべきアプリケーションプログラム１５又は出力プログラム１６を決定して起動するためのプログラムである。
【００４１】
アプリケーションプログラム１５，１５，…は夫々、ドアロックのＯＮ／ＯＦＦを制御するドアロック制御、ヘッドライトのＯＮ／ＯＦＦを制御する灯火制御、室内灯のＯＮ／ＯＦＦを制御する室内灯制御の処理を実現させるプログラム等、ＥＣＵ１にボディ系の制御機能を実現させるための演算処理を各実行する複数のプログラムである。
【００４２】
出力プログラム１６，１６，…は夫々、制御対象即ち出力対象であるドアロックモータへのＯＮ／ＯＦＦの出力制御（ドアロックモータ出力）、ヘッドライトへのＯＮ／ＯＦＦの出力制御（ヘッドライトバルブ出力）、及び室内灯のＯＮ／ＯＦＦの出力制御（室内灯制御）等を含む各出力処理を各実現させる複数のプログラムである。
【００４３】
入力プログラム１７，１７，…は夫々、入力対象であるドアロックセンサからのＯＮ／ＯＦＦの入力処理（ドアロックセンサ入力）、ヘッドライトスイッチのＯＮ／ＯＦＦの入力処理（ヘッドライトスイッチ入力）、及び室内灯スイッチのＯＮ／ＯＦＦの入力処理（室内灯スイッチ入力）等を含む各入力処理を各実現させる複数のプログラムである。
【００４４】
このように構成されるＥＣＵ１では、ＣＰＵ１０がスイッチ２，２，…におけるＯＮ／ＯＦＦの状態を、入出力部１４を介してイベントとして検知し、ＣＰＵ１０は入力されたイベントに応じてスイッチ２，２，…を制御するためにアプリケーションプログラム１５，１５，…に基づく演算処理を行ない、演算結果を出力プログラム１６，１６，…に基づきスイッチ２，２，…へ出力する。このとき、ＣＰＵ１０は、各スイッチ２，２，…の状態を読み取ってイベントとして検知する入力処理、検知されたイベントに基づき演算を行なう処理、及び演算結果を出力する出力処理を、反復して順次実行する。これにより、ＥＣＵ１は、車両に搭載されるドアロック、ヘッドライト、及び室内灯のボディ系の装置に対し、それらに対応するスイッチの状態に応じた制御を実現する。例えばＥＣＵ１１は、ドアロックセンサ（スイッチ２）により読み取る施錠（ＯＮ）／解錠（ＯＦＦ）の状態、ドアロックのスイッチ２のＯＮ／ＯＦＦの状態、及び、ドア開閉センサ（スイッチ２）により読み取る開（ＯＮ）／閉（ＯＦＦ）の状態等に基づき、ドアロックモータ（アクチュエータ）のスイッチ２を制御する。
【００４５】
図２は、ＣＰＵ１０により実現される機能を示す機能ブロック図である。ＣＰＵ１０は制御プログラム１Ｐに含まれる各プログラムに基づき、入力処理部７０、アプリケーション部５０、出力処理部６０、イベント管理部８０、及びシステム管理部９０として機能する。
【００４６】
ＣＰＵ１０は、入力プログラム１７，１７，…に基づいて入力処理部７０として機能する。入力処理部７０の機能は、ドアロックセンサから開閉の情報を入力するドアロックセンサ入力７１、ヘッドライトスイッチのＯＮ／ＯＦＦの状態を入力するヘッドライトスイッチ入力７２、及び室内灯のＯＮ／ＯＦＦの状態を入力する室内灯スイッチ入力７３等、各種スイッチ２の情報を夫々入力し、情報の変化が有った場合、又は任意の条件を満たした場合に、ＣＰＵ１０へイベント通知を行なうものである。
【００４７】
ＣＰＵ１０は、イベント管理プログラム１８に基づいてイベント管理部８０として機能する。イベント管理部８０の機能は、入力処理部７０の機能から通知された発生イベントと、ＲＯＭ１１に記憶されてあるイベントテーブル２０とを参照し、通知されたイベントと対応するアプリケーションプログラム（関数）をイベント管理情報２１としてＲＡＭ１２に記憶する機能であり。またイベント管理部８０の機能は、実行されるアプリケーションプログラム又は出力処理から、次に実行すべきアプリケーションプログラム又は他の出力処理の起動要求が出力されたときにこれを受け付けて、当該情報を起動要求情報２２としてＲＡＭ１２に記憶する機能である。
【００４８】
ＣＰＵ１０は、システム管理プログラム１９に基づいてシステム管理部９０として機能する。システム管理部９０の機能は、イベント管理部８０の機能により作成されたイベント管理情報２１と、起動要求情報２２とを参照して、実行すべきアプリケーションプログラム（関数）又は出力処理のリストを作成し、当該リストに従って起動させるものである。
【００４９】
ＣＰＵ１０は、アプリケーションプログラム１５，１５，…に基づいてアプリケーション部５０として機能する。アプリケーション部５０は、ドアロックのＯＮ／ＯＦＦを決定するドアロック（アプリケーション）５１、ヘッドライトのＯＮ／ＯＦＦを決定する灯火制御（アプリケーション）５２、並びに、室内灯のＯＮ／ＯＦＦ及び明るさ等の決定を含む各演算処理の機能である。またＣＰＵ１０は、入力処理、アプリケーション実行処理、出力処理を順次反復的に実行するが、アプリケーション部５０として機能するに際し、次回の実行処理においても自身を起動すべき場合、起動要求をイベント管理部８０へ出力する。例えば、ＣＰＵ１０は灯火制御５２として機能する場合、入力された１回のイベントに応じて、３００ｍｓ毎に３回、１００ｍｓの間、ヘッドライトを点滅させるという制御を行なう。このとき灯火制御５２の機能は、自身が何回起動されたかに応じてヘッドライトバルブのスイッチ２へＯＮ／ＯＦＦの出力を切り替える。したがって灯火制御５２は、３回点滅を完了させるまで、複数回連続して起動される必要があるので、次回の起動要求を出力する。
【００５０】
ＣＰＵ１０は、出力プログラム１６，１６，…に基づいて出力処理部６０として機能する。出力処理部６０の機能は、ドアロックモータへのＯＮ／ＯＦＦの出力制御（ドアロックモータ出力６１）、ヘッドライトへのＯＮ／ＯＦＦの出力制御（ヘッドライトバルブ出力６２）、及び室内灯のＯＮ／ＯＦＦの出力制御（室内灯制御６３）等の出力処理を実際に行なう機能である。またＣＰＵ１０は、入力処理、アプリケーション実行処理、出力処理を順次反復的に実行するが、出力処理部６０として機能するに際し、次回の出力処理においても自身を起動すべき場合、起動要求をイベント管理部８０へ出力する。例えば、ＣＰＵ１０は室内灯出力６３の出力処理を行なう場合、室内灯を３ｓ点灯させるための信号を出力する処理を継続的に行なう。このとき室内灯出力６３は、自身がこれまでに何ｍｓ出力し続けているかを継続的に測定するために、複数回連続して起動される必要があるので、次回の起動要求を出力する。
【００５１】
図３は、ＲＯＭ１１に記憶されているイベントテーブル２０を示す説明図である。イベントテーブル２０は、アプリケーションプログラム１５，１５，…に基づく各アプリケーションを起動するイベント条件を含むアプリケーションイベントテーブル２４と、出力プログラム１６，１６，…に基づく各出力処理を起動するイベント条件を含む出力処理イベントテーブル２５とを含む。
【００５２】
図４は、ＲＡＭ１２に記憶されるイベント管理情報２１、起動要求情報２２及び起動関数リスト２３を示す説明図である。イベント管理情報２１、起動要求情報２２及び起動関数リスト２３は夫々、図４に示すように、アプリケーション用のアプリケーションイベント管理情報２６、アプリケーション起動要求情報２８、及びアプリケーション起動関数リスト３０と、出力処理用の出力処理イベント管理情報２７、出力処理起動要求情報２９、及び出力処理起動関数リスト３１とに分けられている。
【００５３】
図３及び図４に示した情報について詳細を説明する。
図５は、アプリケーションイベントテーブル２４の内容例を示す説明図である。図５に示すように、アプリケーションイベントテーブル２４では、アプリケーションプログラム１５，１５，…に基づき実行される各アプリケーションを起動させるためのアプリケーション関数Ａ，Ｂ，Ｃ，…夫々につき、入力処理部７０としての機能により検知されたイベントとの関係が含まれる。なお、当該関係の有無は「１／０」で示されている。つまり、「１」でアプリケーション関数を呼び出してアプリケーションを起動し、「０」でアプリケーション関数を呼び出さない（起動しない）。また、アプリケーションイベントテーブル２４では、各アプリケーション関数Ａ，Ｂ，Ｃ，…の実行順序が規定されている。なお、実行順序の規定は必須ではない。アプリケーションイベントテーブル２４は、実行順序を含まなくてもよい。
【００５４】
図５のアプリケーションイベントテーブル２４の例では、例えばアプリケーション関数Ａは、スイッチ２，２，…群の内のＳＷ−Ａ（例えばドア開閉センサに対応）がＯＮとなったとき、ＳＷ−ＢがＯＮとなったとき、ＳＷ−ＢがＯＦＦとなったとき、又はＳＷ−ＣがＯＮになったときに起動すべきであると規定されている。またアプリケーション関数Ｂは、ＳＷ−Ａ、ＳＷ−Ｂ、及びＳＷ−ＣのいずれのＯＮ／ＯＦＦに対しても起動すべき関数として規定されている。
【００５５】
このように、本実施の形態ではアプリケーションイベントテーブル２４は、ＳＷ−Ａ，ＳＷ−Ｂ，ＳＷ−ＣのＯＮ／ＯＦＦ（３×２の情報）などのイベント毎ではなく、アプリケーション関数Ａ，Ｂ，Ｃ毎の関連の有無で構成されるので、ＥＣＵ１のＲＯＭ１１の容量を節約することができる。
【００５６】
図６は、イベント管理部８０により作成されるアプリケーションイベント管理情報２６の内容例を示す説明図である。図６に示すように、ＣＰＵ１０は、入力処理の後、イベント管理部８０の機能により、アプリケーションイベントテーブル２４を参照し、且つ入力処理部７０により通知される各イベントから、各アプリケーション関数Ａ，Ｂ，Ｃ，…毎の起動すべきか否かのフラグのリストを作成してＲＡＭ１２に記憶する。
【００５７】
図６のアプリケーションイベント管理情報２６の例では、例えば入力処理部７０から、ＳＷ−ＡがＯＮとなったイベント「ＳＷ−Ａ：ＯＮ」、ＳＷ−ＢがＯＦＦとなったイベント「ＳＷ−Ｂ：ＯＦＦ」が通知されたとする。このとき、ＳＷ−Ｃは変わらずＯＦＦであってイベント通知はされなかったとする。この場合、イベント管理部８０は、通知されたイベントに対応するアプリケーションイベントテーブル２４内の項目を選択する。即ち各スイッチ２のＯＮ／ＯＦＦのいずれかの行の「１／０」の列を抽出し、アプリケーション関数毎に論理和をとる。つまり、イベント管理部８０は、イベント「ＳＷ−Ａ：ＯＮ」に対応する列（１，１，１，０，１，０，０）を抽出し、イベント「ＳＷ−Ｂ：ＯＦＦ」に対応する列（１，１，０，１，０，１，０）を抽出する（図５中の破線）。イベント管理部８０は、抽出した（１，１，１，０，１，０，０）と（１，１，０，１，０，１，０）との論理和をとって（１，１，１，１，１，１，０）を得、これを、イベントによって起動すべき（フラグ「１」）とされたアプリケーション関数Ａ，Ｂ，Ｃ，…のリストとする。
【００５８】
図７は、イベント管理部８０により作成されるアプリケーション起動要求情報２８の内容例を示す説明図である。図７に示すように、ＣＰＵ１０はイベント管理部８０の機能により、アプリケーション関数Ａ，Ｂ，Ｃ，…を起動すべきか否かのフラグのリストを作成してＲＡＭ１２に記憶する。
【００５９】
図７のアプリケーション起動要求情報２８の例では、アプリケーション部５０の機能により、アプリケーション関数Ａ及びアプリケーション関数Ｃを起動すべき（フラグ「１」）としてリストが作成されている。
【００６０】
図８は、イベント管理部８０により作成される起動すべきアプリケーション関数のリスト（アプリケーション起動関数リスト３０）の例を示す説明図である。図８に示すように、ＣＰＵ１０はイベント管理部８０の機能により、作成した入力されるイベントに基づき作成したアプリケーションイベント管理情報２６と、アプリケーション又は出力処理からの出力に基づき作成したアプリケーション起動要求情報２８との論理和をとって起動すべきアプリケーション関数のリストを作成する。
【００６１】
出力処理についてもアプリケーション同様に、ＣＰＵ１０は、記憶してある出力処理イベントテーブル２５に基づき、各情報及びリストを作成してＲＡＭ１２に記憶する処理を行なう。図９は、出力処理イベントテーブル２５の内容例を示す説明図である。図９に示すように、アプリケーション同様に、必要な出力処理を起動させるための条件が出力処理イベントテーブル２５として記憶してある。出力処理イベントテーブル２５は、出力プログラム１５，１５，…に基づく出力処理を起動させるための出力処理関数Ａ，Ｂ，Ｃ…夫々につき、各アプリケーションによる演算結果により得られる各負荷への出力要求の情報との関係が含まれる。当該関係の有無はアプリケーションイベントテーブル２４と同様、「１／０」で示されており、「１」で出力処理関数を呼び出し、「０」では呼び出さない。また、出力処理イベントテーブル２５では、各出力処理関数Ａ，Ｂ，Ｃ，…の実行順序が規定されている。実行順序の規定は必須ではなく、出力処理イベントテーブル２５は実行順序を含まなくてもよい。
【００６２】
図９の例では、例えば出力処理関数Ａは、各アプリケーションによる演算処理の結果、例えば負荷ＡをＯＮ、負荷ＢをＯＮ、及び負荷ＣをＯＮとすることが負荷出力要求として得られた場合に起動すべきと規定されている。
【００６３】
図１０は、出力処理イベント管理情報２７の内容例を示す説明図である。ＣＰＵ１０は、イベント管理部８０の機能により、各アプリケーション５１，５２，５３の演算結果により得られる出力処理要求とイベントと出力処理イベントテーブル２５とを比較し、各出力処理関数Ａ，Ｂ，Ｃ，…毎の起動すべきか否かのフラグのリスト（出力処理イベント管理情報２７）を作成してＲＡＭ１２に記憶する。
【００６４】
図１０の例では、イベント管理部８０の機能によりＣＰＵ１０は、負荷Ａ及び負荷ＣをＯＮとする出力処理要求と、出力処理イベントテーブル２５とを比較し、各出力処理要求の列を抽出して出力処理関数毎に論理和をとる。論理和をとった結果を、アプリケーションによる演算結果から得られた出力処理要求に基づき起動すべきとされた出力処理関数Ａ，Ｂ，Ｃのリストとする。
【００６５】
図１１は、出力処理起動要求情報２９の内容例を示す説明図である。ＣＰＵ１０はイベント管理部８０の機能により、出力処理自身による要求により出力処理関数Ａ，Ｂ，Ｃ，…を起動すべきか否かのフラグのリストを作成し、ＲＡＭ１２に記憶する。出力処理部６０の機能により、各出力処理６１，６２，６３内で、起動要求をイベント管理部８０へ出力する。イベント管理部８０は、出力処理部６０からの起動要求に基づき起動すべき出力処理のリストである起動要求情報を作成する。図１１の出力処理起動要求情報２９の例では、出力処理関数Ａ、出力処理関数Ｆ及び出力処理関数Ｇを起動すべき（フラグ「１」）としてリストが作成されている。
【００６６】
イベント管理部８０は、出力処理についても、アプリケーション５１，５２，５３から得られる情報に基づき作成したリストと、出力処理部６０からの起動要求により作成したリストとの論理和をとり、実行すべき出力処理のリストを作成する。
【００６７】
図１２は、起動すべき出力処理関数のリスト（出力処理起動関数リスト３１）の例を示す説明図である。図１２に示すように、ＣＰＵ１０はイベント管理部８０の機能により、作成した出力処理イベント管理情報２７と、作成した出力処理起動要求情報２９との論理和をとって起動すべき出力処理関数のリストを作成する。なお図１２の例は、図１０に示した起動すべき出力処理関数のリストと、図１１に示した起動すべき出力処理関数のリストとの論理和となっている。
【００６８】
以上のように各種情報を作成、参照してＣＰＵ１０が制御対象を制御する過程を、フローチャートを参照して説明する。図１３乃至図１５は、本実施の形態におけるＥＣＵ１のＣＰＵ１０により実行される処理手順の一例を示すフローチャートである。
【００６９】
まず、ＣＰＵ１０は、アプリケーションイベント管理情報２６を初期化（起動すべきか否かのフラグを全て「０」）する（ステップＳ１）。ＣＰＵ１０は、入力処理部７０による機能を起動し、入力処理を実行する（ステップＳ２）。
【００７０】
入力処理部７０による入力処理の内容は以下である。
図１６は、入力処理部７０による入力処理の手順の一例を示すフローチャートである。図１３乃至図１５のフローチャートに示す処理手順の内、ステップＳ２の詳細に対応する。ＣＰＵ１０は、入力処理部７０の機能により、入力対象の毎に、入出力部１３を介して各スイッチ２の状態を入力してアプリケーションイベントを検知し（ステップＳ２０１）、イベントの有無を判断する（ステップＳ２０２）。ＣＰＵ１０は、検知したイベントはないと判断した場合（Ｓ２０２：ＮＯ）、図１３乃至１５のフローチャートに示したステップＳ３へ処理を戻す。ＣＰＵ１０は、検知したイベントはありと判断した場合（Ｓ２０２：ＹＥＳ）、検知したイベントをイベント管理部８０へ通知し（ステップＳ２０３）、ステップＳ３へ処理を戻す。ここで入力処理部７０による入力処理は完了する。
【００７１】
図１３乃至図１５のフローチャートに戻って説明を続ける。
次にＣＰＵ１０は、イベント管理部８０としての機能により、これまでに作成していたアプリケーション起動関数リスト３０を初期化（起動すべきか否かのフラグを全て「０」）する（ステップＳ３）。ＣＰＵ１０は、入力処理部７０から通知されたイベントに基づき、図６に示すようなアプリケーションイベント管理情報２６を作成する（ステップＳ４）。
【００７２】
ＣＰＵ１０はイベント管理部８０としての機能により、存在するアプリケーション関数Ａ，Ｂ，Ｃ，…から１つずつ選択する（ステップＳ５）。ＣＰＵ１０はまず、既に作成されてあるアプリケーション起動要求情報２８を参照し（ステップＳ６）、選択しているアプリケーション関数への起動要求の有無を判断する（ステップＳ７）。具体的にはＣＰＵ１０は、起動すべきとしてフラグが「１」であるか否かを判断する。ＣＰＵ１０は、起動要求有り（フラグ「１」）と判断した場合（Ｓ７：ＹＥＳ）、選択したアプリケーション関数を起動すべき（フラグ「１」）と確定する（ステップＳ８）。ＣＰＵ１０は、ステップＳ８にて起動要求無し（フラグ「０」）と判断した場合（Ｓ７：ＮＯ）、アプリケーションイベント管理情報２６を参照し（ステップＳ９）、選択しているアプリケーション関数に関するイベント発生の有無を判断する（ステップＳ１０）。ここでもＣＰＵ１０は具体的には、ステップＳ４で作成されたアプリケーションイベント管理情報２６におけるアプリケーション関数Ａ，Ｂ，Ｃ毎のフラグが「１」であるか否かを判断する。ＣＰＵ１０は、イベント発生有りと判断した場合（Ｓ１０：ＹＥＳ）、選択したアプリケーション関数を起動すべきと確定する（Ｓ８）。ＣＰＵ１０は、ステップＳ１０でイベント発生無しと判断した場合（Ｓ１０：ＮＯ）、選択したアプリケーション関数を起動する必要はないとし、フラグ「０」のまま処理をステップＳ１１へ進める。
【００７３】
ＣＰＵ１０は、全てのアプリケーション関数Ａ，Ｂ，Ｃ，…を選択して処理を行なったか否かを判断する（ステップＳ１１）。ＣＰＵ１０は、全てを選択していないと判断した場合（Ｓ１１：ＮＯ）、処理をステップＳ５へ戻し、他のアプリケーション関数について処理を継続する。ＣＰＵ１０は、全てを選択したと判断した場合（Ｓ１１：ＹＥＳ）、処理を次へ進める。
【００７４】
ステップＳ５〜Ｓ１１の処理により、アプリケーションイベント管理情報２６（図６）とアプリケーション起動要求情報２８（図７）との論理和がとられ、図８に示したアプリケーション起動関数リスト３０が作成される（ステップＳ１２）。
【００７５】
次にＣＰＵ１０は、アプリケーション部５０からのアプリケーション起動要求情報２８を初期化しておく（ステップＳ１３）。以後起動されるアプリケーション５１，５２，５３から再度起動要求が出力されるからである。
【００７６】
ＣＰＵ１０は、システム管理部９０としての機能により、存在するアプリケーション関数Ａ，Ｂ，Ｃ，…から１つずつ選択する（ステップＳ１４）。ＣＰＵ１０は、ステップＳ７〜Ｓ１２の処理により作成したアプリケーション起動関数リスト３０を参照し（ステップＳ１５）、選択したアプリケーション関数を起動すべきか否かを判断する（ステップＳ１６）。具体的にはＣＰＵ１０は、確定されたフラグが「１」（起動すべき）であるか否かを判断する。ＣＰＵ１０は、選択したアプリケーション関数を起動すべきでない（フラグ「０」）と判断した場合（Ｓ１６：ＮＯ）、そのまま処理をステップＳ１８へ進める。ＣＰＵ１０は、選択したアプリケーション関数を起動すべき（フラグ「１」）と判断した場合（Ｓ１６：ＹＥＳ）、対応するアプリケーション関数を起動してアプリケーション処理を実行する（ステップＳ１７）。
【００７７】
このとき、ＣＰＵ１０は、アプリケーション部５０の機能により、各アプリケーション処理を実行する。図１７は、アプリケーション部５０によるアプリケーション処理の手順の一例を示すフローチャートである。
【００７８】
ＣＰＵ１０は、アプリケーション部５０の機能により、起動されたアプリケーションの処理を実行する（ステップＳ３０１）。ＣＰＵ１０は、実行したアプリケーションによる次回の起動要求の有無を判断する（ステップＳ３０２）。ＣＰＵ１０は、次回の起動要求無しと判断した場合（Ｓ３０２：ＮＯ）、処理をステップＳ３０４へ進める。ＣＰＵ１０は、次回の起動要求有りと判断した場合（Ｓ３０２：ＹＥＳ）、アプリケーション起動要求をイベント管理部８０へ通知し（ステップＳ３０３）、処理をステップＳ３０４へ進める。
【００７９】
ＣＰＵ１０は、実行したアプリケーションによる演算の結果、負荷出力要求の有無を判断する（ステップＳ３０４）。ＣＰＵ１０は、負荷出力要求無しと判断した場合（Ｓ３０４：ＮＯ）、アプリケーション処理を終了し、図１３乃至１５のフローチャートに示したステップＳ１８へ処理を戻す。ＣＰＵ１０は、負荷出力要求有りと判断した場合（Ｓ３０４：ＹＥＳ）、負荷出力要求をイベント管理部８０へ通知し（ステップＳ３０５）、アプリケーション処理を終了し、図１３乃至１５のフローチャートに示したステップＳ１８へ処理を戻す。このように、アプリケーションが起動されると、各アプリケーション５１，５２，５３について、図１７に示した処理が実行される。
【００８０】
図１３乃至図１５のフローチャートに戻って説明を続ける。
ＣＰＵ１０は、全てのアプリケーション関数Ａ，Ｂ，Ｃ，…を選択して処理を行なったか否かを判断する（ステップＳ１８）。ＣＰＵ１０は、全てを選択していないと判断した場合（Ｓ１８：ＮＯ）、処理をステップＳ１４へ戻し、他のアプリケーション関数について処理を継続する。ＣＰＵ１０は、全てを選択したと判断した場合（Ｓ１８：ＹＥＳ）、処理を次のステップＳ１９へ進める。
【００８１】
ＣＰＵ１０は、イベント管理部８０としての機能により、実行されたアプリケーション５１，５２，５３からのアプリケーション起動要求を受け付け（ステップＳ１９）、図７に示すようなアプリケーション起動要求情報２８を作成する（ステップＳ２０）。重複するアプリケーション関数への起動要求は論理和をとって１つの起動要求とする。
【００８２】
次にＣＰＵ１０は、イベント管理部８０としての機能により、アプリケーション５１，５２，５３からの負荷出力要求を受け付ける（ステップＳ２１）。ＣＰＵ１０は受け付けた負荷出力要求について、図９に示した出力処理イベントテーブル２５を参照し（ステップＳ２２）、図１０に示したような出力処理イベント管理情報２７を作成する（ステップＳ２３）。
【００８３】
次にＣＰＵ１０は、存在する出力処理６１，６２，６３，…から１つずつ選択する（ステップＳ２４）。ＣＰＵ１０はまず、既に作成されてある出力処理自身からの出力処理起動要求情報２９を参照し（ステップＳ２５）、選択している出力処理への起動要求の有無を判断する（ステップＳ２６）。具体的にはＣＰＵ１０は、実行すべきとしてフラグが「１」であるか否かを判断する。ＣＰＵ１０は、起動要求有り（フラグ「１」）と判断した場合（Ｓ２６：ＹＥＳ）、選択した出力処理を実行すべき（フラグ「１」）と確定する（ステップＳ２７）。ＣＰＵ１０は、ステップＳ２６にて起動要求無し（フラグ「０」）と判断した場合（Ｓ２６：ＮＯ）、出力処理イベント管理情報２１を参照し（ステップＳ２８）、選択している出力処理が出力すべき情報の有無を判断する（ステップＳ２９）。ここでもＣＰＵ１０は具体的には、出力処理関数毎の関連フラグが「１」であるか否かを判断する。ＣＰＵ１０は、出力すべき情報有りと判断した場合（Ｓ２９：ＹＥＳ）、選択した出力処理を実行すべきと確定する（Ｓ２７）。ＣＰＵ１０は、ステップＳ２９で出力すべき情報無しと判断した場合（Ｓ２９：ＮＯ）、選択した出力処理を実行する必要はないとし、フラグ「０」のまま処理をステップＳ３０へ進める。
【００８４】
ＣＰＵ１０は、全ての出力処理６１，６２，６３を選択して処理を行なったか否かを判断する（ステップＳ３０）。ＣＰＵ１０は、全てを選択していないと判断した場合（Ｓ３０：ＮＯ）、処理をステップＳ２４へ戻し、他の出力処理について判断する。ＣＰＵ１０は、全てを選択したと判断した場合（Ｓ３０：ＹＥＳ）、処理を次へ進める。
【００８５】
ステップＳ２４〜Ｓ３０の処理により、出力処理イベント管理情報２７（図１０）と出力処理起動要求情報２９（図１１）との論理和がとられ、図１２に示した出力処理起動関数リスト３１が作成される（ステップＳ３１）。
【００８６】
次にＣＰＵ１０は、出力処理部６０からの出力処理起動要求情報２９を初期化しておく（ステップＳ３２）。以後実行される出力処理６１，６２，６３から再度起動要求が出力されるからである。このとき、アプリケーション部５０からの起動要求は保存されておくべきである。
【００８７】
ＣＰＵ１０は、存在する出力処理（６１，６２，６３）から１つずつ選択する（ステップＳ３３）。ＣＰＵ１０は、ステップＳ２４〜Ｓ３０の処理により作成した出力処理起動関数リストを参照し（ステップＳ３４）、選択した出力処理を実行すべきか否かを判断する（ステップＳ３５）。具体的にはＣＰＵ１０は、確定されたフラグが「１」（実行すべき）であるか否かを判断する。ＣＰＵ１０は、選択した出力処理を実行すべきでない（フラグ「０」）と判断した場合（Ｓ３５：ＮＯ）、そのまま処理をステップＳ３６へ進める。ＣＰＵ１０は、選択した出力処理を実行すべき（フラグ「１」）と判断した場合（Ｓ３５：ＹＥＳ）、対応する出力処理を実行する（ステップＳ３６）。
【００８８】
このとき、ＣＰＵ１０は、出力処理部６０の機能により、各出力処理を実行する。図１８は、出力処理部６０による出力処理の手順の一例を示すフローチャートである。
【００８９】
ＣＰＵ１０は、出力処理部６０の機能により、起動された出力処理を実行する（ステップＳ４０１）。ＣＰＵ１０は、実行した出力処理による次回の起動要求の有無を判断する（ステップＳ４０２）。ＣＰＵ１０は、次回の起動要求無しと判断した場合（Ｓ４０２：ＮＯ）、出力処理を終了し、図１３乃至１５のフローチャートに示したステップＳ３７へ処理を戻す。ＣＰＵ１０は、次回の起動要求有りと判断した場合（Ｓ４０２：ＹＥＳ）、出力処理起動要求をイベント管理部８０へ通知し（ステップＳ４０３）、出力処理を終了し、図１３乃至１５のフローチャートに示したステップＳ３７へ処理を戻す。このように、出力処理が起動されると、各出力処理６１，６２，６３について、図１８に示した処理が実行される。
【００９０】
図１３乃至図１５のフローチャートに戻って説明を続ける。
ＣＰＵ１０は、全ての出力処理を選択して処理を行なったか否かを判断する（ステップＳ３７）。ＣＰＵ１０は、全てを選択していないと判断した場合（Ｓ３７：ＮＯ）、処理をステップＳ３３へ戻し、他の出力処理について処理を継続する。ＣＰＵ１０は、全てを選択したと判断した場合（Ｓ３７：ＹＥＳ）、処理を次のステップＳ３８へ進める。
【００９１】
ＣＰＵ１０は、イベント管理部８０としての機能により、実行された出力処理６１，６２，６３からの出力処理起動要求を受け付け（ステップＳ３８）、出力処理起動要求情報２９を作成する（ステップＳ３９）。重複する出力処理への起動要求は論理和をとって１つの起動要求とする。
【００９２】
ＣＰＵ１０は出力処理起動要求情報を作成すると、ステップＳ１へ処理を戻し、入力処理部７０による処理、アプリケーション部５０によるアプリケーション実行処理、出力処理を再度繰り返す。図１３乃至図１５のフローチャート示した処理は、ＥＣＵ１の電源が落とされるまで繰り返される。このような処理を行なうことにより、アプリケーション関数Ａ，Ｂ，Ｃ，…の起動、及び出力処理の実行が効率的となり、相互の依存関係が無くなるので、入力プログラム１７，１７，…、アプリケーションプログラム１５，１５，…、及び出力プログラム１６間の依存関係が薄まり、開発効率を向上させることができる
【００９３】
以上の実施の形態では、本発明に係る制御装置を車両に搭載されてボディ系の制御を行なうＥＣＵに適用する例を挙げて説明したが、これに限らず、本発明は入力される情報に応じて演算処理（アプリケーション処理）を行ない、出力を行なう装置に広く適用される。
【００９４】
（実施の形態２）
図１９は、実施の形態２におけるＥＣＵ１の構成を示すブロック図である。実施の形態２に係るＥＣＵ１は、ＣＰＵ１０、ＲＯＭ１１、ＲＡＭ１２、記憶部１３及び入出力部１４と、クロック信号発生部２１５とを備えている。クロック信号発生部２１５は、ＣＰＵ１０を動作させるためのクロック信号を生成して出力する。またクロック信号発生部２１５は、低速クロック又は高速クロックの２段階で、出力するクロック信号の周波数を切り替えることができ、ＣＰＵ１０からの指示に従って周波数の切り替えを行う。クロック信号発生部２１５は、例えば水晶振動子などを用いた発振回路が発生したクロック信号を分周回路などで分周することにより所望の周波数のクロック信号を出力する構成とすることができ、分周回路によって２種の周波数のクロック信号を生成し、選択回路によって高速クロック又は低速クロックのいずれかを出力する構成とすることができる。またクロック信号発生部２１５は、通常は低速クロック信号を出力しており、ＣＰＵ１０から高速クロックへの切替指示が与えられた場合に、その後に低速クロックへの切替指示が与えられるまでの期間に亘って、高速クロックを出力する。
【００９５】
また実施の形態２に係るＥＣＵ１のＲＯＭ１１には、制御プログラム１Ｐ及びイベントテーブル２０と共に、負荷テーブル２２１が予め記憶されている。負荷テーブル２２１には、アプリケーションプログラム１５，１５…及び出力プログラム１６，１６…等が行う処理に対して、この処理の負荷量が記憶されている。
【００９６】
図２０は、実施の形態２に係るＥＣＵ１のＣＰＵ１０により実現される機能を示す機能ブロック図である。ＣＰＵ１０は、システム管理プログラム１９に基づいてシステム管理部９０として機能する。システム管理部９０の機能は、イベント管理情報２１及び起動要求情報２２を参照して、実行すべきアプリケーションプログラム又は出力処理のリストを作成し、当該リストに従って起動させるものである。また更に、実施の形態２のシステム管理部９０は、負荷テーブル２２１を参照して、実行すべき一又は複数のアプリケーションプログラム又は出力処理の合計負荷量を算出し、算出した合計負荷量が閾値を超える場合に、クロック信号発生部２１５に対して高速クロックへの切り替えを指示する機能を有している。
【００９７】
負荷テーブル２２１は、アプリケーションプログラム１５，１５…に関する負荷量が記憶されたアプリケーション処理負荷テーブルと、出力プログラム１６，１６…に関する負荷量が記憶された出力処理負荷テーブルとを含んで構成されている。図２１は、アプリケーション処理負荷テーブルの内容例を示す説明図であり、図２２は、出力処理負荷テーブルの内容例を示す説明図である。
【００９８】
負荷テーブル２２１のアプリケーション処理負荷テーブルには、アプリケーションプログラム１５，１５…に基づき実行される各アプリケーションを起動させるためのアプリケーション関数Ａ，Ｂ，Ｃ…のそれぞれにつき、この関数を実行した際の負荷量が記憶されている。アプリケーション関数毎の負荷量は、例えばこのアプリケーション関数をＣＰＵ１０が実行するのに必要とされる処理時間又はクロック数等の平均値又は最大値等を用いることができる。各アプリケーション関数の負荷量は、このアプリケーションプログラム１５の設計者が予め決定することができる。
【００９９】
同様に、負荷テーブル２２１の出力処理負荷テーブルには、出力プログラム１６，１６…に基づき実行される出力処理を起動させるための出力処理関数Ａ，Ｂ，Ｃ…のそれぞれにつき、この関数を実行した際の負荷量が記憶されている。
【０１００】
ＣＰＵ１０は、イベント管理部８０の機能によってアプリケーション起動関数リスト３０を作成した後、システム管理部９０の機能により、アプリケーション処理負荷テーブルを参照し、アプリケーション起動関数リスト３０にて起動すべきとされた各アプリケーション関数について処理の負荷量を取得し、取得した負荷量の合計量を算出する。次いでＣＰＵ１０は、算出した合計負荷量が予め定められた閾値を超えた場合、クロック信号発生部２１５に対して高速クロック信号への切替指示を与える。これによりＣＰＵ１０は、負荷が大きい処理を高速に処理することができる。
【０１０１】
またＣＰＵ１０は、合計負荷量が閾値を超えない場合には、クロック信号発生部２１５に対する切替指示は与えない。クロック信号発生部２１５は、通常は低速クロック信号を出力しているため、合計負荷量が閾値を超えない処理についてはＣＰＵ１０が低速クロック信号による処理を行う。これによりＣＰＵ１０は、負荷が小さい処理を低速処理し、消費電力を低減することができる。
【０１０２】
同様に、ＣＰＵ１０は、イベント管理部８０の機能によって出力処理起動関数リスト３１を作成した後、システム管理部９０の機能により、出力処理負荷テーブルを参照し、出力処理起動関数リスト３１にて起動すべきとされた各出力処理の負荷量を取得し、取得した負荷量の合計量を算出する。次いでＣＰＵ１０は、算出した合計負荷量が予め定められた閾値を超えた場合、クロック信号発生部２１５に対して高速クロック信号への切替指示を与える。またＣＰＵ１０は、合計負荷量が閾値を超えない場合には、高速クロック信号への切替命令を与えず、低速クロック信号による処理を行う。
【０１０３】
以上のように起動すべき処理の負荷量に応じてクロック信号の周波数切替を行う過程を、フローチャートを参照して説明する。図２３は、アプリケーション処理を行う際のクロック信号切替処理の手順を示すフローチャートであり、図２４は、出力処理を行う際のクロック信号切替処理の手順を示すフローチャートである。
【０１０４】
図２３に示すクロック信号切替処理は、実施の形態１において図１３〜図１５のフローチャートで示した処理のステップＳ１２及びＳ１３の間に行われる。ＣＰＵ１０は、システム管理部９０の機能により、ステップＳ１２にて作成されたアプリケーション起動関数リストにて起動すべきとされた各アプリケーション関数の負荷量を、アプリケーション処理負荷テーブルを参照して取得する（ステップＳ５０１）。
【０１０５】
次いでＣＰＵ１０は、取得した各アプリケーション関数の負荷量を加算することによって合計負荷量を算出し（ステップＳ５０２）、算出した合計負荷量が予め定められた閾値を超えるか否かを判定する（ステップＳ５０３）。合計負荷量が閾値を超える場合（Ｓ５０３：ＹＥＳ）、ＣＰＵ１０は、クロック信号発生部２１５に対して高速クロック信号への切替指示を与え（ステップＳ５０４）、クロック信号切替処理を終了する。また合計負荷量が閾値を超えない場合（Ｓ５０３：ＮＯ）、ＣＰＵ１０は、クロック信号の切り替えを行うことなく、クロック信号切替処理を終了する。
【０１０６】
なお、ステップＳ５０３にて高速クロック信号への切り替えを行った場合、ＣＰＵ１０は、アプリケーション処理の終了後に（例えば図１４のステップＳ１８及びＳ１９の間に）、クロック信号発生部２１５に対して低速クロック信号への切替指示を与え、以降の処理を低速クロック信号による低速処理で行う。
【０１０７】
また、図２４に示すクロック信号切替処理は、実施の形態１において図１３〜図１４のフローチャートで示した処理のステップＳ３１及びＳ３２の間に行われる。ＣＰＵ１０は、システム管理部９０の機能により、ステップＳ３１にて作成された出力処理起動関数リストにて起動すべきとされた各出力処理関数の負荷量を、出力処理負荷テーブルを参照して取得する（ステップＳ６０１）。
【０１０８】
次いでＣＰＵ１０は、取得した各出力処理関数の負荷量を加算することによって合計負荷量を算出し（ステップＳ６０２）、算出した合計負荷量が予め定められた閾値を超えるか否かを判定する（ステップＳ６０３）。合計負荷量が閾値を超える場合（Ｓ６０３：ＹＥＳ）、ＣＰＵ１０は、クロック信号発生部２１５に対して高速クロック信号への切替指示を与え（ステップＳ６０４）、クロック信号切替処理を終了する。また合計負荷量が閾値を超えない場合（Ｓ６０３：ＮＯ）、ＣＰＵ１０は、クロック信号の切り替えを行うことなく、クロック信号切替処理を終了する。
【０１０９】
なお、ステップＳ６０３にて高速クロック信号への切り替えを行った場合、ＣＰＵ１０は、出力処理の終了後に（例えば図１５のステップＳ３８及びＳ３９の間に）、クロック信号発生部２１５に対して低速クロック信号への切替指示を与え、以降の処理を低速クロック信号による低速処理で行う。
【０１１０】
以上の構成の実施の形態２に係るＥＣＵ１は、実行すべきと判断したアプリケーション処理又は出力処理について、アプリケーション処理負荷テーブルまたは出力処理負荷テーブルから処理の負荷量をそれぞれ取得し、合計負荷量が閾値を超える場合に高速クロック信号に基づく高速処理を行うと共に、合計負荷量が閾値を超えない場合には低速クロック信号に基づく低速処理を行う。これにより実施の形態２に係るＥＣＵ１は、通常は低速処理を行って消費電力を低減すると共に、処理の負荷が大きい場合にのみ高速処理を行って処理を確実に実行することができる。
【０１１１】
なお、本実施の形態においては、算出した合計負荷量に応じてクロック信号を高速及び低速の２段階で切り替える構成としたが、これに限るものではなく、合計負荷量に応じてクロック信号を多段階で切り替える構成としてもよい。
また、実施の形態２に係る制御装置（ＥＣＵ１）及びコンピュータプログラム（制御部プログラム１Ｐ）等のその他の構成は、実施の形態１に係る制御装置及びコンピュータプログラム等の構成と同様であるため、同様の箇所には同じ符号を付して詳細な説明を省略する。
【０１１２】
なお、開示された実施の形態は、全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上述の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内での全ての変更が含まれることが意図される。
【符号の説明】
【０１１３】
１  ＥＣＵ（制御装置）
１０  ＣＰＵ（制御装置）
１Ｐ  制御プログラム
１５  アプリケーションプログラム
１６  出力プログラム
１７  入力プログラム
２０  イベントテーブル（テーブル）
２１  イベント管理情報
２２  起動要求情報
２４  アプリケーションイベントテーブル（テーブル）
２５  出力処理イベントテーブル（テーブル）
２６  アプリケーションイベント管理情報
２７  出力処理イベント管理情報
２８  アプリケーション起動要求情報
２９  出力処理起動要求情報
３０  アプリケーション起動関数リスト
３１  出力処理起動関数リスト
５０  アプリケーション部
６０  出力処理部
７０  入力処理部
８０  イベント管理部
９０  システム管理部
２１５  クロック信号発生部
２２１  負荷テーブル
【図１】
2012048703.tif 000003
【図２】
2012048703.tif 000004
【図３】
2012048703.tif 000005
【図４】
2012048703.tif 000006
【図５】
2012048703.tif 000007
【図６】
2012048703.tif 000008
【図７】
2012048703.tif 000009
【図８】
2012048703.tif 000010
【図９】
2012048703.tif 000011
【図１０】
2012048703.tif 000012
【図１１】
2012048703.tif 000013
【図１２】
2012048703.tif 000014
【図１３】
2012048703.tif 000015
【図１４】
2012048703.tif 000016
【図１５】
2012048703.tif 000017
【図１６】
2012048703.tif 000018
【図１７】
2012048703.tif 000019
【図１８】
2012048703.tif 000020
【図１９】
2012048703.tif 000021
【図２０】
2012048703.tif 000022
【図２１】
2012048703.tif 000023
【図２２】
2012048703.tif 000024
【図２３】
2012048703.tif 000025
【図２４】
2012048703.tif 000026