(57)【要約】【課題】制御プログラムに起動主処理を行ってから当該制御プログラムを実行する場合に、制御プログラムが実行可能になるまでの時間の増大を抑えることが可能な電子制御装置を得る。【解決手段】電子制御装置は、制御プログラムに含まれる複数の処理部分のそれぞれに対して起動主処理を行い、起動主処理が完了した処理部分に含まれる処理単位の開始アドレスを無効から有効にする切り替えを、実行可能になるまでの起動時間の要求が短い処理部分の順に処理部分起動動作を実行しながら、有効に切り替わっている開始アドレスに対応する処理単位を実行する処理単位実行動作を実行するように構成されている。【選択図】図１
2020077093.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理部分を含んで構成される制御プログラムを記憶する第１の記憶部と、
前記複数の処理部分のそれぞれに含まれる１以上の処理単位の開始アドレスを要素とする開始アドレス配列を記憶する第２の記憶部と、
前記制御プログラムを実行する制御部と、
を備え、
前記複数の処理部分は、それぞれの前記処理部分が実行可能になるまでの起動時間の要求が短い順に配置され、
前記制御部は、
前記複数の処理部分のそれぞれに対して起動主処理を行い、前記起動主処理が完了した前記処理部分に含まれる前記処理単位の前記開始アドレスを無効から有効にする切り替えを、前記処理部分の配置順に行う処理部分起動動作を実行しながら、
前記開始アドレス配列を参照して前記有効に切り替わっている前記開始アドレスの前記処理単位を実行する処理単位実行動作を実行する
電子制御装置。
【請求項２】
前記制御部は、前記処理部分起動動作と前記処理単位実行動作を並列に実行する
請求項１に記載の電子制御装置。
【請求項３】
前記制御部は、前記処理部分起動動作と前記処理単位実行動作を並行して実行する
請求項１に記載の電子制御装置。
【請求項４】
前記第２の記憶部は、前記開始アドレス配列の開始アドレスである開始アドレス配列アドレスを更に記憶し、
前記制御部は、
前記処理部分起動動作を前記複数の処理部分の全てに対して実行した場合に、前記開始アドレス配列アドレスを有効から無効に切り替え、
前記開始アドレス配列アドレスが有効である場合には、前記開始アドレス配列を参照して前記有効に切り替わっている前記開始アドレスの前記処理単位を実行し、
前記開始アドレス配列アドレスが無効である場合には、前記開始アドレス配列の参照をやめて、前記処理単位を実行する
請求項１から請求項３のいずれか一項に記載の電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラムを実行する電子制御装置に関する。
【背景技術】
【０００２】
モータの駆動に使用されるモータ駆動用インバータ、または光源の発光駆動制御に使用される照明駆動用コンバータなどを駆動させることで、制御対象を制御する処理を行うためにＥＣＵ（Electronic Control Unit）と呼ばれる電子制御装置が使用される。
【０００３】
ＥＣＵは、制御対象を制御する処理のほかに、各種通信線を介して、外部機器との情報の交換または複数の制御対象間の協調動作などを行うことが可能に構成されている。
【０００４】
近年、ＥＣＵに対するセキュリティ対策が進められている。具体的には、制御プログラムの実行による各部の制御と通信の実行といったＥＣＵ本来の処理を開始する前に、制御プログラムに対して正当性を検証する処理が起動主処理として行われる。このような起動主処理が行われることで、制御プログラムが改ざんされていないかといった検証をすることが可能となる。
【０００５】
また、ＥＣＵの制御について各種の要求が増加して制御プログラムは大規模化している。従って、制御プログラムの規模に応じて、上述した制御プログラムの正当性を検証する時間が増大する傾向にある。
【０００６】
そのため、上述の制御プログラムの起動に要求される時間、すなわち、制御プログラムの起動時間を確保することが困難であるという課題がある。これに対して、特許文献１には、起動時間の短縮についての技術が開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１５−１７１００８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上述の特許文献１では、複数のＣＰＵ(Central Processing Unit)を備えたシステムにおいて、特定のＣＰＵのみが他のＣＰＵの分も含めた制御プログラムの正当性を検証する処理を行うことで、システム全体の起動時間を抑える手法が提案されている。
【０００９】
しかしながら、ＥＣＵにおいては、制御プログラムの起動時間は短い。従って、特許文献１に記載の手法をＥＣＵに適用したとしても、起動主処理の完了待ちとなり、起動時間の要求を満足できる効果は期待できない。
【００１０】
本発明は、上記のような課題を解決するためになされたものであり、制御プログラムに起動主処理を行ってから当該制御プログラムを実行する場合に、制御プログラムが実行可能になるまでの時間の増大を抑えることが可能な電子制御装置を得ることを目的とする。
【課題を解決するための手段】
【００１１】
本発明に係る電子制御装置は、複数の処理部分を含んで構成される制御プログラムを記憶する第１の記憶部と、複数の処理部分のそれぞれに含まれる１以上の処理単位の開始アドレスを要素とする開始アドレス配列を記憶する第２の記憶部と、制御プログラムを実行する制御部と、を備え、複数の処理部分は、それぞれの処理部分が実行可能になるまでの起動時間の要求が短い順に配置され、制御部は、複数の処理部分のそれぞれに対して起動主処理を行い、起動主処理が完了した処理部分に含まれる処理単位の開始アドレスを無効から有効にする切り替えを、処理部分の配置順に行う処理部分起動動作を実行しながら、開始アドレス配列を参照して有効に切り替わっている開始アドレスの処理単位を実行する処理単位実行動作を実行するものである。
【発明の効果】
【００１２】
本発明によれば、制御プログラムに対して起動主処理を行ってから当該制御プログラムを実行する場合に、制御プログラムが実行可能になるまでの時間の増大を抑えることが可能な電子制御装置を得ることができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施の形態１に係る電子制御装置の構成の一例を示す構成図である。
【図２】本発明の実施の形態１におけるＲＡＭに格納される起動処理変数の内容を例示した説明図である。
【図３】本発明の実施の形態１におけるＲＯＭに格納される起動処理と制御プログラムの内容を例示した説明図である。
【図４】本発明の実施の形態１における起動主処理の処理手順を示すフローチャートである。
【図５】本発明の実施の形態１において制御プログラムを実行中に別の処理単位を実行する際の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、本発明の電子制御装置の実施の形態につき、図面を用いて説明する。なお、全ての図において、同一部分には、同一符号を付している。
【００１５】
実施の形態１．
図１は、本発明の実施の形態１に係る電子制御装置の構成の一例を示す構成図である。
【００１６】
なお、図１は、この発明の実施の形態１に係る電子制御装置であるＥＣＵ１を、ＥＣＵ１により駆動されるモータ１１とともに示している。なお、ＥＣＵとは、エレクトロニックコントロールユニット（Electronic Control Unit）を意味する電子制御装置の総称である。また、ＥＣＵ１は車載電装品を制御する車載制御装置として使用されることがある。
【００１７】
図１に示すＥＣＵ１は、入力回路２、マイコン３、及び駆動回路１０を備えて構成される。なお、ＥＣＵ１は、モータ１１を制御し、外部通信線１２を介して図示されない外部の機器と通信可能に構成されている。
【００１８】
入力回路２は、外部からの信号、あるいは制御対象であるモータ１１からのセンサ信号を電圧として読み取り、読み取った電圧をマイコン３に通知する。
【００１９】
マイコン３は、ＥＣＵ１内で制御ユニットとして動作する。なお、マイコンとは、マイクロコントローラユニットまたはマイクロコンピュータの略である。また、マイコン３は、Ｉ／Ｏ(Input/Output)４、ＣＰＵ(Central Processing Unit)５、ＲＡＭ(Random Access Memory)６、ＲＯＭ(Read Only Memory)７、タイマ８、及び外部通信インタフェース９を含んで構成されている。
【００２０】
Ｉ／Ｏ４は、デジタル信号の入力と出力とを行う。具体的には、Ｉ／Ｏ４は、入力回路２で読み取られた電圧のマイコン３内への取り込み、および駆動回路１０への制御信号の出力を行う。
【００２１】
ＣＰＵ５は、各部を制御する制御部である。またＣＰＵ５は、ＲＯＭ７に記憶される起動処理７０と制御プログラム７１を実行可能である。また、ＣＰＵ５は、制御プログラム７１を実行中に割り込みが発生した場合は、その割り込みに応じた処理を実行することができる。なお、ＣＰＵ５は、Ｉ／Ｏ４、ＲＡＭ６、ＲＯＭ７、タイマ８、及び外部通信インタフェース９にアクセスすることができれば、ＣＰＵ５内で演算処理を行うコアは単一であっても複数であってもよい。また、ＣＰＵ５は、複数個のＣＰＵで構成されていてもよい。
【００２２】
ＲＡＭ６は、ＣＰＵ５からアクセス可能であり、書き替え可能な状態でデータを記憶する記憶部である。ＲＡＭ６が記憶するデータの内容については、後に詳しく説明する。ＲＯＭ７は、読み出しのみが可能な状態でデータを記憶する記憶部である。但し、ＲＯＭ７は、ＥＰＲＯＭ（Erasable Programmable Read Only Memory）のように、データを書き換え可能なものでもよい。なお、ＲＯＭ７が記憶するデータの内容については後に詳しく説明する。また、ＲＯＭ７が第１の記憶部を構成し、ＲＡＭ６が第２の記憶部を構成している。
【００２３】
タイマ８は、ＣＰＵ５からの要求に応じて各種のタイミング信号を生成する。外部通信インタフェース９は、他の機器と通信する際に使用される。外部通信インタフェース９は、ＣＡＮ（Controller Area Network）、ＣＡＮ  ＦＤ（CAN with Flexible Data-Rate）、ＦｌｅｘＲａｙ、またはＥｔｈｅｒｎｅｔ（登録商標）等の各種通信規格に基づいて、外部通信線１２を介して外部の機器と通信可能に構成されている。なお、外部通信インタフェース９は、無線通信によって外部機器と通信を行うものでもよい。
【００２４】
駆動回路１０は、マイコン３からの指示を受けてモータ駆動信号を生成し、モータ駆動信号をモータ１１に供給する。なお、本実施の形態１はＥＣＵ１がモータ１１を駆動する具体例を示しているが、ＥＣＵ１の構成はこの具体例に限定されるものではない。例えば、駆動回路１０の制御対象をＬＥＤ（Light Emitting Diode）等の光源にして、ＥＣＵ１がＬＥＤの照度制御を行うような構成であってもよい
【００２５】
次に、ＲＡＭ６について図２を参照して説明する。図２は、本発明の実施の形態１におけるＲＡＭ６に格納される起動処理変数６０の内容を例示した説明図である。
【００２６】
本実施の形態１では、ＲＡＭ６は、起動処理変数６０として、後述する制御プログラム７１の複数の処理部分のそれぞれに含まれる１以上の処理単位の開始アドレスを要素とする開始アドレス配列６１と、開始アドレス配列６１の開始アドレスである開始アドレス配列アドレス６２とを記憶する。ここで、開始アドレス配列６１は、ＲＯＭ７に記憶されている制御プログラム７１に含まれる各処理単位の先頭のアドレスを開始アドレスとして記憶する静的変数の配列である。
【００２７】
従って、開始アドレス配列６１には、各処理単位の開始アドレスが要素として含まれている。なお、開始アドレス配列６１は、処理単位が実行可能な場合は、その処理単位の先頭のアドレスを開始アドレスとして記憶し、処理単位が実行可能でない場合は無効なアドレスを記憶する。なお、処理単位については後に詳しく説明する。
【００２８】
また、開始アドレス配列アドレス６２は、開始アドレス配列６１の先頭のアドレスを開始アドレスとして示す静的変数である。なお、開始アドレス配列アドレス６２は、起動主処理７０２が全て完了するまでは有効なアドレスを記憶し、起動主処理７０２が全て完了した場合は無効なアドレスを記憶する。
【００２９】
なお、図２では省略しているが、ＲＡＭ６には、制御プログラム７１が実行を開始した際に、各処理が必要な入出力データまたは変数等を読み書きする作業領域がある。この作業領域は、上述の開始アドレス配列６１及び開始アドレス配列アドレス６２が配置されている領域と重複することがないように、あらかじめ配置されている。
【００３０】
次に、ＲＯＭ７について図３を参照して説明する。図３は、本発明の実施の形態１におけるＲＯＭ７に格納される起動処理７０と制御プログラム７１の内容を例示した説明図である。
【００３１】
起動処理７０は、起動初期化処理７０１、起動主処理７０２、開始アドレス初期値配列７０３、有効開始アドレス配列７０４、及び開始アドレス配列アドレス初期値７０５を含んでいる。
【００３２】
ここで、起動初期化処理７０１は、制御プログラム７１の実行開始前に必要な起動処理７０における初期化部分である。起動主処理７０２は、制御プログラム７１の実行開始前に必要な起動処理７０における主要な処理である。なお、起動主処理７０２としては、例えば、確認処理または転送処理が該当する。ここで、確認処理とは、制御プログラム７１の正当性を検証する処理である。また、転送処理とは、制御プログラム７１を必要な領域に転送する処理である。
【００３３】
起動主処理７０２は、制御プログラム７１の正当性を検証するセキュリティ上重要な処理であるため、ＲＯＭ７の他の領域とは別にセキュリティで保護された領域に記憶してもよい。また、起動初期化処理７０１についても、各部を正しく初期化する必要があるため、ＲＯＭ７の他の領域とは別にセキュリティで保護された領域に記憶してもよい。
【００３４】
開始アドレス初期値配列７０３は、開始アドレス配列６１に含まれる各要素の開始アドレスの初期値を記憶している。なお、開始アドレス初期値配列７０３は、開始アドレス配列６１を初期化するものである。したがって、開始アドレス初期値配列７０３の各要素に記憶するアドレス値は、開始アドレス配列６１の同じ位置の要素の初期値となるように構成される。
【００３５】
有効開始アドレス配列７０４は、開始アドレス配列６１に含まれる各要素の有効な開始アドレスを記憶している。開始アドレス配列アドレス初期値７０５は、開始アドレス配列アドレス６２の初期値を記憶している。
【００３６】
また、本実施の形態１では、後述する制御プログラム７１の各処理部分に関して、起動主処理７０２が未完了の処理部分に含まれる処理単位を実行できないようにする必要がある。従って、開始アドレス初期値配列７０３には無効なアドレスを記憶しておく。なお、無効なアドレスの具体的な一例として、Ｃ言語ではＮＵＬＬを使用する。
【００３７】
また、制御プログラム７１の処理部分に含まれるいずれかの処理単位を実行中に異常を検出した場合などで、まだ実行可能ではないが、異常の仮処置または異常内容の記憶のために別の処理単位の実行が必要になる場合がある。このように異常時に必要になる処理単位については、開始アドレス初期値配列７０３の要素に仮実行処理の開始アドレスを記憶しておく。
【００３８】
以下、制御プログラム７１について図３を参照して説明する。制御プログラム７１は、内容に応じて分割された複数の処理部分として、スタートアップ処理７１１、異常処理７１２、制御初期化処理７１３、短周期制御処理７１４、ＯＳ（Operating System）通信処理７１５、及び長周期制御処理７１６を含んで構成されている。
【００３９】
各処理部分としてのスタートアップ処理７１１〜長周期制御処理７１６は、それぞれ１つ以上の処理単位を含んでいるものとする。ここで、処理単位はサブルーチンのことであり、呼び出し元に処理を返すリターン命令で処理を終えるものである。この処理単位は、一例として、Ｃ言語では関数と呼ばれる処理の１つのまとまりである。また、処理単位のそれぞれには、各処理単位を識別するＩＤ（identification）として、固有の処理単位ＩＤを付与する。
【００４０】
この処理単位ＩＤを指標として、有効開始アドレス配列７０４を参照することにより、有効開始アドレス配列７０４からは、当該処理単位の開始アドレスが得られるように、処理単位ＩＤを付与する。また、この処理単位ＩＤを指標として、開始アドレス配列６１を参照することにより、開始アドレス配列６１からは、当該処理単位が実行可能な場合には有効な開始アドレスが得られ、実行可能でない場合は無効なアドレスが得られるように、処理単位ＩＤを付与する。
【００４１】
制御プログラム７１の各処理部分であるスタートアップ処理７１１〜長周期制御処理７１６は、それぞれの処理部分が実行可能になるまでの起動時間の要求が短い順に配置されている。すなわち、起動時間の要求が短い処理部分から順に、処理部分に対して起動主処理７０２を行うため、先に起動主処理７０２を行う処理部分のアドレスが若くなるような順に配置している。
【００４２】
各処理部分の配置の方法は、例えば、制御プログラム７１の各処理部分であるスタートアップ処理７１１〜長周期制御処理７１６を配置するセクション名を定義した上でコンパイルし、プログラムの結合処理を行うリンカプログラムに、各処理部分のセクションの開始アドレスを指示することによって実現可能である。
【００４３】
スタートアップ処理７１１は、スタックポインタの初期化、及びプログラム内変数の初期値の設定等の、制御プログラム７１を開始するための基本的な初期化を行う。また、マイコン３に備わっている自己試験機能であるＢＩＳＴ（Built-in Self Test）の実施が必要な場合は、スタートアップ処理７１１内で実施してもよい。すなわち、スタートアップ処理７１１は、各種の初期化処理を実施する必要があるため、制御プログラム７１内で最初に実行する必要がある処理部分として配置している。
【００４４】
異常処理７１２は、制御プログラム７１の各処理部分を実行中に検出される異常に対して、必要な処置を行う。すなわち、制御初期化処理７１３〜長周期制御処理７１６内で異常が検出された際に、異常処理７１２が異常に対して必要な処置を実施する。従って、図３のように、制御初期化処理７１３〜長周期制御処理７１６より先に、異常処理７１２が実行を開始する配置としている。
【００４５】
制御初期化処理７１３は、制御対象の制御処理を実行するために必要な初期化を行う。例えば、制御初期化処理７１３では、制御プログラム７１の各種制御処理に必要な変数の初期化、及びモータ１１の制御に必要な機能の初期化を行う。
【００４６】
なお、モータ１１の制御入出力に必要な初期化として、例えば、センサの電圧をデジタル値に変換するＡ／Ｄ（Analog-to-Digital）変換機能の初期化、及び駆動回路１０における制御信号を調整するＰＷＭ（Pulse Width Modulation）機能の初期化を行う。このような制御初期化処理７１３による初期化は、短周期制御処理７１４の実行開始前に実行する必要があるため、図３のように短周期制御処理７１４より先に実行を開始する配置としている。
【００４７】
短周期制御処理７１４は、制御処理の中でも後述する長周期制御処理７１６よりも短い周期でモータ１１の制御処理を行うものであり、ＥＣＵ１の主機能の一つである。なお、短周期制御処理７１４は、例えば、数十マイクロ秒〜数百マイクロ秒で制御を行い、処理の異常または制御対象の異常をできるだけ早期に検出可能とするために、図３のようにＯＳ通信処理７１５より先に実行を開始する配置としている。
【００４８】
ＯＳ通信処理７１５は、制御プログラム７１にリアルタイムＯＳを組み込み、ＯＳ上で各種車載機器との通信処理を行う場合に、外部との通信処理を行う。なお、リアルタイムＯＳの使用は必須ではなく、リアルタイムＯＳを使用しない場合は、タイマ８を使用して外部との通信処理の実行周期を作成する。
【００４９】
なお、ＯＳ通信処理７１５における外部との通信処理を行う機能は、ＥＣＵ１と外部の他のＥＣＵとの協調動作の必要性から、特定の起動時間の要求がある。この特定の要求された時間内に外部との通信処理を開始することが可能なように、図３のように長周期制御処理７１６より先に実行を開始する配置としている。
【００５０】
長周期制御処理７１６は、制御処理の中で前述の短周期制御処理７１４よりも長い周期で制御を行う処理部分である。なお、長周期制御処理７１６は、例えば、１ミリ秒以上の周期で行う制御処理であり、各処理部分の異常監視、及び短周期制御処理７１４への制御指令等の各種の処理を行う。すなわち、長周期制御処理７１６は、制御プログラム７１の中でも比較的起動時間の要求が長いか、または特に起動時間が定められていない各種の処理であり、図３のように制御プログラム７１の処理部分の末尾に配置する。
【００５１】
なお、本実施の形態１では、具体的な説明のために、制御プログラム７１をスタートアップ処理７１１〜長周期制御処理７１６の各処理部分に分割して説明しているに過ぎない。従って、制御プログラム７１を各処理部分に分割する際の粒度及び分割数は、本実施の形態１の具体例に限定されるものではない。また、制御プログラム７１の各処理部分の内容も、本実施の形態１の具体例に限定されるものではない。
【００５２】
ところで、本実施の形態１を適用しない場合、制御プログラム７１は、サブルーチン等の別の処理単位を呼び出す際は、呼び出す先の処理の開始アドレスに無条件にジャンプし、処理単位の実行を開始する。
【００５３】
しかしながら、ＥＣＵ１の制御プログラム７１は、実行開始の時点で、制御プログラム７１の全ての処理部分がＣＰＵ５のメモリ空間上に存在し呼び出し可能という静的束縛の適用によって構成されている。従って、制御プログラム７１の処理部分の一部のみで起動主処理７０２が完了している場合に、起動主処理７０２が完了した処理部分に含まれる処理単位のみを呼び出し可能にし、起動主処理７０２が未完了の処理部分に含まれる処理単位を呼び出し不可能にする機能が備わっていないという課題がある。
【００５４】
すなわち、本実施の形態１を適用した制御プログラム７１は、起動主処理７０２の進捗状況によって、処理単位ごとに実行可能な場合と実行可能でない場合がある。このため、ＣＰＵ５は、別の処理単位を呼び出して実行する前に、呼び出す処理単位に対応する開始アドレス配列６１の要素として記憶されている開始アドレスを参照し、その開始アドレスが有効であるか否かを判断する。そして、呼び出す処理単位の開始アドレスが有効なアドレスと判断された場合のみ、ＣＰＵ５は別の処理単位の呼び出しと実行を許可する。
【００５５】
なお、処理単位ごとの開始アドレスが有効か無効かの判別を可能にするために、例えば、制御プログラム７１内の処理単位の開始アドレスが若い順に処理単位ＩＤをあらかじめ付与する。そして、この処理単位ＩＤで示される開始アドレス配列６１の要素が、当該処理単位の開始アドレスを記憶するようにする。
【００５６】
本実施の形態１を適用した場合の、図３に例示した起動処理７０及び制御プログラム７１のＥＣＵ１の起動時における基本的な処理の進め方について以下に説明する。
【００５７】
ＥＣＵ１が起動し、マイコン３のリセット状態が解除されると、ＣＰＵ５は起動処理７０として、まず起動初期化処理７０１を行う。起動初期化処理７０１は、起動主処理７０２を行うのに必要なマイコン３の各部の初期化処理を行う。
【００５８】
より具体的には、本実施の形態１では、起動初期化処理７０１として、ＣＰＵ５は、開始アドレス初期値配列７０３の各要素を、開始アドレス配列６１に転送し、開始アドレス配列６１を初期化する。同様に、ＣＰＵ５は、開始アドレス配列アドレス初期値７０５の内容を、開始アドレス配列アドレス６２に転送し、開始アドレス配列アドレス６２を初期化する。また、ＣＰＵ５は、後述する起動主処理７０２で必要とされるハードウェアとソフトウェアの初期化を行う。
【００５９】
次に、ＣＰＵ５は、処理部分に対して起動主処理７０２を行う。本実施の形態１では、起動主処理７０２として、処理部分に対してセキュアブート処理を行う。セキュアブート処理では、ＲＯＭ７に格納された制御プログラム７１に対して処理単位ごとに正当性を検証する。
【００６０】
なお、セキュアブート処理では、認証キーまたは電子署名等により制御プログラム７１が改ざんされていないことを検証する。本実施の形態１では、起動主処理７０２を処理部分ごとに進めながら、起動主処理７０２が完了した処理部分に含まれる処理単位を逐次実行可能とする。これを実現するため、起動主処理７０２は、図４に示す手順の中で段階的に処理を進める。
【００６１】
以下、起動主処理７０２について図４を参照して説明する。図４は、本発明の実施の形態１における起動主処理７０２の処理手順を示すフローチャートである。
【００６２】
ステップＳ１０１において、ＣＰＵ５は、開始アドレス配列６１の先頭からアクセスを開始するために、ＩＮＤＥＸを自動変数として宣言し、ＩＮＤＥＸをゼロに初期化する。ここでいうＩＮＤＥＸとは、開始アドレス配列６１および有効開始アドレス配列７０４の各要素にＣＰＵ５がアクセスするための指標である。
【００６３】
また、ステップＳ１０１において、ＣＰＵ５は、起動主処理７０２を制御プログラム７１の先頭番地から開始するとして、ＡＤＤＲＥＳＳを自動変数として宣言し、ＡＤＤＲＥＳＳを制御プログラム７１の先頭番地に初期化する。ここでいうＡＤＤＲＥＳＳとは、起動主処理７０２が完了した処理部分の最後のアドレスである。なお、ＩＮＤＥＸおよびＡＤＤＲＥＳＳは、自動変数としてＲＡＭ６内に宣言され、ＲＡＭ６の特定の番地に確保されるものではないものとしているので、起動処理変数６０内には含めていない。
【００６４】
ステップＳ１０２において、ＣＰＵ５は、その時点でのＡＤＤＲＥＳＳが示す処理部分に対する起動主処理７０２を行う。ここで、本実施の形態１では、制御プログラム７１の全ての領域に対して一度に起動主処理７０２を行うのではなく、制御プログラム７１に含まれるスタートアップ処理７１１〜長周期制御処理７１６の各処理部分ごとに、起動主処理７０２を行う。
【００６５】
一例として、本実施の形態１では、制御プログラム７１を内容に応じて複数の処理部分に分割し、実行可能になるまでの起動時間の要求が短く、起動が必要な処理部分の順に、スタートアップ処理７１１〜長周期制御処理７１６を配置している。従って、ＣＰＵ５は、スタートアップ処理７１１〜長周期制御処理７１６のそれぞれの処理部分を１区域として起動主処理７０２を進める。そして、ＣＰＵ５は、各処理部分に対する起動主処理７０２を完了した後にＡＤＤＲＥＳＳを次の処理部分の開始アドレスに更新する。その後、処理がステップＳ１０３へと進む。
【００６６】
ステップＳ１０３において、ＣＰＵ５は、有効開始アドレス配列７０４のＩＮＤＥＸで示される要素、すなわち、処理単位の開始アドレスを取得する。そして、ＣＰＵ５は、ＡＤＤＲＥＳＳが、その取得した要素を超えているか否かを判断する。ＡＤＤＲＥＳＳが有効開始アドレス配列７０４のＩＮＤＥＸで示される要素を超えていないと判断された場合は、ステップＳ１０２での起動主処理７０２によって新たに実行可能になった処理単位は存在しない。そこで、処理がステップＳ１０６へ進む。
【００６７】
一方、ステップＳ１０３において、ＡＤＤＲＥＳＳが有効開始アドレス配列７０４のＩＮＤＥＸで示される要素を超えていると判断された場合は、処理がステップＳ１０４へ進む。
【００６８】
ステップＳ１０４において、ＣＰＵ５は、ステップＳ１０３で取得した要素である開始アドレスまでの区域の起動主処理７０２が完了しているので、有効開始アドレス配列７０４のＩＮＤＥＸで示される要素を、開始アドレス配列６１のＩＮＤＥＸで示される要素に格納する。この場合、ＣＰＵ５は、起動主処理７０２によって新たに実行可能になった処理単位の開始アドレスを無効から有効にする切り替えを行っていることとなる。その後、処理がステップＳ１０５に進む。ステップＳ１０５において、ＣＰＵ５は、ＩＮＤＥＸが次の要素、すなわち次の処理単位の開始アドレスを示すようにＩＮＤＥＸを更新する。
【００６９】
なお、１つの処理部分に対する起動主処理７０２の完了により、通常はその処理部分内の１以上の処理単位が実行可能になる。そこで、ＣＰＵ５は、ステップＳ１０５の処理を完了した後、ステップＳ１０３の判断を再度行う。ＣＰＵ５は、有効開始アドレス配列７０４のＩＮＤＥＸで示される要素がＡＤＤＲＥＳＳを超えるまで、ステップＳ１０３〜ステップＳ１０５の処理を繰り返し実行する。
【００７０】
ステップＳ１０６において、ＣＰＵ５は、ＡＤＤＲＥＳＳの値を評価することによって、全ての処理部分に対する起動主処理７０２が完了したか否かを判断する。ステップＳ１０６において、全ての処理部分に対して起動主処理７０２が完了していないと判断された場合は、処理がステップＳ１０２に戻る。
【００７１】
以上のステップＳ１０２〜ステップＳ１０６から分かるように、ＣＰＵ５は、スタートアップ処理７１１〜長周期制御処理７１６のそれぞれに対して、起動主処理７０２を行い、起動主処理７０２が完了した処理部分に含まれる処理単位の開始アドレスを無効から有効にする切り替えを、処理部分の配置順に行う処理部分起動動作を実行する。
【００７２】
一方、ステップＳ１０６において、全ての処理部分に対して起動主処理７０２が完了したと判断された場合は、処理はステップＳ１０７に進む。この場合、制御プログラム７１の全ての処理部分に含まれる処理単位が実行可能になっており、開始アドレス配列６１を参照して処理の実行可否を確認することが不要になる。そこで、ステップＳ１０７において、ＣＰＵ５は、開始アドレス配列アドレス６２に無効なアドレスを格納する。その後、処理は終了する。
【００７３】
以上のステップＳ１０６およびステップＳ１０７から分かるように、ＣＰＵ５は、処理部分起動動作をスタートアップ処理７１１〜長周期制御処理７１６の全てに対して実行した場合に、開始アドレス配列アドレス６２を有効から無効に切り替える。
【００７４】
以上は、起動処理７０について、起動主処理７０２及びその処理後の変数の更新手順を中心に説明を行った。なお、起動主処理７０２として、制御プログラム７１に含まれる処理部分ごとのセキュアブート処理を具体例にしたが、同様の異なる処理を起動主処理７０２としてもよい。
【００７５】
次に、起動主処理７０２が完了した処理部分内で、実行可能となった処理単位を実行することについて図５を参照して説明する。図５は、本発明の実施の形態１において制御プログラム７１のある処理単位を実行中に別の処理単位を実行する際の処理手順を示すフローチャートである。
【００７６】
なお、本実施の形態１では、ＣＰＵ５は、上述した処理部分起動動作を実行しながら、開始アドレス配列６１を参照して有効に切り替わっている開始アドレスの処理単位を実行する処理単位実行動作を実行する。換言すると、ＣＰＵ５は、制御プログラム７１の各処理部分に対して起動主処理７０２を実行しつつ、起動主処理７０２が完了した処理部分に含まれる処理単位を逐次的に実行する。
【００７７】
ここで、第１の例として、制御プログラム７１の各処理単位での実行は、起動主処理７０２を行っているＣＰＵとは別のＣＰＵを使用して並列処理により実行してもよい。この場合、ＣＰＵ５は、処理部分起動動作と処理単位実行動作を並列に実行するように構成される。なお、並列処理は、別のＣＰＵを使用して実行してもよいし、複数のコアを有するマルチコアＣＰＵ内で別のコアを使用して実行してもよい。第２の例として、タイマ８を使用するなどして一定時間が経過する毎に起動主処理７０２と処理単位の実行を同一のＣＰＵで切り替えて並行処理により実行してもよい。この場合、ＣＰＵ５は、処理部分起動動作と処理単位実行動作を並行して実行するように構成される。
【００７８】
なお、本実施の形態１では、起動主処理７０２が完了した処理部分で制御プログラム７１を処理単位順に逐次実行するが、ＣＰＵ５が実行している処理単位の中で、別の処理単位を呼び出して実行することがある。例えば、同じ処理部分内である処理単位から次の処理単位に移る場合、ある処理部分の末尾の処理単位から次の処理部分の先頭の処理単位に移る場合、ある処理部分の処理単位から別の処理部分の処理単位に移る場合などである。但し、呼び出して実行する別の処理単位は、起動主処理７０２が完了している場合のみ可能である。
【００７９】
ステップＳ２０１において、ＣＰＵ５は、制御プログラム７１のいずれかの処理単位を実行中に別の処理単位を呼び出して実行する必要が生じた場合には、ＲＡＭ６の開始アドレス配列アドレス６２を参照する。その後、処理がステップＳ２０２へと進む。そして、ＣＰＵ５は、ステップＳ２０２において、ステップＳ２０１で参照した開始アドレス配列アドレス６２に格納されているアドレスが有効か無効かを判断する。
【００８０】
ステップＳ２０２において、開始アドレス配列アドレス６２が有効なアドレスであると判断された場合、処理がステップＳ２０３へと進む。ステップＳ２０３において、ＣＰＵ５は、開始アドレス配列６１を参照して、呼び出して実行しようとする処理単位に対してあらかじめ付与済みの処理単位ＩＤに対応する開始アドレスを確認する。その後、処理がステップＳ２０４へと進む。
【００８１】
一方、ステップＳ２０２において、開始アドレス配列アドレス６２が無効なアドレスであると判断された場合は、制御プログラム７１の全ての処理部分について起動主処理７０２が完了していることを意味する。従って、開始アドレス配列６１を参照せずに、処理がステップＳ２０５へと進む。すなわち、これ以後は、本実施の形態１による開始アドレス配列６１の参照を終了し、従来のアドレス参照の手法に戻って、例えば、ＣＰＵ５は有効開始アドレス配列７０４を参照して処理単位を実行する。
【００８２】
ステップＳ２０４において、ＣＰＵ５は、ステップＳ２０３で開始アドレス配列６１を参照した結果、処理単位ＩＤに対応する開始アドレスが有効か無効かを判断する。すなわち、ＣＰＵ５は、実行しようとしている処理単位を含む制御プログラムの処理部分で起動主処理７０２が完了しているか否かを確認する。
【００８３】
参照した開始アドレスが有効であると判断された場合は、当該処理単位を含む処理部分は、起動主処理７０２が完了しているため、処理がステップＳ２０５へと進む。ステップＳ２０５において、ＣＰＵ５は、別の処理単位の呼び出しを許可し、処理単位ＩＤに対応する開始アドレスの処理単位を実行する。
【００８４】
一方、ステップＳ２０４において、参照した開始アドレスが無効であると判断された場合は、当該処理単位を含む処理部分は起動主処理７０２が完了していない。そこで、ＣＰＵ５は、当該処理単位を呼び出さずに処理を終了する。
【００８５】
以上のステップＳ２０３〜ステップＳ２０５から分かるように、ＣＰＵ５は、開始アドレス配列６１を参照して有効に切り替わっている開始アドレスの処理単位を実行する処理単位実行動作を実行する。
【００８６】
より具体的には、以上のステップＳ２０１〜ステップＳ２０５から分かるように、ＣＰＵ５は、開始アドレス配列アドレス６２が有効である場合には、開始アドレス配列６１を参照して有効に切り替わっている開始アドレスの処理単位を実行する。また、以上のステップＳ２０１、ステップＳ２０２およびステップＳ２０５から分かるように、ＣＰＵ５は、開始アドレス配列アドレス６２が無効である場合には、開始アドレス配列６１の参照をやめて、処理単位を実行する。
【００８７】
なお、呼び出し要求のあった処理単位を呼び出さないことによって問題が生じる場合には、該当する処理単位において開始アドレス初期値配列７０３の初期値を無効なアドレスから仮実行処理のアドレスに変更する。そして、該当する処理単位の仮実行処理について事前に起動主処理７０２を行うようにすればよい。または、該当する処理が呼び出される前に起動主処理７０２が完了するように、制御プログラム７１内で処理単位の配置を変更し、制御プログラム７１をコンパイル及びリンクし直すことで修正すればよい。
【００８８】
以上、本実施の形態１によれば、ＥＣＵ１は、複数の処理部分の一例であるスタートアップ処理７１１〜長周期制御処理７１６を含んで構成される制御プログラム７１を記憶するＲＯＭ７と、複数の処理部分のそれぞれに含まれる１以上の処理単位の開始アドレスを要素とする開始アドレス配列６１を記憶するＲＡＭ６と、制御プログラム７１を実行するＣＰＵ５とを備えて構成されている。また、制御プログラム７１の複数の処理部分は、それぞれの処理部分が実行可能になるまでの起動時間の要求が短い順に、ＲＯＭ６内に配置されている。さらに、ＣＰＵ５は、処理部分起動動作を実行しながら、処理単位実行動作を実行するように構成されている。
【００８９】
これにより、制御プログラム７１全体の起動主処理７０２が完了していないにもかかわらず、各処理部分にそれぞれ要求された起動時間以内に実行を開始し、要求された機能を提供可能になる。つまり、制御プログラム７１に起動主処理７０２を行ってから当該制御プログラム７１を実行する場合に、制御プログラム７１が実行可能になるまでの時間の増大を抑えることが可能となる。
【００９０】
なお、ＥＣＵ１が車載用の電子制御装置である場合、動作開始の指令が発生してから、制御対象に対する制御または外部機器との通信などの機能が提供可能となるまでの起動時間の要求は１００ミリ秒程度である。このような起動時間の要求に対しても、本実施の形態１によれば、起動主処理７０２を行ってから制御プログラム７１を実行する際に要求を満足することが可能になる。
【００９１】
なお、以上の本実施の形態１の説明では、起動主処理７０２の一例として、制御プログラム７１の正当性を検証する確認処理であるセキュアブート処理を実施している。この他に、起動主処理７０２としては、制御プログラム７１の実行前に、ＲＯＭ７からＲＡＭ６への制御プログラム７１の転送を行う転送処理が必要になる場合がある。
【００９２】
例えば、複数のＣＰＵを含むシステムを一つのＩＣに集積したＳｏＣ（System on a Chip）構成のマイコン３の場合は、いずれかのＣＰＵをメインＣＰＵ、他のＣＰＵを制御用のサブＣＰＵと設定する。そして、メインＣＰＵによって、メインＣＰＵがアクセス可能なＲＯＭまたは二次記憶装置から制御プログラム７１を読み出して、制御用のサブＣＰＵがアクセス可能なＲＡＭへの転送処理が必要な場合がある。
【００９３】
この場合は、メインＣＰＵが、起動主処理７０２として転送処理を行い、ＲＯＭ７または二次記憶装置に含まれる制御プログラム７１を処理部分ごとにＲＡＭ６に転送し、転送が完了した処理部分に含まれる処理単位から制御用サブＣＰＵが処理を実行可能とすることができる。すなわち、メインＣＰＵが制御プログラム７１の転送を処理部分ごとに行い、これと並行して、転送が完了した処理部分に含まれる処理単位をサブＣＰＵが実行することで、制御プログラム７１が実行可能になるまでの時間の増大を抑えることが可能になる。
【００９４】
また、以上のＥＣＵ１は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field-Programmable Gate Array）、またはこれらを組み合わせたもので構成することも可能である。そして、各部の機能それぞれを個別の処理回路で実現しても良いし、各部の機能をまとめて単一の処理回路で実現しても良い。
【符号の説明】
【００９５】
１  ＥＣＵ、２  入力回路、３  マイコン、４  Ｉ／Ｏ、５  ＣＰＵ、６  ＲＡＭ、７  ＲＯＭ、８  タイマ、９  外部通信インタフェース、１０  駆動回路、１１  モータ、１２  外部通信線、６０  起動処理変数、６１  開始アドレス配列、６２  開始アドレス配列アドレス、７０  起動処理、７０１  起動初期化処理、７０２  起動主処理、７０３  開始アドレス初期値配列、７０４  有効開始アドレス配列、７０５  開始アドレス配列アドレス初期値、７１  制御プログラム、７１１  スタートアップ処理、７１２  異常処理、７１３  制御初期化処理、７１４  短周期制御処理、７１５  ＯＳ通信処理、７１６  長周期制御処理。
【図１】
2020077093.tif 000003
【図２】
2020077093.tif 000004
【図３】
2020077093.tif 000005
【図４】
2020077093.tif 000006
【図５】
2020077093.tif 000007