(57)【要約】【課題】車載制御プログラムの動作検証を行うことを目的に、特に、短周期処理の実行時データを作成／送信する際に、その処理自体によって生じるＣＰＵ負荷の増加量と本来の処理タイミングの変化量を最小に抑える。【解決手段】複数の処理を有する車載制御プログラムを実行するＣＰＵと、複数のチャネルを有し、ＣＰＵがアクセス可能なアドレス空間内のデータを、ＣＰＵを使用せずにＤＭＡ転送することができるＤＭＡＣとを備え、実行時データの作成、および実行時データの送信の少なくともいずれか一方を、ＣＰＵを介さずにＤＭＡ転送により実行する。【選択図】図１
2018041130.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理を有する車載制御プログラムを実行するＣＰＵと、
複数のチャネルを有し、前記ＣＰＵがアクセス可能なアドレス空間内のデータを、前記ＣＰＵを使用せずにＤＭＡ転送することができるダイレクトアクセスメモリコントローラであるＤＭＡＣと、
前記ＤＭＡ転送でカウント値を取得可能なハードウェアタイマと、
前記車載制御プログラムを格納するとともに、前記ＤＭＡ転送でアクセス可能なＲＯＭと、
前記ＤＭＡ転送でアクセス可能なＲＡＭと、
外部機器とデータ通信を行う外部通信インターフェイスと
を備えた車載制御装置において、前記車載制御プログラムを実行する際に、前記複数の処理のそれぞれの実行タイミングあるいは実行内容をモニタリングするための実行時データの作成および送信を行うための、車載制御プログラムの実行時データ取得方法であって、
前記実行時データの作成、および前記実行時データの送信の少なくともいずれか一方を、前記ＣＰＵを介さずに前記ＤＭＡ転送により実行するに当たり、前記ＤＭＡＣは、
前記実行時データの作成を前記ＤＭＡ転送により実行する場合には、
実行時データを取得する時点で、第１のチャネルによる第１のＤＭＡ転送により前記ハードウェアタイマのカウント値を読み出すことで時刻データを収集し、
前記時刻データの収集後、第２のチャネルによる第２のＤＭＡ転送により、前記複数の処理の実行順序に従ってあらかじめ前記ＲＯＭ内に格納された、前記複数の処理を識別するための識別番号を読み出し、前記時刻データに対応した前記識別番号を収集することで、前記実行時データを作成し、
前記実行時データの送信を前記ＤＭＡ転送により実行する場合には、
あらかじめ決められた制御１周期分に相当する実行時データが作成された後に、前記第１のチャネルおよび前記第２のチャネル以外のチャネルによるＤＭＡ転送により、前記制御１周期分の前記実行時データを、前記外部通信インターフェイスを介して前記外部機器に送信する
車載制御プログラムの実行時データ取得方法。
【請求項２】
前記ＤＭＡＣは、
前記車載制御プログラムの処理が実行時データを取得する時点で前記第１のチャネルによる前記第１のＤＭＡ転送を開始する第１ステップと、
前記第１のＤＭＡ転送により前記ハードウェアタイマのカウント値を読み出し、読み出し結果を前記ＲＡＭ内に設けられた実行時データ記憶領域内の時刻記憶配列へ転送する第２ステップと、
前記第１のＤＭＡ転送の完了により、前記第２のチャネルによる前記第２のＤＭＡ転送を開始する第３ステップと、
前記第２のＤＭＡ転送により、実行時データの前記識別番号を前記ＲＯＭから読み出し、前記ＲＡＭ内に設けられた前記実行時データ記憶領域内の識別番号記憶配列へ転送する第４ステップと
を実行することで、前記時刻記憶配列および前記識別番号記憶配列からなる前記実行時データを、前記ＤＭＡ転送を実行することにより作成する
請求項１に記載の車載制御プログラムの実行時データ取得方法。
【請求項３】
前記ＤＭＡＣは、
前記制御１周期分の実行時データが作成された後に、第３のチャネルによる第３のＤＭＡ転送を開始する第５ステップと、
前記第３のＤＭＡ転送により、前記制御１周期分の実行時データをその先頭から前記外部通信インターフェイスが持つ送信バッファの分だけ転送する第６ステップと、
前記第３のＤＭＡ転送の完了により第４のチャネルによる第４のＤＭＡ転送を開始する第７ステップと、
前記第４のＤＭＡ転送により、前記ＲＯＭ内にあらかじめ記憶された第６のチャネルを許可状態にする値を、前記第６のチャネルのレジスタに転送する第８ステップと、
前記第４のＤＭＡ転送の完了により、第５のチャネルによる第５のＤＭＡ転送を開始する第９ステップと、
前記第５のＤＭＡ転送により、前記ＲＯＭ内にあらかじめ記憶された前記外部通信インターフェイスへの送信要求値を、前記ＲＯＭから転送する第１０ステップと、
前記外部通信インターフェイスが前記送信バッファの分のデータ送信を完了した際に前記第６のチャネルによる第６のＤＭＡ転送を開始する第１１ステップと、
前記第６のＤＭＡ転送により、前記制御１周期分の実行時データのうち、前記第３のＤＭＡ転送で未転送のデータを引き継いで前記外部通信インターフェイスへ転送する第１２ステップと、
前記第６のＤＭＡ転送の完了により、前記第５のチャネルによる前記第５のＤＭＡ転送を開始する第１３ステップと、
以後、前記外部通信インターフェイスに対して前記制御１周期分の実行時データの全ての提供が完了するまで、前記第５のＤＭＡ転送および前記第６のＤＭＡ転送を繰り返す第１４ステップと、
前記第６のＤＭＡ転送により前記制御１周期分の実行時データの全てを転送完了した際に、前記第６のチャネルを禁止状態にする第１５ステップと
を有する請求項１に記載の車載制御プログラムの実行時データ取得方法。
【請求項４】
前記ＤＭＡＣは、
前記第４ステップによる前記第２のＤＭＡ転送の完了により、前記制御１周期分の実行時データが作成された後に、第３のチャネルによる第３のＤＭＡ転送を開始する第５ステップと、
前記第３のＤＭＡ転送により、前記制御１周期分の実行時データを先頭から前記外部通信インターフェイスが持つ送信バッファの分だけ転送する第６ステップと、
前記第３のＤＭＡ転送の完了により第４のチャネルによる第４のＤＭＡ転送を開始する第７ステップと、
前記第４のＤＭＡ転送により、前記ＲＯＭ内にあらかじめ記憶された第６のチャネルを許可状態にする値を、前記第６のチャネルのレジスタに転送する第８ステップと、
前記第４のＤＭＡ転送の完了により、第５のチャネルによる第５のＤＭＡ転送を開始する第９ステップと、
前記第５のＤＭＡ転送により、前記ＲＯＭ内にあらかじめ記憶された前記外部通信インターフェイスへの送信要求値を、前記ＲＯＭから転送する第１０ステップと、
前記外部通信インターフェイスが前記送信バッファの分のデータ送信を完了した際に前記第６のチャネルによる第６のＤＭＡ転送を開始する第１１ステップと、
前記第６のＤＭＡ転送により、前記制御１周期分の実行時データのうち、前記第３のＤＭＡ転送で未転送のデータを引き継いで前記外部通信インターフェイスへ転送する第１２ステップと、
前記第６のＤＭＡ転送の完了により、前記第５のチャネルによる前記第５のＤＭＡ転送を開始する第１３ステップと、
以後、前記外部通信インターフェイスに対して前記制御１周期分の実行時データの全ての提供が完了するまで、前記第５のＤＭＡ転送および前記第６のＤＭＡ転送を繰り返す第１４ステップと、
前記第６のＤＭＡ転送により前記制御１周期分の実行時データの全てを転送完了した際に、前記第６のチャネルを禁止状態にする第１５ステップと
を有する請求項２に記載の車載制御プログラムの実行時データ取得方法。
【請求項５】
前記ＤＭＡＣは、非周期的に開始する非周期処理の実行時データを作成する場合には、
前記第６のＤＭＡ転送が完了した際に、前記非周期処理に対応する第７のチャネルによる第７のＤＭＡ転送を開始させ、前記実行時データ記憶領域内の非周期処理に対応する識別番号記憶配列の第１要素に、無効な識別番号を転送する第１６ステップ
を有する請求項４に記載の車載制御プログラムの実行時データ取得方法。
【請求項６】
複数の処理を有する車載制御プログラムを実行するＣＰＵと、
複数のチャネルを有し、前記ＣＰＵがアクセス可能なアドレス空間内のデータを、前記ＣＰＵを使用せずにＤＭＡ転送することができるダイレクトアクセスメモリコントローラであるＤＭＡＣと、
前記ＤＭＡ転送でカウント値を取得可能なハードウェアタイマと、
前記車載制御プログラムを格納するとともに、前記ＤＭＡ転送でアクセス可能なＲＯＭと、
前記ＤＭＡ転送でアクセス可能なＲＡＭと、
外部機器とデータ通信を行う外部通信インターフェイスと
を備え、前記車載制御プログラムを実行する際に、前記複数の処理のそれぞれの実行タイミングあるいは実行内容をモニタリングするための実行時データの作成および送信を行う車載制御装置であって、
前記ＤＭＡＣは、前記実行時データの作成、および前記実行時データの送信の少なくともいずれか一方を、前記ＣＰＵを介さずに前記ＤＭＡ転送により実行するに当たり、
前記実行時データの作成を前記ＤＭＡ転送により実行する場合には、
実行時データを取得する時点で、第１のチャネルによる第１のＤＭＡ転送により前記ハードウェアタイマのカウント値を読み出すことで時刻データを収集し、
前記時刻データの収集後、第２のチャネルによる第２のＤＭＡ転送により、前記複数の処理の実行順序に従ってあらかじめ前記ＲＯＭ内に格納された、前記複数の処理を識別するための識別番号を読み出し、前記時刻データに対応した前記識別番号を収集することで、前記実行時データを作成し、
前記実行時データの送信を前記ＤＭＡ転送により実行する場合には、
あらかじめ決められた制御１周期分に相当する実行時データが作成された後に、前記第１のチャネルおよび前記第２のチャネル以外のチャネルによるＤＭＡ転送により、前記制御１周期分の前記実行時データを、前記外部通信インターフェイスを介して前記外部機器に送信する
車載制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の処理を有する車載制御プログラムの動作検証を行う目的で、複数の処理のそれぞれの実行タイミングあるいは実行内容をモニタリングするための実行時データを取得する、車載制御プログラムの実行時データ取得方法および車載制御装置に関する。
【背景技術】
【０００２】
昨今の車載制御装置では、その制御プログラムの規模が増加しており、その構造も複雑化し、多様化している。これに伴って、制御プログラムを実行するＣＰＵも、高機能化および高速化のために、アーキテクチャが複雑化し、また、キャッシュメモリを備える等の構成を採用している。このことにより、制御プログラムの実行結果の予測が容易でなくなっている。
【０００３】
このようなハードウェアの変化に加え、ソフトウェアの変化もある。制御プログラムの開発費用を削減するために、ソフトウェアの再利用性を向上させる必要がある。そして、その一手段として、制御プログラムの基本部分にリアルタイムオペレーティングシステム（以下、「ＲＴＯＳ」と記す）を採用することで、ソフトウェアの再利用性の向上が図られている。
【０００４】
ＲＴＯＳにおける基本的な実行単位は、タスクであり、通常は、ＲＴＯＳ上で複数動作するように作成され、各タスクは、優先度に基づいて動作するように設定される。タスクの優先度は、ＲＴＯＳ内のスケジューラによって評価され、より優先度の高いタスクにＣＰＵが割り当てられる。
【０００５】
このような優先度に基づいたＲＴＯＳのスケジューラの挙動は、ＲＴＯＳを使用しない従来のスケジューラの挙動と異なることが多い。従って、新規にＲＴＯＳを採用した場合、例えば、処理が開始および終了するタイミングなど、制御プログラム内の各処理の実行タイミングが変化することがある。その結果、制御プログラムが正しく動作しなくなることがある。
【０００６】
また、新規にＲＴＯＳを使用せず、同一のＲＴＯＳを継続使用して製品の差分開発を行う場合においても、マイコンの変更、制御プログラムの仕様変更、機能の追加等の要因で、制御プログラム内の各処理の実行タイミング等が変化する。
【０００７】
上述したようなハードウェアおよびソフトウェアの変化の中で、制御プログラム内の各処理の挙動または実行タイミングをあらかじめ十分な精度で予測することは難しい。また、高い精度で予測できていると考えられる場合であっても、その予測が妥当であることを確認する必要がある。
【０００８】
このため、制御プログラムの挙動や実行タイミング等に問題がないことを、車載制御装置およびその制御プログラムを実際の使用条件の下で動作させながら確認する手段が必要になる。
【０００９】
確認のために用いられる手段の一例としては、リアルタイムトレース機能が知られている。具体例としては、例えば、Green Hills Software社により製品化されている「Super Trace Probe」が挙げられ、以下の説明では、この「Super Trace Probe」に相当する技術を、従来技術１と称することとする。
【００１０】
この従来技術１は、マイコンに備えられているオンチップデバッガと専用ピンを介して接続することで、制御プログラム実行中にオンチップデバッガから各処理の実行タイミングや、処理実行時の実行内容を示す変数の値等を取得することで、リアルタイムトレース機能を実現している。ここで、各処理の実行タイミングや、処理実行時の実行内容を示す変数の値等のことを、以下の説明では、「実行時データ」と称することとする。
【００１１】
従来技術１によれば、例えば、ＣＰＵが実行するアドレスおよびその時刻など、マイコンのＣＰＵの実行時データを取得可能である。従って、実行時データをＰＣに転送し、ＰＣ上で解析して可視化することにより、プログラムのどの処理がいつ実行されたかを知ることができる。
【００１２】
従来技術１は、実行時データを、オンチップデバッガに備えられているトレースメモリまたはトレースバッファと呼ばれるＲＡＭに蓄積する。さらに、従来技術１は、このＲＡＭが満杯となった時点で、実行時データの蓄積を終了するか、あるいは新しいデータを古いデータに上書きしながら実行時データの取得を継続することになる。
【００１３】
例えば、モータ駆動用インバータや照明駆動用コンバータの制御を行う車載制御装置では、その制御のために数十〜数百μ秒といった短い周期の処理が複数必要になることがある。なお、以下の説明では、このような制御を行う車載制御装置を単に「ＥＣＵ」と称し、上述した短い周期の処理を、「短周期処理」と称することとする。
【００１４】
このような短周期処理の実行時データを従来技術１で取得すると、制御プログラムの挙動の確認ができる量のデータが得られないうちに、トレースバッファが満杯になってしまうという課題がある。
【００１５】
例えば、１００μ秒周期で２０バイトの実行時データをＰＣに送信する場合を考える。この場合には、毎秒２００ｋバイトのトレースバッファを消費することとなり、一般に、オンチップデバッガに備えられているトレースバッファでは、容量が不足する。このため、大容量のトレースバッファをオンチップデバッガの外部に追加し、オンチップデバッガと高速に通信しながらデータを蓄積する機能を備えた、高価なデバッグ装置を使用する必要がある。
【００１６】
また、従来技術１を用いる場合には、マイコンのオンチップデバッガと通信を行うために、配線を行う必要がある。しかしながら、ＥＣＵの開発において、テスト実施の際のＥＣＵは、装置の中に組み込まれており、高速な通信を行う信号線を装置の外まで延長することが困難な場合も多い。
【００１７】
そこで、制御プログラムを実際の使用条件の下で動作させながら確認する別の手段としては、例えば、Ｔｒａｃｅａｌｙｚｅｒ  ｆｏｒ  ＦｒｅｅＲＴＯＳがある（例えば、非特許文献１参照）。このＴｒａｃｅａｌｙｚｅｒ  ｆｏｒ  ＦｒｅｅＲＴＯＳは、実行時データを提供する手段を制御プログラム内の必要な箇所に組み込み、制御プログラム実行時に、マイコンが備える外部通信インターフェイスを用いて実行時データをＰＣへ転送し、ＰＣ上で可視化するものである。
【００１８】
図１０は、非特許文献１における従来の実行時データ取得手法を適用した場合の各処理の開始および終了の際に実行時データを作成する手順を示したフローチャートである。また、図１１は、非特許文献１における従来の実行時データ取得手法を適用した場合の実行時データを外部通信インターフェイスに転送する手順を示したフローチャートである。
【００１９】
非特許文献１によれば、図１０および図１１に例示したように、マイコン内に備えられたＲＡＭに実行時データ蓄積用のバッファを設け、このＲＡＭバッファにデータが満たされたところで、マイコンからＰＣへデータを送信する手段が提供されている。
【００２０】
図１１を実行する処理は、通常、図１０を実行する処理とは別のタイミングで、ＣＰＵの空き時間を利用して実行するものである。従って、ＲＴＯＳを使用する場合には、図１１を実行する処理は、本来の制御処理にできるだけ影響を及ぼさないように、優先度が最も低いタスクとして実行される。
【００２１】
マイコンから提供する実行時データを一部に限定することで、単位時間あたりに実行時データをＲＡＭバッファに蓄積する量を外部通信インターフェイスのデータ転送量よりも少なくすることができる。このような場合には、実行時データを蓄積するＲＡＭバッファを２つの領域に分け、図１１の処理が片方の領域を転送している間に、これに並行して図１０の処理が次のデータを蓄積することが可能となる。このような並行した処理を行うことで、実行時データを滞りなく提供し続けることができる。
【先行技術文献】
【非特許文献】
【００２２】
【非特許文献１】Ｔｒａｃｅａｌｙｚｅｒ  ｆｏｒ  ＦｒｅｅＲＴＯＳ、インターネット  ＜URL : http://percepio.com/docs/FreeRTOS/manual＞
【発明の概要】
【発明が解決しようとする課題】
【００２３】
しかしながら、従来技術には、以下のような課題がある。
モータ制御用のインバータやコンバータの制御を行うＥＣＵにおいて、非特許文献１を用いて実行タイミングを確認する場合を考える。この場合、例えば、実行時データとして、ある処理が開始および終了する際には、図１０のステップＳ１００３〜ステップＳ１００５で示したように、その処理の開始を識別可能な番号およびその処理の終了を識別可能な番号を、それぞれの処理を実行した際の時刻とともにＲＡＭバッファに記憶する必要がある。
【００２４】
なお、以下の説明では、どの処理が開始したかを識別可能とする番号のことを、「処理開始識別番号」と称し、どの処理が終了したかを識別可能とする番号のことを、「処理終了識別番号」と称することとする。
【００２５】
実行時データは、制御プログラムの各処理が開始および終了する際に作成する必要がある。ステップＳ１００３のような、実行時データにおける処理実行時刻を取得する処理の例として、制御プログラムは、マイコン内に備えられているハードウェアタイマを、十分な時間分解能が得られる周期でカウントするように常時動作させておく。
【００２６】
その上で、制御プログラムは、各処理を開始または終了する際に、その時点のハードウェアタイマのカウント値を読み出し、この値に処理開始識別番号または処理終了識別番号を付加し、これをＲＡＭバッファに追記する処理を、各タスクまたは処理の先頭および末尾で実施する。
【００２７】
上述したデータ作成処理例によれば、制御プログラムは、作成したハードウェアタイマのカウント値と処理開始識別番号または処理終了識別番号をＲＡＭバッファに追加する必要がある。このような作成処理を、例えば、割り込み許可状態で実行されるタスク、およびこのタスクを割り込むことが可能なタスクの両方に適用した場合を考える。
【００２８】
このような場合には、前者のタスクが実行時データをＲＡＭバッファの先頭に記憶する直前に、つまり、ステップＳ１００４を実行する直前に、後者のタスクがこれに割り込んで開始され、その実行時データをＲＡＭバッファの先頭に追加するといった状態が発生する。
【００２９】
このような状態が発生した場合には、後者のタスクが終了した後、前者のタスクが処理を再開し、その実行時データをＲＡＭバッファの先頭に追加することで、後者のタスクの実行時データが上書きされ、消失する。
【００３０】
このような上書きによる実行時データの消失を回避するために、実行時データをＲＡＭバッファに追加するタスク処理は、同じように実行時データをバッファに追加する別のタスク処理に割り込まれないように、実行時データをＲＡＭバッファに追加する前に割り込みを禁止し（ステップＳ１００１に相当）、ＲＡＭバッファにデータを追加した後割り込み禁止を解除する操作（ステップＳ１００６に相当）が必要である。
【００３１】
特に、ＲＴＯＳを使用した制御プログラムのタスク処理は、ＣＰＵの動作モードをユーザモードとする場合が多い。従って、この場合の割り込み禁止および禁止解除の処理は、ＣＰＵの動作モードをユーザモードからスーパバイザモードに切り替えてから実行し、その後、再びユーザモードに戻す必要がある。このため、割り込み禁止および禁止解除が実行時データ取得にかかるＣＰＵ時間の多くを占めてしまうことがある。
【００３２】
上述したような、割り込み禁止処理および禁止解除処理を伴う実行時データの追加処理は、それ自体が、ＣＰＵに一定の処理時間を追加することになる。このため、非特許文献１の方法で実行タイミングを取得すると、制御プログラム本来の処理タイミングを大幅に変化させてしまうという課題がある。
【００３３】
特に、ＥＣＵに必要な短周期処理に、上述した実行時データの追加処理を行う場合には、本来実行される処理に対して、実行時データの取得処理の割合が大きくなる。このため、この課題は、深刻である。
【００３４】
また、制御プログラム本来の処理がすでに高いＣＰＵ負荷の下で動作していた場合には、実行時データの取得のために追加消費されるＣＰＵ時間のために、低優先度の処理を実行するためのＣＰＵ時間が確保できなくなり、制御プログラムが正しく動作しなくなることが生じるおそれがある。
【００３５】
さらに、高いＣＰＵ負荷の下では、図１１の実行時データ送信処理を実行する時間が十分に確保できないという課題がある。
【００３６】
本発明は、上記のような課題を解決するためになされたものであり、特に、短周期処理の実行時データを作成および送信する際に、その処理自体によって生じるＣＰＵ負荷の増加量と本来の処理タイミングの変化量を最小に抑え、ＥＣＵの挙動および動作タイミングを確認するために必要なデータを、最小限のＲＡＭバッファで継続的に取得することのできる車載制御プログラムの実行時データ取得方法および車載制御装置を得ることを目的とする。
【課題を解決するための手段】
【００３７】
本発明に係る車載制御プログラムの実行時データ取得方法は、複数の処理を有する車載制御プログラムを実行するＣＰＵと、複数のチャネルを有し、ＣＰＵがアクセス可能なアドレス空間内のデータを、ＣＰＵを使用せずにＤＭＡ転送することができるダイレクトアクセスメモリコントローラであるＤＭＡＣと、ＤＭＡ転送でカウント値を取得可能なハードウェアタイマと、車載制御プログラムを格納するとともに、ＤＭＡ転送でアクセス可能なＲＯＭと、ＤＭＡ転送でアクセス可能なＲＡＭと、外部機器とデータ通信を行う外部通信インターフェイスとを備えた車載制御装置において、車載制御プログラムを実行する際に、複数の処理のそれぞれの実行タイミングあるいは実行内容をモニタリングするための実行時データの作成および送信を行うための、車載制御プログラムの実行時データ取得方法であって、実行時データの作成、および実行時データの送信の少なくともいずれか一方を、ＣＰＵを介さずにＤＭＡ転送により実行するに当たり、ＤＭＡＣは、実行時データの作成をＤＭＡ転送により実行する場合には、実行時データを取得する時点で、第１のチャネルによる第１のＤＭＡ転送によりハードウェアタイマのカウント値を読み出すことで時刻データを収集し、時刻データの収集後、第２のチャネルによる第２のＤＭＡ転送により、複数の処理の実行順序に従ってあらかじめＲＯＭ内に格納された、複数の処理を識別するための識別番号を読み出し、時刻データに対応した識別番号を収集することで、実行時データを作成し、実行時データの送信をＤＭＡ転送により実行する場合には、あらかじめ決められた制御１周期分に相当する実行時データが作成された後に、第１のチャネルおよび第２のチャネル以外のチャネルによるＤＭＡ転送により、制御１周期分の実行時データを、外部通信インターフェイスを介して外部機器に送信するものである。
【００３８】
また、本発明に係る車載制御装置は、複数の処理を有する車載制御プログラムを実行するＣＰＵと、複数のチャネルを有し、ＣＰＵがアクセス可能なアドレス空間内のデータを、ＣＰＵを使用せずにＤＭＡ転送することができるダイレクトアクセスメモリコントローラであるＤＭＡＣと、ＤＭＡ転送でカウント値を取得可能なハードウェアタイマと、車載制御プログラムを格納するとともに、ＤＭＡ転送でアクセス可能なＲＯＭと、ＤＭＡ転送でアクセス可能なＲＡＭと、外部機器とデータ通信を行う外部通信インターフェイスとを備え、車載制御プログラムを実行する際に、複数の処理のそれぞれの実行タイミングあるいは実行内容をモニタリングするための実行時データの作成および送信を行う車載制御装置であって、ＤＭＡＣは、実行時データの作成、および実行時データの送信の少なくともいずれか一方を、ＣＰＵを介さずにＤＭＡ転送により実行するに当たり、実行時データの作成をＤＭＡ転送により実行する場合には、実行時データを取得する時点で、第１のチャネルによる第１のＤＭＡ転送によりハードウェアタイマのカウント値を読み出すことで時刻データを収集し、時刻データの収集後、第２のチャネルによる第２のＤＭＡ転送により、複数の処理の実行順序に従ってあらかじめＲＯＭ内に格納された、複数の処理を識別するための識別番号を読み出し、時刻データに対応した識別番号を収集することで、実行時データを作成し、実行時データの送信をＤＭＡ転送により実行する場合には、あらかじめ決められた制御１周期分に相当する実行時データが作成された後に、第１のチャネルおよび第２のチャネル以外のチャネルによるＤＭＡ転送により、制御１周期分の実行時データを、外部通信インターフェイスを介して外部機器に送信するものである。
【発明の効果】
【００３９】
本発明によれば、実行時データの作成、および実行時データの送信の少なくともいずれか一方を、ＣＰＵを介さずにＤＭＡ転送により実行する構成を備えている。このような構成を備えることで、実行時データの作成にＤＭＡ転送を適用した場合には、ＣＰＵによる実行時データの作成処理が一切不要となり、実行時データの作成に必要なＣＰＵ時間が最小に抑えられる。また、実行時データの送信にＤＭＡ転送を適用した場合には、ＣＰＵが実行時データを外部通信インターフェイスに転送する処理が不要となり、データ転送に必要なＣＰＵ時間を最小に抑えられる。この結果、特に、短周期処理の実行時データを作成／送信する際に、その処理自体によって生じるＣＰＵ負荷の増加量と本来の処理タイミングの変化量を最小に抑え、ＥＣＵの挙動および動作タイミングを確認するために必要なデータを、最小限のＲＡＭバッファで継続的に取得することのできる車載制御プログラムの実行時データ取得方法および車載制御装置を得ることができる。
【図面の簡単な説明】
【００４０】
【図１】本発明の実施の形態１の車載制御装置において、制御対象の制御を実行するとともに、実行時データの作成および送信を実行するＥＣＵの構成の一例を示す図である。
【図２】本発明の実施の形態１におけるＲＯＭに格納されたプログラムの各処理を例示した図である。
【図３】本発明の実施の形態１におけるＲＯＭに記憶された処理の実行タイミングを例示した図である。
【図４】本発明の実施の形態１におけるＲＯＭに設けられた識別番号表を例示した図である。
【図５】本発明の実施の形態１におけるＲＡＭに設けられた実行時データ記憶部を例示した図である。
【図６】本発明の実施の形態１に係るＥＣＵにおける初期化処理の処理手順を示したフローチャートである。
【図７】本発明の実施の形態１に係るＥＣＵにおける第１のＤＭＡチャネルおよび第２のＤＭＡチャネルの初期設定の一例を表形式にまとめたものである。
【図８】本発明の実施の形態１に係るＥＣＵにおける第３のＤＭＡチャネル〜第６のＤＭＡチャネルの初期設定の一例を表形式にまとめたものである。
【図９】本発明の実施の形態１に係るＥＣＵにおける実行時データ取得の際の処理手順を示したフローチャートである。
【図１０】非特許文献１における従来の実行時データ取得手法を適用した場合の各処理の開始および終了の際に実行時データを作成する手順を示したフローチャートである。
【図１１】非特許文献１における従来の実行時データ取得手法を適用した場合の実行時データを外部通信インターフェイスに転送する手順を示したフローチャートである。
【発明を実施するための形態】
【００４１】
以下、本発明の車載制御プログラムの実行時データ取得方法および車載制御装置の好適な実施の形態につき図面を用いて説明する。より具体的には、以下の実施の形態では、制御プログラム内の４つの周期処理が開始および終了するタイミングを実行時データとして取得する例について詳述する。なお、全ての図において、図中、同一、相当部分には、同一符号を付している。
【００４２】
実施の形態１．
図１は、本発明の実施の形態１の車載制御装置において、制御対象の制御を実行するとともに、実行時データの作成および送信を実行するＥＣＵの構成の一例を示す図である。図１に示すＥＣＵ１は、入力回路２、マイコン３、駆動回路１１を備えて構成され、モータ１２を制御するとともに、外部通信線１３と接続されている。
【００４３】
ＥＣＵ１内のマイコン３は、Ｉ／Ｏ（入出力インターフェイス）４、ＣＰＵ５、ＲＯＭ６、ＲＡＭ７、タイマ８、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ Ｃｏｎｔｒｏｌｌｅｒ）９、および外部通信インターフェイス１０を含んで構成されている。
【００４４】
入力回路２は、外部からの信号、あるいは制御対象であるモータ１２からのセンサ信号を電圧として読み取る。そして、Ｉ／Ｏ４は、入力回路２で読み取られた電圧をマイコン３内に取り込み、また、駆動回路１１への制御信号出力も行う。
【００４５】
駆動回路１１は、本実施の形態１においては、モータ１２を駆動する。また、外部通信インターフェイス１０は、ＣＡＮ、ＣＡＮ  ＦＤ、ＦｌｅｘＲａｙ、Ｅｔｈｅｒｎｅｔ（登録商標）等の、ＥＣＵで使用される一般的な通信線に接続されている。
【００４６】
なお、本実施の形態１では、ＥＣＵ１がモータ１２を駆動する例を示しているが、本発明を適用し得るＥＣＵ１の構成は、この例に限定されるものではない。例えば、駆動回路１１をコンバータとし、制御対象をモータ１２からＬＥＤに代えて、ＬＥＤの照度制御を行う際にも、短周期処理が必要になることがあり、このような構成に対しても、本実施の形態１に係る発明を効果的に適用し得る。
【００４７】
また、外部通信インターフェイス１０についても、上述したいずれかに限定されることはない。例えば、上述した構成の組み合わせを適用する場合、あるいは同一の通信方式を複数個使用する場合も考えられる。また、ＥＣＵ１に配線を追加することが可能な場合には、マイコン３が備える各種シリアル通信（ＵＡＲＴ、ＳＰＩ等）や汎用デジタル入出力（ＧＰＩＯ）等も、外部通信インターフェイス１０として適用し得る。
【００４８】
本実施の形態１では、モータを制御する例を示している。このため、図１では省略しているが、Ｉ／Ｏ４において、センサ電圧をマイコン３内に取り込む際には、ＡＤ変換器を使用し、駆動回路１１へ制御出力を行う際には、ＰＷＭを使用することを仮定している。
【００４９】
しかしながら、本発明は、本実施の形態１のみに適用可能とするものではない。例えば、制御処理の要因が、単なるタイマ割込みであったとしても、その処理周期がマイコンの処理能力からみて短ければ短いほど、本発明を効果的に適用することができる。
【００５０】
ＣＰＵ５は、周知のアーキテクチャを用いたマイクロプロセッサであり、ＲＯＭ６に記憶される制御プログラム６０を実行可能である。また、ＣＰＵ５は、ＲＡＭ７、タイマ８、ＤＭＡＣ９にアクセスすることができれば、単一コアでも複数コアでもよい。
【００５１】
ＲＯＭ６は、ＣＰＵ５およびＤＭＡＣ９の各チャネルから読み出し可能であり、制御プログラム６０を含んでいる。図２は、本発明の実施の形態１におけるＲＯＭ６に格納されたプログラム６０の各処理を例示した図である。制御プログラム６０の処理としては、図２に例示したように、初期化処理６１、周期割り込み処理６２〜６３、短い周期で実行する短周期処理６４、および短周期処理６４よりも長い周期で実行する長周期処理６５が記憶されている。なお、以下の説明において、特に処理の形態に拘らない場合には、単に「処理６１〜６５」のように表記することとする。
【００５２】
また、制御プログラム６０の固定値データとしては、図２に例示したように、識別番号表６６、第６ＤＭＡ許可値６７、および送信要求指示値６８が記憶されている。
【００５３】
図３は、本発明の実施の形態１におけるＲＯＭ６に記憶された処理６２〜６５の実行タイミングを例示した図である。本実施の形態１において、処理６２〜６５は、図３に例示したタイミングチャートのように動作するように、静的に設計されているものとする。また、処理の優先度は、処理６２＞処理６３＞処理６４＞処理６５とする。
【００５４】
図３において、各処理６２〜６５のタイミングチャートの立ち上がりが、処理の開始または続行を意味し、立ち下がりが、処理の中断または終了を意味している。また、それぞれの処理周期は、処理６２〜６３が５０μ秒、短周期処理６４が１００μ秒、長周期処理６５が１ミリ秒であるとする。
【００５５】
図３において、処理６２〜６５の挙動を時間の経過に沿って説明する。処理６２が開始し、処理６２が終了し、処理６４が開始する。次に、処理６４は、実行中において処理６３の開始のため中断され、処理６３が開始する。次に、処理６３が終了し、処理６４が再開し、処理６４が終了し、処理６５が開始する。
【００５６】
次に、処理６５は、実行中において処理６２の開始のため中断され、処理６２が開始する。次に、処理６２が終了し、処理６５が再開する。次に、処理６５、は実行中において処理６３の開始のため中断され、処理６３が開始し、処理６３が終了し、処理６５が再開し、処理６５が終了する。
【００５７】
処理６２〜６４については、上述した処理６２の２サイクル分を実行した後、すなわち、１００μ秒経過後に、再び処理６２が開始するところから、上述した挙動を繰り返すものとする。一方、処理６５については、処理周期が１ミリ秒であることから、処理６２〜６４が図３に示した１００μ秒の挙動を１０回繰り返す毎に、図３に示すタイミングで開始および終了するものとする。
【００５８】
本実施の形態１では、例として、処理６２の最初の開始時刻を起点とする１ミリ秒の期間を、制御の１周期とみなすこととする。ただし、制御の１周期を前記のようにとる必要はなく、例えば、処理６２の最初の開始時刻を起点として１００μ秒の期間を処理６２〜６４による制御の１周期とみなしてもよい。
【００５９】
次に、識別番号表６６について説明する。図４は、本発明の実施の形態１におけるＲＯＭ６に設けられた識別番号表６６を例示した図である。本実施の形態１における識別番号表６６は、図４に例示したように、処理６２〜６５についての識別番号表６６０〜６６３と、無効な識別番号６６４とを含んでいる。
【００６０】
識別番号表６６０は、処理６２の開始であることを識別可能な処理開始識別番号と、処理６２の終了であることを識別可能な処理終了識別番号とを交互に保持している。なお、図４では省略しているが、識別番号表６６１〜６６３は、記憶される処理開始識別番号および処理終了識別番号の値が異なることを除き、識別番号表６６０と同様の構成を有している。
【００６１】
処理６２〜６５は、それぞれの周期毎に処理を開始および終了する。このため、一対の処理開始識別番号および処理終了識別番号が、各処理の１周期中に参照される。
【００６２】
各処理の識別番号表の長さは、上述した制御の１周期と、それぞれの処理６２〜６５の処理周期との関係から決まり、固定長である。例えば、本実施の形態１では、処理６２の周期を５０μ秒とし、制御プログラムの制御の１周期を１ミリ秒とした。従って、処理６２は、１ミリ秒の間に２０回処理を実行することとなり、その開始と終了を合わせた数は４０回となる。従って、識別番号表６６０の長さは、４０になる。
【００６３】
処理６３〜６５に対応する識別番号表６６１〜６６３の長さについても、同様に、制御の１周期と、それぞれの処理の処理周期との関係から算出され、それぞれ固定長である。
【００６４】
ＲＡＭ７は、ＣＰＵ５、およびＤＭＡＣ９の各ＤＭＡチャネルからアクセス可能である。図５は、本発明の実施の形態１におけるＲＡＭ７に設けられた実行時データ記憶部を例示した図である。本実施の形態１では、実行時データ記憶部として、図５に例示したように、割り込み処理６２の識別番号記憶配列７１１と、これに対応する時刻記憶配列７１２、さらに、周期処理６３〜６５の識別番号記憶配列７２１、７３１、７４１と、これらのそれぞれに対応する時刻記憶配列７２２、７３２、７４２を確保した場合を示している。
【００６５】
処理６２〜６５のそれぞれに対応する実行時データ記憶部７１〜７４は、図４を用いて説明した識別番号表６６０〜６６３と同様に、制御の１周期と処理６２〜６５のそれぞれの処理周期との関係から決まり、固定長である。
【００６６】
例えば、本実施の形態１では、処理６４の周期を１００μ秒とし、制御プログラムの制御の１周期を１ミリ秒とした。このため、処理６４は、１ミリ秒の間に１０回処理を実行することとなり、識別番号記憶配列７３１および時刻記憶配列７３２の要素数は、それぞれ１０になる。
【００６７】
実行時データ記憶部７１、７２、７４の各記憶配列７１１、７２１、７４１についても、同様に、制御の１周期と、それぞれの処理の処理周期との関係から、それぞれ、２０、２０、２と算出される。従って、実行時データ記憶部７０の各配列の要素数の合計は、本実施の形態では、１０４になる。本実施の形態１では、各要素に１バイトを割り当てることとし、１０４バイトとする。
【００６８】
実行時データ記憶部７０内の各配列単位の配置の順序は、任意である。ただし、実行時データ記憶部７０が複数の領域に分割されないように、各配列単位が互いに隣接するように配置する。
【００６９】
タイマ８は、複数のチャネルからなるハードウェアタイマである。そして、タイマ８は、ＲＴＯＳのスケジューラまたは従来型のスケジューラが処理を開始する時刻を検知するために使用するほか、本実施の形態１では、実行時データ取得の際の時刻を示すタイムスタンプを生成するためにも使用する。
【００７０】
ＤＭＡＣ９は、複数のＤＭＡチャネルからなるハードウェア機能であり、ＣＰＵ５がアクセス可能なアドレス空間内のデータを、ＣＰＵ５を使用せずに転送することができる。さらに、ＤＭＡＣ９は、その転送の実行を開始するタイミングとして、マイコン３の内部または外部のハードウェアの要因か、ソフトウェアの指示か、をあらかじめ設定することができる。
【００７１】
ハードウェアの要因を設定する場合には、さらにＤＭＡＣ９が対応可能なハードウェア要因の中から指定可能である。ＤＭＡＣ９が対応可能なハードウェアの要因として、マイコンが内部に備える周辺機能からの各種割込み要求が設定可能であることに加え、ＤＭＡＣ９内の別のＤＭＡチャネルのＤＭＡ転送処理完了を設定することも可能である。
【００７２】
各ＤＭＡチャネルは、転送回数を指定することができ、その最終回のＤＭＡ転送を完了した際に、転送元のアドレスと、転送先のアドレスと、転送回数を、あらかじめ指定した値に設定し直すリロード機能を有している。
【００７３】
各ＤＭＡチャネルは、それぞれシングル転送モードとブロック転送モードを有しており、いずれかを選択・設定可能である。シングル転送モードは、１回のＤＭＡサイクル（つまり、転送元からのデータ読み出しと転送先へのデータ書き込み）につき、転送回数を１とする転送モードである。また、ブロック転送モードは、あらかじめ設定された、連続したデータ領域（ブロック転送サイズ）の転送が完了するまでＤＭＡサイクルを繰り返し、データ領域内のすべてのデータの転送完了をもって、転送回数を１とする転送モードである。なお、本実施の形態１では、ブロック転送モードで使用するＤＭＡチャネルについてのみ、その旨を明記し、転送モードについて指定のないＤＭＡチャネルは、シングル転送モードで使用することとする。
【００７４】
各ＤＭＡチャネルは、ＤＭＡ転送を許可または禁止するレジスタを有しており、ＣＰＵ５およびＤＭＡＣ９から許可状態または禁止状態を設定することができる。また、各ＤＭＡチャネルは、最終回のＤＭＡ転送を完了した際に、以後のＤＭＡ転送を禁止状態にするか、許可状態を継続するかを設定することができる。
【００７５】
外部通信インターフェイス１０は、マイコン３と外部との情報の送受信を行うものである。そして、外部通信インターフェイス１０は、データの送受信が完了した際に、ＣＰＵ５への割り込み要因として、この送受信が完了したことを通知することができる。また、外部通信インターフェイス１０は、送受信の完了をハードウェアの要因としてＤＭＡＣ９に通知し、各ＤＭＡチャネルの転送を開始させることができる。
【００７６】
次に、ＥＣＵ１で実行される制御プログラム６０のうち、本発明に係る初期化処理６１の処理手順例について説明する。図６は、本発明の実施の形態１に係るＥＣＵ１における初期化処理６１の処理手順を示したフローチャートである。
【００７７】
先ず、ステップＳ６０１において、ＥＣＵ１は、処理時刻を取得するためのタイマ８を初期化し、カウントを開始する。ここで、ハードウェアタイマのカウント周期は、処理時間に対して十分な時間分解能が得られるように設定する。
【００７８】
次に、ステップＳ６０３〜ステップＳ６０５を繰り返すことで、処理ごとに必要となる第１のＤＭＡチャネルおよび第２のＤＭＡチャネルを初期化する。図７は、本発明の実施の形態１に係るＥＣＵ１における第１のＤＭＡチャネルおよび第２のＤＭＡチャネルの初期設定の一例を表形式にまとめたものである。ＥＣＵ１は、図７に例示したように、処理６２〜６５のそれぞれに対して各ＤＭＡチャネルを設定する。
【００７９】
第１のＤＭＡチャネルおよび第２のＤＭＡチャネルは、常に許可状態の設定で使用する。また、処理６２〜６５に対応するそれぞれの第１のＤＭＡチャネルは、転送元アドレスを、タイマ８のカウント値を読み出し可能なアドレスに設定し、各転送の完了の際にインクリメントせずに、固定とする。
【００８０】
転送先アドレスは、各処理に対応する時刻記憶配列７１２、７２２、７３２、７４２の先頭に設定し、各ＤＭＡチャネルの転送が完了する毎にインクリメントするように、つまり、転送先アドレスが次の配列要素を指し示すように、設定する。
【００８１】
本実施の形態１では、処理６２、処理６３の処理周期を５０μ秒、処理６４の処理周期を１００μ秒、処理６５の処理周期を１ｍ秒、制御の１周期を１ミリ秒としている。このことから、処理６２、処理６３の転送回数は、制御の１周期に２０回処理が開始および終了するため、その開始回数と終了回数の合計である４０回を設定する。同様の計算を行い、処理６４の第１のＤＭＡの転送回数は、２０を設定し、処理６５の第１のＤＭＡの転送回数は、２を設定する。
【００８２】
各処理の第１のＤＭＡチャネルが転送を完了する毎に、各処理に対応する第２のＤＭＡチャネルを開始する。また、上記転送回数の最終の転送が完了した際に、転送先アドレスおよび転送回数をリロードする。
【００８３】
処理６２〜処理６５に対応するそれぞれの第２のＤＭＡチャネルは、転送元アドレスを、各処理の識別番号表６６０〜６６３の先頭に設定し、各ＤＭＡ転送の完了の際にインクリメントするように設定する。
【００８４】
転送先アドレスは、各処理に対応する識別番号記憶配列７１１、７２１、７３１、７４１の先頭に設定し、各ＤＭＡ転送の完了の際にインクリメントするように設定する。
【００８５】
転送回数は、各処理に対応する第１のＤＭＡと同一の値を設定する。
【００８６】
各処理の第２のＤＭＡチャネルの最終のＤＭＡ転送が完了した際に、転送元アドレスと、転送先アドレスと、転送回数をリロードする。
【００８７】
本実施の形態１においては、制御の１周期の最後の処理６３の終了が、実行時データ記憶部７０に記憶される最後の実行時データとなる。このため、処理６３に対応する第２のＤＭＡの最終転送が完了した際に、第３のＤＭＡチャネルを開始するように、処理６３に対応する第２のＤＭＡチャネルを設定する。
【００８８】
先の図６のフローチャートの説明に戻り、ステップＳ６０５の次に、ステップＳ６０６において、第３〜第６のＤＭＡチャネルを初期化する。図８は、本発明の実施の形態１に係るＥＣＵ１における第３のＤＭＡチャネル〜第６のＤＭＡチャネルの初期設定の一例を表形式にまとめたものである。各ＤＭＡチャネルは、例えば、図８に例示したように設定する。
【００８９】
第６のＤＭＡチャネルのみ、転送完了後、チャネルを禁止するように設定し、他のチャネルは、常に許可状態の設定で使用する。
【００９０】
第３のＤＭＡチャネルは、制御の１周期分の実行時データ記憶部７０の内容を外部通信インターフェイス１０に転送する最初のＤＭＡチャネルである。そこで、第３のＤＭＡチャネルの転送元アドレスは、実行時データ記憶部７０に設定し、第３のＤＭＡチャネルの転送先アドレスは、外部通信インターフェイス１０の送信バッファに設定する。
【００９１】
第３のＤＭＡチャネルは、ブロック転送を１回行う。そこで、ブロック転送サイズを外部通信インターフェイス１０の送信バッファ長に設定し、転送回数を１に設定する。
【００９２】
例えば、外部通信インターフェイス１０がＣＡＮ  ＦＤで、送信フレームのデータ長を最大にとることができる場合には、ブロック転送サイズを６４バイトに設定する。また、各転送が完了した際には、転送元アドレスおよび転送先アドレスは、インクリメントするように設定する。
【００９３】
第３のＤＭＡ転送が完了した際に、転送元アドレスと転送先アドレスを初期化の値にリロードし、第４のＤＭＡチャネルを開始するように設定する。
【００９４】
第４のＤＭＡチャネルは、第６のＤＭＡチャネルを許可状態に設定するために、その転送を許可する値を第６のＤＭＡチャネルに設定するためのＤＭＡ転送を実行するものである。
【００９５】
転送元アドレスは、第６ＤＭＡ許可値６７に設定し、転送先アドレスは、第６のＤＭＡチャネルの転送許可レジスタに設定する。各転送完了の際の転送元および転送先アドレスは、固定に設定する。
【００９６】
第４のＤＭＡチャネルの転送回数は、１回に設定し、ＤＭＡ転送が完了した際に、転送回数をリロードし、第５のＤＭＡチャネルを開始するように設定する。
【００９７】
第５のＤＭＡチャネルは、第３のＤＭＡ転送によって外部通信インターフェイス１０の送信バッファに転送されたデータに対して、送信を要求するためのＤＭＡ転送を実行するものである。
【００９８】
転送元アドレスは、送信要求指示値６８に設定し、転送先アドレスは、外部通信インターフェイス１０の送信要求レジスタに設定する。各転送完了の際の転送元および転送先アドレスは、固定に設定する。
【００９９】
第５のＤＭＡチャネルの転送回数は、１回に設定し、ＤＭＡ転送が完了した際に、転送回数をリロードするように設定する。
【０１００】
第６のＤＭＡチャネルは、第５のＤＭＡ転送によって外部通信インターフェイス１０へ要求されたデータ送信が完了した際に、そのハードウェア要因によって開始し、第３のＤＭＡチャネルが未送信の実行時データ記憶部７０のデータを転送するものである。
【０１０１】
第６のＤＭＡチャネルの開始は、ハードウェア要因とし、その要因を、外部通信インターフェイス１０の送信完了に設定する。
【０１０２】
第６のＤＭＡチャネルの転送元アドレスは、第３のＤＭＡチャネルで転送されていない、実行時データ記憶部７０のデータ箇所に設定する。例えば、上述した第３のＤＭＡチャネルの設定例にならえば、実行時データ記憶部７０の先頭＋６４である。
【０１０３】
第６のＤＭＡチャネルの転送先アドレスは、外部通信インターフェイス１０の送信バッファに設定する。また、転送元および転送先アドレスは、インクリメントするように設定する。
【０１０４】
第６のＤＭＡチャネルは、ブロック転送モードで使用する。そこで、ブロック転送サイズを外部通信インターフェイス１０の送信バッファ長に設定する。また、転送回数には、実行時データ記憶部７０の未送信データを全て送信完了するのに必要なブロック転送回数を設定する。本実施の形態１では、実行時データ記憶部７０は、１０４バイトであり、上述した第３のＤＭＡチャネルの設定例にならえば、本ＤＭＡチャネル開始の時点で、そのうちの６４バイトは転送が完了している。このため、残りは、４０バイトであり、外部通信インターフェイス１０の送信バッファに入るサイズであるため、転送回数は、１に設定する。
【０１０５】
第６のＤＭＡ転送が完了した際に、転送回数をリロードし、第５のＤＭＡチャネルを開始し、チャネルが禁止状態になるように設定する。
【０１０６】
次に、上述した本実施の形態１における第１のＤＭＡチャネル〜第６のＤＭＡチャネルの各処理の開始および終了に対する動作について、詳細に説明する。
【０１０７】
処理６２が割り込み要因で開始した際に、ソフトウェアで第１のＤＭＡチャネルによる転送を開始する。第１のＤＭＡチャネルによる転送が開始され、タイマ８のカウンタの値を読み出し、時刻格納配列７１２の第１要素に記憶した後、転送先アドレスをインクリメントして時刻格納配列７１２の第２要素の箇所とし、第２のＤＭＡチャネルを開始させる。
【０１０８】
第２のＤＭＡチャネルは、割り込み処理６２の識別番号表６６０の先頭に記憶されている処理６２開始番号を読み出し、識別番号格納配列７１１の第１要素に記憶する。その後、転送元アドレスをインクリメントして、割り込み処理６２の識別番号表６６０の第２要素である処理６２終了識別番号の箇所とし、転送先アドレスをインクリメントして、識別番号格納配列７１１の第２要素の箇所とする。
【０１０９】
処理６２の終了の際に、ソフトウェアから第１のＤＭＡチャネルを開始する。第１のＤＭＡ転送は、処理６２の開始の場合と同様に、タイマ８のカウンタの値を読み出し、時刻格納配列７１２の第２要素に記憶する。その後、転送先アドレスをインクリメントして時刻格納配列７１２の第３要素の箇所とし、第２のＤＭＡチャネルを開始させる。
【０１１０】
第２のＤＭＡチャネルは、割り込み処理６２の識別番号表６６０の第２要素である処理６２終了識別番号を読み出し、識別番号格納配列７１１の第２要素に記憶する。その後、転送元アドレスをインクリメントして割り込み処理６２の識別番号表６６０の第３要素である処理６２開始識別番号の箇所とし、転送先アドレスをインクリメントして識別番号格納配列７１１の第３要素の箇所とする。
【０１１１】
上記の処理６２の開始および終了の際の第１のＤＭＡ転送および第２のＤＭＡ転送は、それぞれのＤＭＡチャネルに設定された回数の転送が完了するまで繰り返される。そして、最終回のＤＭＡ転送完了後に、第１のＤＭＡチャネルの転送先アドレスおよび転送回数は、それぞれ時刻格納配列７１２の第１要素のアドレスおよび４０回に、つまり初期化完了時の値に、ＤＭＡチャネルのリロード機能によって自動的に再設定される。
【０１１２】
また、第２のＤＭＡチャネルについても第１のＤＭＡチャネルと同様に、最終回のＤＭＡ転送完了後に、転送元アドレス、転送先アドレス、転送回数がそれぞれＤＭＡチャネルのリロード機能によって自動的に初期化完了時の値に再設定される。
【０１１３】
処理６３〜６５についても、第１のＤＭＡ転送および第２のＤＭＡ転送の開始および終了方法は、処理６２の場合と同様である。本実施の形態１では、処理６３の終了の際に実行される最終回の第２のＤＭＡ転送が、制御の１周期の中で最後に実行される第２のＤＭＡ転送となる。このため、このＤＭＡの転送の完了が、第３のＤＭＡ転送を開始するように設定している。
【０１１４】
処理６２、処理６３のように、割り込み要因で処理を開始する場合であり、かつ割り込み要因で第１のＤＭＡ転送を開始することが可能な場合には、第１のＤＭＡ転送開始の要因をハードウェアに設定し、処理６２、処理６３の処理開始の割り込み要因を設定することで、ソフトウェアで第１のＤＭＡ転送の開始を指示することなく、第１のＤＭＡ転送を開始することができる。
【０１１５】
第１のＤＭＡチャネルにＤＭＡ転送開始の要因としてソフトウェアとハードウェアの両方を設定できない場合には、ソフトウェアで開始する第１のＤＭＡに加え、ハードウェア要因で開始する第１’のＤＭＡを別に用意し、処理開始の際には、第１’のＤＭＡ転送および第２のＤＭＡ転送を実行し、処理終了の際には、第１のＤＭＡ転送および第２のＤＭＡ転送を実行してもよい。
【０１１６】
第３のＤＭＡチャネルは、実行時データ７０の先頭から、外部通信インターフェイス１０が持つ送信バッファの長さのデータを、その送信バッファにブロック転送する。
【０１１７】
第３のＤＭＡ転送が完了すると、第３のＤＭＡチャネルの転送元アドレス、転送先アドレス、転送回数は、ＤＭＡチャネルのリロード機能によって自動的に初期化完了時の値に再設定され、さらに、第４のＤＭＡチャネルの転送を開始する。
【０１１８】
第４のＤＭＡチャネルは、後に開始する第６のＤＭＡチャネルを許可状態に変更する第６ＤＭＡ許可値６７をＲＯＭ６から第６のＤＭＡチャネルのチャネル転送許可レジスタに転送する。
【０１１９】
第４のＤＭＡ転送完了が完了すると、第４のＤＭＡチャネルの転送回数は、ＤＭＡチャネルのリロード機能によって自動的に初期化完了時の値に再設定され、第５のＤＭＡチャネルの転送を開始する。
【０１２０】
第５のＤＭＡチャネルは、外部通信インターフェイス１０への送信要求指示値６８をＲＯＭ６から外部通信インターフェイス１０の送信要求レジスタに転送する。
【０１２１】
第５のＤＭＡ転送が完了すると、第５のＤＭＡチャネルの転送回数は、ＤＭＡチャネルのリロード機能によって自動的に初期化完了時の値に再設定される。
【０１２２】
第６のＤＭＡチャネルは、外部通信インターフェイス１０のデータ送信完了のハードウェア要因で開始する。第６のＤＭＡチャネルは、実行時データ記憶部７０の、第３のＤＭＡ転送で未転送のアドレスからデータ転送を引き継ぎ、外部通信インターフェイス１０が持つ送信バッファの長さのデータをその送信バッファにブロック転送する。
【０１２３】
第６のＤＭＡ転送が１回完了する毎に、第５のＤＭＡチャネルの転送を開始し、外部通信インターフェイス１０に対して送信要求を行う。第６のＤＭＡ転送が指定の回数だけ完了すると、第６のＤＭＡチャネルは、禁止状態になる。このため、この回の外部通信インターフェイス１０からの送信完了の要因で第６のＤＭＡチャネルを開始しない。
【０１２４】
以上のように、処理６２〜処理６５が各処理を開始および終了するタイミングで、処理毎に用意した第１のＤＭＡ転送および第２のＤＭＡ転送を実行する。このことにより、各処理の開始および終了の際に、実行時データ記憶部７０の内容をプログラムの処理で作成および蓄積する必要がなくなり、かわりに第１のＤＭＡを開始するだけでよくなる。
【０１２５】
ここで、処理の開始がハードウェアの要因の場合には、その要因を第１のＤＭＡの開始条件に設定することで、処理開始の際にプログラムで第１のＤＭＡの開始の指示を行う処理も不要になる。
【０１２６】
図９は、本発明の実施の形態１に係るＥＣＵ１における実行時データ取得の際の処理手順を示したフローチャートである。非特許文献１では必要であった図１０に例示の処理は、本実施の形態１では、図９に例示したように、ステップＳ９０１による第１のＤＭＡ転送を開始する指示一つになるか、あるいは省略可能になる。
【０１２７】
また、本実施の形態１は、実行時データ記憶部７０に最後にデータを転送する第２のＤＭＡ転送が完了した際に、第３のＤＭＡチャネルを開始する。このことにより、実行時データ記憶部７０の内容を送信するためにプログラムの処理で外部通信インターフェイス１０に実行時データ記憶部７０の内容を転送する必要がなくなる。その結果、非特許文献１では必要であった図１１に例示の処理は、本実施の形態１では不要になる。
【０１２８】
以上のように、実施の形態１によれば、処理の中で、実行時データの取得が必要な箇所に追加する、先の図１０のようなソフトウェア処理を最小とすることができる。この結果、実行時データを取得する処理自体によるＣＰＵ時間を最小に抑え、本来の制御プログラムの処理タイミングの変化を最小に抑えることができる。
【０１２９】
特に、短い処理周期で処理を実行する、例えば車載インバータ制御装置のような制御装置において、処理の開始時刻および終了時刻をはじめとする実行タイミングを取得する際に、その取得処理自体に掛かるＣＰＵ時間に起因する実行タイミングの変化を低く抑える対処策として利用することができる。
【０１３０】
また、実施の形態１によれば、実行時データを転送する、先の図１１のようなソフトウェア処理を不要とすることができる。この結果、本来の制御プログラムのＣＰＵ負荷が高く、データ転送処理を実行のためのＣＰＵ時間が確保できない場合にも、実行時データの転送が可能になる。
【０１３１】
なお、上述した実施の形態１では、実行時データの作成、および実行時データの送信の両方に対して、ＣＰＵを介さずにＤＭＡ転送を適用する場合について説明した。しかしながら、作成、送信のいずれか一方にだけＤＭＡ転送を適用することも可能である。
【０１３２】
例えば、マイコンが備えるＤＭＡチャネル数が実施の形態１で使用する数よりも少ない場合は、第１〜２のＤＭＡチャネルによる実行時データの作成部または第３〜第６のＤＭＡチャネルによる実行時データの送信部において、一部のＤＭＡチャネルをソフトウェアによる転送処理で代替することができる。
【０１３３】
また、上述した実施の形態１では、処理６２〜処理６５は、全て周期処理としている場合について説明した。一方、マイコン外部で発生する事象や制御プログラム内で特定条件が成立する等の要因で非周期的に開始する非周期処理の実行時データを、周期処理に加えて取得する場合には、非周期処理に対応する第７のＤＭＡチャネルを追加し、第６のＤＭＡ転送が完了した際に、第７のＤＭＡチャネルを開始させる。
【０１３４】
第７のＤＭＡは、非周期処理の実行時データ記憶部の識別番号記憶配列の第１要素に、無効な識別番号６６４を転送する。これにより、制御の１周期の期間に非周期処理が実行されなかった場合には、非周期処理の識別番号格納配列の第１要素が無効な識別番号６６４が記憶されたままとなる。このため、この期間内に非周期処理が一度も実行されなかったことを判別することができる。
【０１３５】
このような非周期処理への対策は、例えば、周期処理が時々その周期通りに実行されないことがある不具合を調査する際にも、適用することができる。
【０１３６】
また、本実施の形態１では、本発明に係る実行時データ取得手法の適用の一例を示すために、処理の開始および終了のタイミングを取得している。しかしながら、本発明に係る実行時データ取得手法で取得可能なデータは、これに限らず、例えば、処理開始の時点におけるセンサのＡＤ変換値やデジタルＩ／Ｏの入力レベルを取得する場合にも、適用可能である。
【０１３７】
また、データを取得する箇所も処理開始および終了の時点に限らない。制御プログラム処理内の任意の箇所で、第１のＤＭＡチャネルを開始させることで、その時点のデータを取得することが可能であり、その時点でのデータの取得およびデータ転送に掛かるＣＰＵの処理時間を、最小限に抑えることができる。
【符号の説明】
【０１３８】
１  車載制御装置（ＥＣＵ）、２  入力回路、３  マイコン、４  Ｉ／Ｏ、５  ＣＰＵ、６  ＲＯＭ、７  ＲＡＭ、８  タイマ、９  ＤＭＡＣ、１０  外部通信インターフェイス、１１  駆動回路、１２  モータ、１３  外部通信線、６０  制御プログラム（車載制御プログラム）、６１  初期化処理、６２、６３  周期割り込み処理、６４  短周期処理、６５  長周期処理、６６  識別番号表、６７  第６ＤＭＡ許可値、６８  送信要求指示値、７０  実行時データ記憶部、７１  処理６２実行時データ記憶部、７２  処理６３実行時データ記憶部、７３  処理６４実行時データ記憶部、７４  処理６５実行時データ記憶部、６６０  処理６２の識別番号表、６６１  処理６３の識別番号表、６６２  処理６４の識別番号表、６６３  処理６５の識別番号表、６６４  無効な識別番号、７１１、７２１、７３１、７４１  識別番号記憶配列、７１２、７２２、７３２、７４２  時刻記憶配列。
【図１】
2018041130.tif 000003
【図２】
2018041130.tif 000004
【図３】
2018041130.tif 000005
【図４】
2018041130.tif 000006
【図５】
2018041130.tif 000007
【図６】
2018041130.tif 000008
【図７】
2018041130.tif 000009
【図８】
2018041130.tif 000010
【図９】
2018041130.tif 000011
【図１０】
2018041130.tif 000012
【図１１】
2018041130.tif 000013