JP2021124959A - 制御装置 - Google Patents

制御装置 Download PDF

Info

Publication number
JP2021124959A
JP2021124959A JP2020018023A JP2020018023A JP2021124959A JP 2021124959 A JP2021124959 A JP 2021124959A JP 2020018023 A JP2020018023 A JP 2020018023A JP 2020018023 A JP2020018023 A JP 2020018023A JP 2021124959 A JP2021124959 A JP 2021124959A
Authority
JP
Japan
Prior art keywords
storage area
software
executed
program
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2020018023A
Other languages
English (en)
Other versions
JP7322734B2 (ja
Inventor
高志 草川
Takashi Kusakawa
高志 草川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Denso Corp
Original Assignee
Denso Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Denso Corp filed Critical Denso Corp
Priority to JP2020018023A priority Critical patent/JP7322734B2/ja
Publication of JP2021124959A publication Critical patent/JP2021124959A/ja
Application granted granted Critical
Publication of JP7322734B2 publication Critical patent/JP7322734B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】安全度が異なる複数のソフトウェアを利用して制御対象を制御する制御装置において、ハードウェア資源や処理負荷の増加を招くことなく、各ソフトウェアにおいて共通の機能をそれぞれ安全に実施できるようにする。【解決手段】制御装置1は、安全度が異なる複数のソフトウェアのプログラムを実行する制御部10と、記憶部20と、レジスタ12とを備える。制御部は、他のプログラムの実行を禁止するプログラムを実行する際には、レジスタに割り込み禁止を設定し、そのプログラムが終了すると、レジスタに割り込み許可を設定する割り込み禁止処理を実施する。また制御部は、安全度が最も高いソフトウェアのプログラムの実行中には、割り込み許可の状態が保証されるタイミングで、レジスタを、割り込みを許可する初期状態に戻す。【選択図】図1

Description

本開示は、安全度が異なる複数のソフトウェアを実行することにより、制御対象を制御する制御装置に関する。
マイクロコンピュータ等にて構成される制御装置において、制御対象を制御するのに用いられるソフトウェアとしては、機能安全規格(ISO26262)に則って安全度が規定されたASILソフトウェア(以下、ASILソフト)が知られている。なお、ASILは、「Automotive Safety Integrity Level」の略であり、下記のQMは、「Quality Management 」の略である。
そして、ASILソフトが、ASILソフトよりも安全度が低いQMソフトウェア(以下、QMソフト)と共に、一つの制御装置に組み込まれる場合には、特許文献1に記載のように、データの記憶領域が、QMソフトとは異なる領域に設定される。これは、例えば、ASILソフトのデータがQMソフトからアクセスされて、不具合が生じるのを防止するためである。
特開2015−99517号公報
上記のように、安全度が異なる複数のソフトウェアが利用される制御装置では、通常、安全度が異なるソフトウェア毎に、使用するメモリやレジスタ等のリソースが割り当てられる。
しかしながら、発明者の詳細な検討の結果、各ソフトウェアで使用したい共通の機能については、その機能を実現するリソースが一つであることから、ソフトウェア毎にリソースを分けることができない、という課題が見出された。
つまり、例えば、制御装置において、割り込み禁止やコア間の排他(通称セマフォ)等の機能については、その機能を実現するために特定のレジスタ若しくはメモリ領域が利用されることから、これらのリソースをソフトウェア毎に分けることはできない。
また、こうした排他機能をソフトウェア毎に実現できるようにするには、リソースが増加したり、1つの関数内で様々な条件判定をするために処理負荷が増加したりするので、制御装置のコストアップを招くという問題が発生する。
本開示は、安全度が異なる複数のソフトウェアを利用して制御対象を制御する制御装置において、ハードウェア資源や処理負荷の増加を招くことなく、各ソフトウェアにおいて共通の機能をそれぞれ安全に実施できるようにすることが望ましい。
本開示の1つの態様による制御装置は、安全度が異なる複数のソフトウェアのプログラムを実行する制御部と、制御部によるプログラムの実行時にデータの書き込み及び更新が行われる記憶部と、割り込み禁止/許可設定用のレジスタと、を備える。
そして、制御部は、複数のソフトウェアのプログラムの実行中に、他のプログラムの実行を禁止する際には、レジスタに割り込み禁止を設定することで、他のプログラムの実行を禁止し、実行中のプログラムが終了すると、レジスタに割り込み許可を設定することで、他のプログラムの実行を許可する割り込み禁止処理を実施する。
従って、レジスタに割り込み禁止が設定されているときには、制御部は、実行中のプログラムとは異なる他のプログラムを実施することができなくなり、制御部は、複数のソフトウェアのプログラムの一つを、排他的に実行することができる。
ところで、割り込み禁止/許可設定用のレジスタは、制御部が実行中のプログラムのバグ等によって、本来の設定状態から書き換えられることがある。また、この書き換えは、安全度が低いソフトウェアのプログラムの実行により発生する確率が高い。
そして、割り込み禁止/許可用のレジスタが、割り込み許可状態が正常であるにも関わらず、割り込み禁止状態に書き換えられると、制御部は、他のプログラムを実施できなくなる。また、割り込み禁止状態が正常であるにも関わらず、割り込み許可状態に書き換えられると、割り込みを禁止すべき他のプログラムが実施されてしまい、制御部は、安全度が異なる複数のソフトウェアのプログラムを正常に実施することができなくなる。
そこで、本開示の制御部は、複数のソフトウェアのうち、安全度が最も高いソフトウェアのプログラムを実行しているときには、割り込み許可の状態が保証されるタイミングで、レジスタを、割り込みを許可する初期状態に設定するように構成されている。
このため、本開示の制御装置によれば、割り込み許可/設定用のレジスタが間違って書き換えられた場合であっても、各ソフトウェアのプログラムを正常に実施できなくなるのを抑制することができる。
また、本開示の制御装置においては、安全度が最も高いソフトウェアのプログラムを実行しているときに、適正なタイミングでレジスタを初期状態に設定するだけでよいため、ハードウェア資源や処理負荷の増加を招くことなく、上記効果を得ることができる。
次に本開示の他の態様による制御装置は、安全度が異なる複数のソフトウェアのプログラムを実行する複数の制御部と、複数の制御部によるプログラムの実行時にデータの書き込み及び更新が行われる記憶部とを備える。そして、記憶部は、複数の制御部にて排他的に利用される共通記憶領域を有する。
複数の制御部は、それぞれ、複数のソフトウェアのプログラムの実行中に、共通記憶領域を利用する際には、制御部間排他処理を実行する。
制御部間排他処理においては、共通記憶領域に記憶されたデータから共通記憶領域が未使用状態であるか否かを判断し、共通記憶領域が他の制御部にて使用されている場合には、共通記憶領域が未使用状態となるまで、プログラムの実行を停止させる。
一方、共通記憶領域が未使用状態であるか、或いは、未使用状態になると、共通記憶領域に未使用状態とは異なるデータを書き込むことで、プログラムを継続して実行する。そして、共通記憶領域の利用が完了すると、他の制御部が利用できるように、共通記憶領域に未使用状態を表す初期データを記憶する。
従って、各制御部は、それぞれ、プログラムの実行時に、記憶部の共通記憶領域を排他的に利用することができるようになる。
ところで、記憶部の共通記憶領域内のデータは、制御部が実行するプログラムのバグ等によって書き換えられることがある。そして、記憶部の共通記憶領域内のデータが書き換えられると、実行中のプログラムだけでなく、他のプログラムについても、正常に実施することができなくなってしまう。
また、記憶部の記憶領域内のデータの書き換えは、制御部が、安全度が低いソフトウェアのプログラムを実行することにより、発生する確率が高くなる。
そこで、本開示の制御部は、複数のソフトウェアのうち、安全度が最も高いソフトウェアのプログラムの実行中に、制御部間排他処理を実施していない状態が保証されるタイミングで、再初期化処理を実行するように構成される。そして、この再初期化処理では、共通記憶領域に、共通記憶領域が未使用状態であることを表す初期データを記憶する。
従って、本開示の制御装置によれば、安全度が低いソフトウェアのバグ等によって、記憶部の共通記憶領域内のデータが書き換えられた場合であっても、各制御部がプログラムを正常に実施できなくなるのを抑制することができる。
また、本開示の制御装置においては、安全度が最も高いソフトウェアのプログラムを実行しているときに、適正なタイミングで共通記憶領域に初期データを記憶するだけでよい。このため、ハードウェア資源や処理負荷の増加を招くことなく、上記効果を得ることができる。
第1実施形態の制御装置の構成を表すブロック図である。 割り込み禁止処理にて更新されるネスト回数を説明する説明図である。 割り込み禁止/許可及びネスト回数の変化を正常時と異常時とで比較して表すタイムチャートである。 図3に示す異常時に割り込み禁止/許可及びネスト回数を初期化する動作を表すタイムチャートである。 ASILソフトの定期タスクで割り込み禁止/許可及びネスト回数を初期化する動作を表す説明図である。 定期タスクの実行手順及びASILソフトの定期タスクで実行される再初期化処理を表すフローチャートである。 QMソフト及びASILソフトの定期タスクが分散して実行される場合の再初期化処理の実行タイミングを表す説明図である。 変形例の異常判定処理を表すフローチャートである。 変形例において異常判定後に実行される再初期化処理の実行タイミングを表す説明図である。 第2実施形態の制御装置の構成を表すブロック図である。 ASILソフトの定期タスクにおけるコア間排他処理及び再初期化処理の実行タイミングをCPUコア毎に表す説明図である。 各CPUコアの起動直後にコア間排他処理に関連して実行される初期化処理を表すフローチャートである。 各CPUコアにて実行されるコア間排他開始処理を表すフローチャートである。 各CPUコアにて実行されるコア間排他終了処理を表すフローチャートである。 各CPUコアにて実行されるコア間排他処理により変化するスピンロックバッファ、スピンロックオーナー、及びネスト回数を表す説明図である。 各CPUコアにて実行される再初期化処理を表すフローチャートである。
以下、図面を参照しながら、本開示の実施形態を説明する。
[第1実施形態]
本実施形態の制御装置は、例えば、車両に搭載されて、エンジン等の車両各部を制御するのに用いられる電子制御装置(以下、ECU)1であり、CPU10、SRAM20、ROM30及びタイマ40を含む、マイクロコンピュータにて構成されている。
CPU10、SRAM20、ROM30及びタイマ40は、バス50を介してデータを送受信可能に相互接続されている。なお、バス50には、制御対象に設けられたセンサやアクチュエータとの間で検出信号や制御信号を送受信するインターフェイス、他のECUとの間でデータ通信を行う通信部、等も接続される。
CPU10は、本開示の制御部に相当するものであり、割り込み禁止/許可設定用のレジスタ12が備えられている。また、SRAM20は、本開示の記憶部に相当するものであり、その記憶領域の一部が、CPU10がプログラムを実行する際に、実行中のプログラムの階層を表すネスト回数を記憶するための記憶領域22として設定されている。
ROM30には、CPU10が実行するプログラムとして、制御対象の制御の安全度を確保するために、安全度が高いASILソフトと、ASILソフトに比べて安全度が低いQMソフトとの、2種類のソフトウェアのプログラムが記憶されている。
そして、CPU10は、これらのプログラムの一つを実行しているときに、他のプログラムによる割り込みを禁止する必要があるときには、図2に示すように、レジスタ12に割り込み禁止を設定して、他のプログラムの割り込みを禁止する。
また、CPU10が実行するプログラムは、図2に示す関数A、関数B、関数Cのように階層化されており、CPU10は、例えば、時点Ta1で最上位の関数Aの実行を開始すると、ネスト回数を「1」に設定する。また、時点Tb1で中位の関数Bの実行を開始すると、ネスト回数を「2」に設定し、時点Tc1で最下位の関数Cの実行を開始すると、ネスト回数を「3」に設定する。
また、CPU10は、時点Tc2で関数Cの実行が完了すると、ネスト回数を「2」に戻し、時点Tb2で関数Bの実行が完了すると、ネスト回数を「1」に戻し、時点Ta2で関数Aの実行が完了すると、ネスト回数を初期値「0」に戻す。
従って、レジスタ12に割り込み禁止が設定されている場合、SRAM20の記憶領域22には、CPU10が実行中のプログラムの進行に応じて更新されるネスト回数が「1」から順に記憶される。そして、全プログラムが終了すると、ネスト回数が「0」に戻り、割り込み禁止の設定も解除されることになる。
つまり、図3に示すように、車両のイグニッションスイッチ(以下、IG)がオン状態となって、ECU1が制御を開始すると、CPU10は上記各プログラムを実行し、そのプログラムの進行に応じて他のプログラムによる割り込みを禁止する。
そして、図3の上欄に示すように、正常時には、割り込み禁止中に、プログラムの進行に応じてネスト回数が更新され、実行中のプログラムが終了するとネスト回数が「0」に戻り、割り込み禁止が解除されて、他のプログラムを実行できるようになる。
しかしながら、レジスタ12に記憶された割り込み禁止/許可の状態や、SRAM20の記憶領域22に記憶された割り込み禁止のネスト回数は、CPU10が実行中のプログラムのバグ等によって、正規の値から書き換えられることがある。
例えば、図3の下欄は、こうした異常時の例として、割り込み許可状態にあるとき、時点t0で、本来「0」であるネスト回数が「1」又は「−1」に書き換えられたときの挙動を表している。
図3の下欄に示すように、ネスト回数が「1」に書き換えられた「異常1」の場合には、その後、割り込み禁止を行うプログラムが実行されると、そのプログラムの進行に応じてネスト回数が「2」、「3」…へと更新される。そして、そのプログラムが終了しても、ネスト回数は「1」に保持されることから、レジスタ12は、割り込み許可状態に戻らず、割り込み禁止状態が保持され、他のプログラムを実行することができなくなる。
また、ネスト回数が「−1」に書き換えられた「異常2」の場合には、その後、割り込み禁止を行うプログラムが実行されると、そのプログラムの進行に応じてネスト回数が「0」、「1」…へと更新される。このため、割り込み禁止を行うプログラムの実行中に、ネスト回数が「0」に戻ったときには、本来割り込み禁止を継続すべきタイミングで、レジスタ12が割り込み許可状態に書き換えられて、プログラムを正常に実行することができない。
そこで、本実施形態では、図4に示すように、IGがオン状態となって、CPU10が起動し、初期化処理が完了すると、その後、所定の割り込み再初期化周期が経過した時点t1で、レジスタ12及びSRAM20の記憶領域22を初期化するようにされている。
つまり、CPU10は、レジスタ12を割り込み許可状態に設定し、SRAM20の記憶領域22のネスト回数を「0」に設定する再初期化処理を、所定の再初期化周期で周期的に実行するのである。
この結果、プログラムのバグ等によって、レジスタ12やSRAM20の記憶領域22に異常な値が設定されたとしても、これら各部を周期的に初期化することで、その後のプログラムを正常に実行できるようになる。
そして、本実施形態では、この再初期化処理を、図5に示すようにASILソフトの定期タスクで、その定期タスクの開始直後のタイミングts、若しくは、その定期タスクの終了直前のタイミングteで実行するようにされている。
すなわち、CPU10にて実行されるプログラムの中で、ASILソフトのプログラムは、QMソフト等の他のプログラムに比べて安全度が最も高く、プログラムの実行中にレジスタ12やSRAM20の記憶領域22が誤って書き換えられる可能性は極めて低い。
そして、CPU10は、QMソフト及びASILソフトの定期タスクをそれぞれ一定周期で実行し、正常時には、その定期タスクの開始直後若しくは終了直前には、ネスト回数は「0」になり、他のプログラムの割り込みが許可される。
そこで、本実施形態では、CPU10が、ASILソフトの定期タスクを実行する際、割り込み許可の状態が保証される、定期タスクの先頭領域若しくは終了領域で、再初期化処理を実行し、レジスタ12及びSRAM20の記憶領域22を初期化するのである。
以下、CPU10における定期タスクの実行手順、及び、ASILソフトの定期タスクで実行される再初期化処理について、図6に示すフローチャートに沿って説明する。
図6に示すように、CPU10は、QMソフト或いはASILソフトの定期タスクを実行する際には、S110にて、定期タスクの先頭領域で開始処理を実行する。そして、開始処理が終了すると、CPU10は、他のプログラムを実行することのないよう、S120にて、レジスタ12を割り込み禁止状態に設定し、続くS130にて、SRAM20の記憶領域22に記憶されたネスト回数を、カウントアップ(+1)する。
次に、S140では、定期タスクのプログラムに従い、定期タスクにて実行すべき所定の制御処理を実行する。なお、この制御処理を実行する際、定期タスクのプログラムが図2に示したように階層化されている場合には、関数A、B、C、といった実行中のプログラムに応じて、ネスト回数を更新する。
そして、S140での制御処理が終了すると、S150にて、SRAM20の記憶領域22に記憶されたネスト回数をカウントダウン(−1)することにより、S130にてカウントアップする前の値に戻し、S160に移行する。
S160では、S150にて更新されたネスト回数は、初期値「0」であるか否かを判断する。そして、ネスト回数が初期値「0」であれば、制御処理は正常に終了したと判断して、S170に移行し、レジスタ12を割り込み許可状態に設定することで、他のプログラムの実行を許可した後、S180に移行する。また、ネスト回数が初期値「0」でなければ、そのままS180に移行する。
そして、S180は、定期タスクの終了処理を実行し、当該定期タスクを終了する。
従って、CPU10による定期タスクの実行時には、図5に示すように、QMソフト、ASILソフトのいずれのプログラムであっても、レジスタ12が割り込み禁止状態に設定され、記憶領域22に記憶されるネスト回数が「1」以上の値に設定される。そして、定期タスクの終了後は、レジスタ12は割り込み許可状態になり、SRAM20の記憶領域22に記憶されたネスト回数は初期値「0」に戻る。
しかし、上述したように、レジスタ12やSRAM20の記憶領域22は、QMソフト等のプログラムのバグにより書き換えられて、レジスタ12が割り込み許可状態にならないとか、ネスト回数が初期値「0」に戻らないという、問題が生じることがある。
そこで、図6に示した定期タスクのうち、ASILソフトの定期タスクでは、S110の開始処理において、S100の再初期化処理を実行するようにされている。
この再初期化処理は、レジスタ12及びSRAM20の記憶領域22を初期状態に戻すための処理であり、図6のS100に記載のように実行される。
すなわち、再初期化処理は、S102にて、SRAM20の記憶領域22に記憶されたネスト回数を初期値「0」に書き換え、S104にて、レジスタ12を割り込み許可状態に設定することにより、これら各パラメータを強制的に初期状態に戻す。
従って、本実施形態のECU1においては、レジスタ12及びSRAM20の記憶領域22の値が異常な値に書き換えられても、CPU10がASILソフトの定期タスクを実行することで、その値を正常値に戻すことができる。よって、ASILソフトの定期タスクの実行後、CPU10は、各プログラムを正常に実行することができるようになる。
また、このためには、図6に示すS100の再初期化処理を、ASILソフトの定期タスクの開始直後に実行される開始処理の一つとして実行するだけでよく、ハードウェア資源や処理負荷の増加を招くことがないので、低コストで実現できる。
なお、図6では、S100の再初期化処理を、ASILソフトの定期タスクの先頭領域であるS110の開始処理にて実行するようにしているが、ASILソフトの定期タスクの終了領域であるS180の終了処理にて実行するようにしてもよい。
また、図5では、QMソフトの定期タスクとASILソフトの定期タスクは連続的に実行されるように記載されているが、図7に示すように、これら各定期タスクは、それぞれ、異なるタイミングで分散して実施されてもよい。
そして、この場合でもASILソフトの定期タスクにおいて、割り込み禁止設定前の先頭領域、若しくは、割り込み禁止解除後の終了領域にて、再初期化処理を実行することで、上記と同様の効果を得ることができる。
また、本実施形態では、図4に示す一定の割り込み再初期化周期で、レジスタ12及びSRAM20の記憶領域22を周期的に初期化する具体例を説明するため、ASILソフトの定期タスクを実行する度に、再初期化処理を実行するものとした。
しかし、図4に示す割り込み再初期化周期は、障害が発生してから車両の安全性が損なわれるまでの許容時間として規定されたフォールトトレラント時間間隔(以下、FTTI)よりも短い時間であればよい。
このため、再初期化処理は、ASILソフトの定期タスクを所定回数実行する度に1回だけ実行するようにしてもよい。そして、この場合、CPU10は、ASILソフトの定期タスクを実行する度に、S100の再初期化処理を実行する必要がないため、CPU10の処理負荷を軽減することができる。
[変形例]
上記第1実施形態では、レジスタ12及びSRAM20の記憶領域22は、ASILソフトの定期タスクにて実行される再初期化処理において、周期的に初期化されるものとして説明した。
しかし、レジスタ12及びSRAM20の記憶領域22の初期化は、必ずしも周期的に実施する必要はなく、レジスタ12若しくはSRAM20の記憶領域22の異常を検知した際に、実行するようにしてもよい。
つまり、レジスタ12及びSRAM20の記憶領域22が正常であれば、ASILソフトの定期タスクの先頭領域若しくは終了領域では、レジスタ12には割り込み許可状態が設定され、SRAM20の記憶領域22にはネスト回数「0」が設定されている。
そこで、本変形例では、CPU10は、ASILソフトの定期タスクの先頭領域若しくは終了領域にて、図6に示すS100の再初期化処理に代えて、図8に示すS200の異常判定処理を実行する。
この異常判定処理では、S210にて、レジスタ12は割り込み許可状態、SRAM20の記憶領域22はネスト回数「0」、の初期状態になっているか否かを判断することで、これら各部が正常か否かを判定する。
そして、S210にて、レジスタ12及びSRAM20の記憶領域22は正常であると判断されると、異常判定処理を終了し、S210にて、レジスタ12及びSRAM20の少なくとも一方が異常であると判断されると、S220に移行する。
S220では、異常判定後、一定時間ΔT経過後に、S100の再初期化処理が実行されるように、タイマ40に一定時間ΔTを設定して計時を開始させ、異常判定処理を終了する。
この結果、図9に示すように、ASILソフトの定期タスクにて実行される異常判定処理にて異常が判定されると、その後、一定時間ΔTが経過したタイミングで、タイマ40から割り込み信号が出力されることになる。
そして、CPU10は、その割り込み信号にて、図6に示したS100の再初期化処理を実行し、レジスタ12及びSRAM20の記憶領域22を初期化する。
従って、タイマ40に計時させる一定時間ΔTとして、FTTIからASILソフトの定期タスクの実行周期を減じた時間よりも短い時間を設定しておけば、異常発生後、FTTIが経過するまでの間に、必ず再初期化処理が実行されることになる。
このため、QMソフト等によって、レジスタ12若しくはSRAM20の記憶領域22が異常な値に書き換えられたときには、FTTIが経過するまでの間に、その値を初期値に戻すことができるようになる。
よって、本変形例においても、上記実施形態と同様、車両の安全性を損なうことなく、制御を継続することができるようになる。
また、本変形例によれば、レジスタ12若しくはSRAM20の記憶領域22が異常な値に書き換えられたときにだけ、再初期化処理が実行されることから、第1実施形態に比べて、再初期化処理の実行頻度を抑え、CPU10の処理負荷を低減することができる。
なお、第1実施形態及び本変形例では、S100の再初期化処理を実行することで、レジスタ12及びSRAM20の記憶領域22を、定期的若しくは異常判定時に初期化するものとして説明した。
しかし、ネスト回数が、レジスタ12が割り込み禁止状態に設定される度に任意の記憶領域に記憶される、テンポラリ変数である場合には、割り込み禁止状態から割り込み許可状態に切り替わる際に記憶領域が開放されるので、ネスト回数を初期化する必要はない。
従って、このような場合には、S100の再初期化処理において、S102の処理を実行する必要はなく、レジスタ12を初期化するS104の処理だけを実行するようにすればよい。また、変形例のS200にて実行される異常判定処理では、S210において、レジスタ12が正常か否かを判定するようにすればよい。
[第2実施形態]
次に、本開示の第2実施形態について説明する。
本実施形態の制御装置は、第1実施形態と同様、車両に搭載されて車両各部を制御するのに用いられるECU1であり、第1実施形態と異なる点は、図10に示すように、制御部として、第1CPUコア10Aと、第2CPUコア10Bとを備えている点である。
つまり、本実施形態のECU1は、CPUとしてデュアルコアのマルチプロセッサを備えており、ROM30に記憶されたQMソフトやASILソフトのプログラムを実行する際、2つのCPUコア10A,10Bにて並列処理することができるようにされている。
そして、記憶部としてのSRAM20には、各CPUコア10A,10Bが共に利用可能な共通記憶領域24が設定されている。
この共通記憶領域24は、各CPUコア10A,10Bが使用権を取得することにより排他的に利用可能となる領域である。そして、この共通記憶領域24には、こうした排他機能を実現するためのパラメータとして、スピンロックバッファ、スピンロックオーナー、及び、ネスト回数が設定される。
ここで、スピンロックバッファは、共通記憶領域24が使用されているか未使用状態であるかを表す情報である。そして、各CPUコア10A,10Bは、スピンロックバッファの情報と使用中を表す情報(例えば「0x00」)とを交換(SWAP)し、未使用状態を表す情報(例えば「0x5A」)を取得することで、使用権を取得する。
また、スピンロックオーナーは、使用権を取得したCPUコアを特定する情報であり、各CPUコア10A,10Bは、使用権を取得すると、スピンロックオーナーとして自身の値を設定する。
つまり、第1CPUコア10Aは、使用権を取得すると、スピンロックオーナーとして、例えば「0x00」を設定し、第2CPUコア10Bは、使用権を取得すると、スピンロックオーナーとして、例えば「0x01」を設定する。
また、各CPUコア10A,10Bは、共通記憶領域24の利用を終了すると、スピンロックバッファに、未使用状態を表す値(例えば「0x5A」)を設定し、スピンロックオーナーとして、フリーを表す値(例えば「0xFF」)を設定する。
また、ネスト回数は、共通記憶領域24の使用権を取得したCPUコアが実行するプログラム(以下、コア間排他処理)の実施回数に応じて、初期値「0」から「1」,「2」,…と更新される値であり、例えば、0〜255の値を設定可能になっている。なお、コア間排他処理は、本開示の制御部間排他処理に相当する。
スピンロックバッファ、スピンロックオーナー、及び、ネスト回数の各パラメータは、各CPUコア10A,10Bが、共通記憶領域24を排他的に利用するコア間排他処理を実行する際に、共通記憶領域24の未使用状態を表す初期値から書き換えられる。
つまり、例えば、図11は、各CPUコア10A,10Bが起動後、QMソフト及びASILソフトの定期タスクを順に実行する際の動作を表している。
図11に示すように、各CPUコア10A,10Bは、起動すると、所定の初期化処理を実行し、その後、一定周期で、QMソフト及びASILソフトの定期タスクを実行する。
そして、CPUコア10A,10Bの内の一方(例えば第1CPUコア10A)は、初期化処理の実行時に、図12に示す手順で、上記各パラメータを、未使用状態を表す初期値に設定する。
すなわち、第1CPUコア10Aは、初期化処理の実行時には、図12に示すように、S210にて、スピンロックバッファに、未使用状態を表す値(例えば「0x5A」)を設定する。
そして、続くS220では、スピンロックオーナーに、フリーを表す値(例えば「0xFF」)を設定し、続くS230にて、ネスト回数に「0」を表す値を設定する。この結果、上記各パラメータは、初期値に設定されることになる。
また、図11に示すように、各CPUコア10A,10Bは、QMソフト及びASILソフトの定期タスクにおいて、コア間排他処理を実行する際には、そのコア間排他処理の開始時にコア間排他開始処理を実行することで、共通記憶領域24の使用権を取得する。
なお、図11には、コア間排他処理は、ASILソフトの定期タスクで実行されるものとして記載されているが、コア間排他処理は、QMソフトの定期タスクでも、これら定期タスク以外のプログラムでも適宜実行される。
そして、そのコア間排他処理の開始時に実行されるコア間排他開始処理(以下、開始処理)では、図13に示す手順で、上記各パラメータを、自身が共通記憶領域24を使用中であることを表す値に設定する。
すなわち、図13に示すように、開始処理においては、まずS310にて、当該開始処理を実行中であるCPUコア自身の情報(以下、実行CPU)を取得し、続くS320にて、現在設定されているスピンロックオーナーを読み込む。
次に、続くS330では、S320にて読み込んだスピンロックオーナーが、S310にて取得した実行CPUであるか否かを判断する。そして、スピンロックオーナーが実行CPUであれば、S370に移行して、ネスト回数をカウントアップ(+1)し、当該開始処理を終了する。
S330にて、スピンロックオーナーは実行CPUではないと判断されると、共通記憶領域24の使用権を取得するために、S340にて、スピンロックバッファの情報と使用中を表す情報(例えば「0x00」)とを交換(SWAP)し、S350に移行する。
そして、S350では、S340でのSWAPの結果、未使用状態を表す情報(例えば「0x5A」)を取得できたか否かを判断し、未使用状態を表す情報を取得できていなければ、再度340に移行する。つまり、S350では、S340にて未使用状態を表す情報が取得されるまで、S340の処理を実行することで、未使用状態を表す情報が取得されるのを待つ。
S350にて、未使用状態を表す情報を取得できたと判断されると、共通記憶領域24の使用権を取得できものとして、S360に移行する。そして、S360では、スピンロックオーナーに、実行CPUを設定し、続くS370にて、ネスト回数をカウントアップ(+1)した後、当該開始処理を終了する。
次に、各CPUコア10A,10Bは、コア間排他処理の終了時には、図14に示す手順で、コア間排他終了処理を実行することにより、上記各パラメータを初期値に戻し、共通記憶領域24を使用できるようにする。
図14に示すように、コア間排他終了処理(以下、終了処理)においては、まずS410にて、ネスト回数を読み込み、続くS420にて、その読み込んだネスト回数は、開始処理実行後のコア間排他処理によって初期値「0」に戻されているか否かを判断する。
そして、S420にて、ネスト回数は初期値「0」ではないと判断されると、コア間排他処理は終了していない判断して、当該終了処理を終了する。
一方、S420にて、ネスト回数は初期値「0」であると判断されると、コア間排他処理は終了したと判断して、S430に移行し、スピンロックオーナーに、フリーを表す値(例えば「0xFF」)を設定する。
そして、続くS440では、スピンロックバッファに、未使用状態を表す値(例えば「0x5A」)を設定し、当該終了処理を終了する。
このように、各CPUコア10A,10Bは、コア間排他処理を実行する際には、開始処理を実行して、共通記憶領域24の使用権を取得する。
従って、図15に示すように、スピンロックバッファ、スピンロックオーナー、及び、ネスト回数は、使用権を取得したCPUコアにより、共通記憶領域24を使用中であることを表す値に設定され、他のCPUコアは、共通記憶領域24を使用できなくなる。
また、使用権を取得したCPUコアがコア間排他処理を終了する際には、コア間排他処理の実行によりネスト回数が初期値「0」に戻り、スピンロックバッファ及びスピンロックオーナーも、終了処理にて初期値に戻される。
この結果、共通記憶領域24は開放され、各CPUコア10A,10Bは、コア間排他処理の開始処理にて、共通記憶領域24の使用権を取得することができるようになる。
このように、共通記憶領域24が開放されているときには、通常、スピンロックバッファ、スピンロックオーナー、及び、ネスト回数は、初期値になるが、これら各パラメータは、QMソフトのバグ等によって書き換えられて、初期値に戻らないことがある。
そこで、本実施形態では、図11に例示するように、ASILソフトの定期タスクにおいて、定期タスクの終了時に図16に示す再初期化処理を実行することで、上記各パラメータを初期値に戻すようにされている。
図16に示すように、この再初期化処理においては、まずS510にて、当該再初期化処理を実行中であるCPUコア自身の情報(実行CPU)を取得し、続くS520にて、現在設定されているスピンロックオーナーを読み込む。
次に、続くS530では、S520にて読み込んだスピンロックオーナーは、S510にて取得した実行CPUとは異なるもう一つのCPUコア(他CPU)であるか否かを判断する。
そして、スピンロックオーナーは、他CPUではない場合、つまり、スピンロックオーナーが実行CPU、フリー、又は、設定範囲外の値である場合には、S540に移行して、スピンロックオーナーに、フリーを表す値(例えば「0xFF」)を設定する。
また、続くS550では、スピンロックバッファに、未使用状態を表す値(例えば「0x5A」)を設定し、最後に、S560にて、ネスト回数に初期値「0」を設定し、当該再初期化処理を終了する。
また、S530にて、スピンロックオーナーは他CPUであると判断された場合には、他のCPUコアが共通記憶領域24を使用しているので、当該再初期化処理を終了する。
以上説明したように、本実施形態のECU1においては、制御部として2つのCPUコア10A,10Bを備える。そして、各CPUコア10A,10Bがプログラムを実行する際には、コア間排他処理を実行することにより、SRAM20の共通記憶領域24を排他的に利用できるようにされている。
また、各CPUコア10A,10Bが、コア間排他処理を実行する際には、開始処理にて、共通記憶領域24の使用権を取得し、スピンロックバッファ、スピンロックオーナー、及び、ネスト回数を、自身が使用中であることを表す値に設定する。そして、コア間排他処理を終了する際には、終了処理にて、これら各パラメータを初期値に戻すようにされている。
また、これら各パラメータは、QMソフトのバグ等によって異常な値に書き換えられることがあるので、ASILソフトの定期タスクにおいて、再初期化処理を実行する。そして、この再初期化処理は、CPUコア自身がコア間排他処理を実行しておらず、他のCPUコアが共通記憶領域24を使用していない、という条件下で、上記各パラメータを初期値に戻すようにされている。
従って、本実施形態のECU1によれば、上記各パラメータがQMソフトのバグ等によって異常な値に書き換えられても、ASILソフトの定期タスクの実行周期で、各パラメータを初期値に戻すことができる。
よって、CPUコア10A,10Bは、コア間排他処理にて、SRAM20の共通記憶領域を排他的に使用することで、各種プログラムを正常に実行できるようになる。
また、このためには、ASILソフトの定期タスクにおいて、図16に示す再初期化処理を実行するだけでよく、ハードウェア資源や処理負荷の増加を招くことがないので、低コストで実現できる。
なお、図11においては、図16に示す再初期化処理を、ASILソフトの定期タスクの終了領域で実施するものとされているが、図16に示す再初期化処理は、その定期タスクの先頭領域で実施するようにしてもよい。
また、図11では、QMソフトの定期タスクとASILソフトの定期タスクは連続的に実行されるように記載されているが、図7に示すように、これら各定期タスクは、それぞれ、異なるタイミングで分散して実施されてもよい。
そして、この場合でもASILソフトの定期タスクにおいて、コア間排他処理が実施されない先頭領域、若しくは、終了領域にて、図16に示す再初期化処理を実行することで、上記と同様の効果を得ることができる。
また、本実施形態では、ASILソフトの定期タスクを実行する度に、図16に示す再初期化処理を実行するものとして説明したが、再初期化処理を周期的に実行する際には、その実行周期をFTTIよりも短い時間に設定すればよい。
従って、図16に示す再初期化処理は、第1実施形態と同様、ASILソフトの定期タスクの複数回に1回の割で実施するようにしてもよい。
また、図16に示す再初期化処理において、上記各パラメータを初期値に設定するS540〜S560の処理は、必ずしも周期的に実行する必要はなく、例えば、各パラメータの異常を検知したときにだけ、各パラメータを初期値に設定するようにしてもよい。
つまり、第1実施形態の変形例と同様、ASILソフトの定期タスクにおいては、上記各パラメータの異常を判定する異常判定処理を実行する。
この異常判定処理では、図16のS510〜S530を実行することで、スピンロックオーナーは他CPUではないことを確認した上で、上記各パラメータの少なくとも1つが初期値から外れているか否かを判断する。
そして、上記各パラメータの少なくとも1つが初期値から外れている場合には、異常と判断して、タイマ40にFTTIよりも短い一定時間ΔTを設定する。
この結果、異常判定処理にて異常が判定されると、その後、一定時間ΔTが経過したタイミングで、タイマ40から割り込み信号が出力されるので、異常を判定したCPUコアが、その割り込み信号にて、再初期化処理を実行するようにする。
なお、このようにタイマ割り込みにて起動される再初期化処理においては、図16に示したS540〜S560の処理を実行することで、上記各パラメータを初期値に設定するようにする。
このように、上記各パラメータの異常検出時にだけ、タイマ割り込みにて、再初期化処理を実行するようにしても、上記各パラメータの何れかが異常値に書き換えられてから、FTTIが経過するまでの間に、各パラメータを初期値に戻すことができる。
よって、このようにしても、車両の安全性を損なうことなく、制御を継続することができるようになる。また、この場合、上記各パラメータの何れかが異常値に書き換えられたときにだけ、再初期化処理が実行されることから、再初期化処理の実行頻度を抑え、CPU10の処理負荷を低減することができる。
なお、図16の再初期化処理では、S540〜S560において、スピンロックバッファ、スピンロックオーナー、及び、ネスト回数の各パラメータを、初期値に設定するものとして説明した。
しかし、コア間排他処理のネスト回数が、コア間排他処理が実行される度に任意の記憶領域に記憶されるテンポラリ変数である場合には、S560にて、ネスト回数を初期化する必要はない。
以上、本開示の実施形態について説明したが、本開示は上述の実施形態に限定されることなく、種々変形して実施することができる。
例えば、上記各実施形態では、安全度が異なる複数のソフトウェアとして、ASILソフトとQMソフトとを例に採り説明したが、ソフトウェアの安全度は更に細かく分類されることもある。例えば、ASILソフトは、ASIL−A、ASIL−B、…というよう分類されることがある。
従って、このようにソフトウェアの安全度が3つ以上に分類されている場合には、これらのソフトウェアのうち、安全度が最も高いソフトウェアの定期タスク等で、上記各パラメータを初期化するようにすれば、上記各実施形態と同様の効果を得ることができる。
また、上記第2実施形態では、第1CPUコア10Aと第2CPUコア10Bとの2つのCPUコアを備えた制御装置について説明した。しかし、3つ以上のCPUコアを備えた制御装置であっても、各CPUコアが再初期化処理を実行するように構成することで、上記第2実施形態と同様の効果を得ることができる。
また、上記実施形態における1つの構成要素が有する複数の機能を、複数の構成要素によって実現したり、1つの構成要素が有する1つの機能を、複数の構成要素によって実現したりしてもよい。また、複数の構成要素が有する複数の機能を、1つの構成要素によって実現したり、複数の構成要素によって実現される1つの機能を、1つの構成要素によって実現したりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加又は置換してもよい。
本開示は、制御装置(ECU1)の他、当該制御装置を構成要素とするシステム、当該制御装置としてコンピュータを機能させるためのプログラム、このプログラムを記録した半導体メモリ等の非遷移的実態的記録媒体など、種々の形態で実現することができる。
1…ECU、10…CPU、10A…第1CPUコア、10B…第2CPUコア、12…レジスタ、20…SRAM、22…記憶領域、24…共通記憶領域

Claims (8)

  1. 安全度が異なる複数のソフトウェアのプログラムを実行することにより制御対象を制御する制御部(10)と、
    前記制御部による前記プログラムの実行時にデータの書き込み及び更新が行われる記憶部(20)と、
    割り込み禁止/許可設定用のレジスタ(12)と、
    を備え、前記制御部は、
    前記複数のソフトウェアのプログラムの実行中に、他のプログラムの実行を禁止する際には、前記レジスタに割り込み禁止を設定することで、他のプログラムの実行を禁止し、前記実行中のプログラムが終了すると、前記レジスタに割り込み許可を設定することで、他のプログラムの実行を許可する割り込み禁止処理を実施し、
    しかも、前記複数のソフトウェアのうち、前記安全度が最も高いソフトウェアのプログラムを実行しているときには、前記割り込み許可の状態が保証されるタイミングで、前記レジスタを、割り込みを許可する初期状態に設定する、再初期化処理を実施するよう構成されている、制御装置。
  2. 請求項1に記載の制御装置であって、
    前記制御部は、前記安全度が最も高いソフトウェアのプログラムの一つとして、所定時間毎に定期タスクを実行し、該定期タスクにおいて前記割り込み禁止処理が実行されない先頭領域若しくは終了領域にて、前記再初期化処理を実施するように構成されている、制御装置。
  3. 請求項1に記載の制御装置であって、
    前記制御部は、前記再初期化処理において、前記レジスタが前記初期状態に設定されているか否かを判断し、前記レジスタが前記初期状態でない場合には、タイマ割り込み用のタイマを起動することで、その後、前記制御対象の安全が侵害されない時間として規定されたフォールトトレラント時間が経過するまでの間に、タイマ割り込みにて、前記レジスタを初期状態に設定するように構成されている、制御装置。
  4. 請求項1〜請求項3の何れか1項に記載の制御装置であって、
    前記制御部は、前記割り込み禁止処理の進行に応じてネスト回数を更新して、前記記憶部の所定の記憶領域(22)に記憶し、前記割り込み禁止/許可設定用のレジスタを前記初期状態に設定するときには、前記記憶部の所定の記憶領域に記憶された前記ネスト回数を初期値に戻すように構成されている、制御装置。
  5. 制御対象を制御するために、安全度が異なる複数のソフトウェアのプログラムを分散して実行する複数の制御部(10A,10B)と、
    前記複数の制御部による前記プログラムの実行時にデータの書き込み及び更新が行われ、前記複数の制御部にて排他的に利用される共通記憶領域(24)を有する記憶部(20)と、
    を備え、
    前記複数の制御部は、それぞれ、
    前記複数のソフトウェアのプログラムの実行中に、前記共通記憶領域を利用する際には、前記共通記憶領域に記憶されたデータから前記共通記憶領域が未使用状態であるか否かを判断し、前記共通記憶領域が他の制御部にて使用されている場合には、前記共通記憶領域が未使用状態となるまで、前記プログラムの実行を停止させ、前記共通記憶領域が未使用状態になるか、或いは、未使用状態である場合には、前記共通記憶領域に未使用状態とは異なるデータを書き込むことで、前記プログラムを継続して実行し、前記共通記憶領域の利用が完了すると、他の制御部が利用できるように、前記共通記憶領域に未使用状態を表す初期データを記憶する、制御部間排他処理を実行し、
    しかも、前記複数のソフトウェアのうち、前記安全度が最も高いソフトウェアのプログラムの実行中には、前記制御部間排他処理を実施していない状態が保証されるタイミングで、前記共通記憶領域に前記初期データを記憶させる再初期化処理を実行する、
    ように構成されている、制御装置。
  6. 請求項5に記載の制御装置であって、
    前記複数の制御部は、それぞれ、前記安全度が最も高いソフトウェアのプログラムの一つとして、所定時間毎に定期タスクを実行し、該定期タスクにおいて前記制御部間排他処理が実行されない先頭領域若しくは終了領域にて、前記再初期化処理を実行するように構成されている、制御装置。
  7. 請求項5に記載の制御装置であって、
    前記複数の制御部は、それぞれ、前記再初期化処理において、前記共通記憶領域が未使用状態であるか否かを判断し、前記共通記憶領域が未使用状態ではないと判断すると、タイマ割り込み用のタイマを起動することで、その後前記制御対象の安全が侵害されない時間として規定されたフォールトトレラント時間が経過するまでの間に、タイマ割り込みにて、前記共通記憶領域に前記初期データを記憶させるように構成されている、制御装置。
  8. 請求項5〜請求項7の何れか1項に記載の制御装置であって、
    前記複数の制御部は、それぞれ、前記制御部間排他処理の進行に応じてネスト回数を更新して、前記データの一つとして前記記憶部の前記共通記憶領域に記憶し、前記再初期化処理では、前記ネスト回数を初期値に戻すように構成されている、制御装置。
JP2020018023A 2020-02-05 2020-02-05 制御装置 Active JP7322734B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2020018023A JP7322734B2 (ja) 2020-02-05 2020-02-05 制御装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020018023A JP7322734B2 (ja) 2020-02-05 2020-02-05 制御装置

Publications (2)

Publication Number Publication Date
JP2021124959A true JP2021124959A (ja) 2021-08-30
JP7322734B2 JP7322734B2 (ja) 2023-08-08

Family

ID=77459206

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020018023A Active JP7322734B2 (ja) 2020-02-05 2020-02-05 制御装置

Country Status (1)

Country Link
JP (1) JP7322734B2 (ja)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6873789B2 (ja) 2017-03-31 2021-05-19 株式会社川本製作所 プラグ
JP6902948B2 (ja) 2017-07-13 2021-07-14 日立Astemo株式会社 車両制御装置

Also Published As

Publication number Publication date
JP7322734B2 (ja) 2023-08-08

Similar Documents

Publication Publication Date Title
US5930823A (en) Shared data storage for two hosts with a storage manager that permits each host to exclusively read operating system
WO2010067492A1 (ja) マルチプロセッサシステム及びその排他制御の調停方法
US7516254B2 (en) Memory control apparatus
US10229077B2 (en) Method for data transfer between real-time tasks using a DMA memory controller
JP6723941B2 (ja) 制御装置および制御プログラム更新方法
JP5533789B2 (ja) 車載電子制御装置
CN114780248A (zh) 资源访问方法、装置、计算机设备及存储介质
JP7322734B2 (ja) 制御装置
KR101305502B1 (ko) 컴퓨터 시스템 및 그 제어 방법
US7177966B2 (en) Microcomputer minimizing influence of bus contention
US10269194B2 (en) Multiprocessor system and vehicle control system
JP5517301B2 (ja) データ処理システム
WO2011158441A1 (ja) データ処理装置および方法、そのプロセッサユニット
US20200233826A1 (en) Method for maintaining memory sharing in a computer cluster
JP4983632B2 (ja) 情報通信システム、そのアクセス調停方法及びその制御プログラム
JP6466269B2 (ja) 電子制御装置及びスタック領域の使用監視方法
JP2017107394A (ja) 車両用制御装置
CN107710162B (zh) 电子控制装置及栈使用方法
JP6009518B2 (ja) 電子制御装置
JP5942904B2 (ja) 処理装置
JP2020204877A (ja) 半導体装置及びその動作方法
JP2014241124A (ja) 排他制御システム
JP6877475B2 (ja) 電子制御装置及びスタック使用方法
JP2017204286A (ja) 車両用制御装置
US20140207989A1 (en) Access control to a jointly exclusively usable transmission medium

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220519

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230627

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230710

R151 Written notification of patent or utility model registration

Ref document number: 7322734

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151