(57)【特許請求の範囲】
【請求項１】
車両に備えられ、その車両における制御対象を制御する制御処理を実行する電子制御装置であって、
前記制御処理のプログラムにおいて変数のデータ型は予め定められ、
前記制御対象を制御するために検出される数値データであって、前記制御処理において扱われるその数値データの可変範囲の幅（以下、データ幅と言う）を表す情報を取得するデータ幅取得手段と、
前記データ幅取得手段により取得されたデータ幅を、前記データ型に格納可能な範囲を表す値で除算した分解能を算出する分解能算出手段と、を備え、
前記制御処理では、前記分解能算出手段により算出された分解能で前記数値データがメモリに格納されるようになっていることを特徴とする電子制御装置。
【請求項２】
請求項１に記載の電子制御装置において、
前記データ幅取得手段は、
前記データ幅を所定の分割数で分割してその分割後の個々のデータ幅（以下、個別データ幅と言う）を算出する個別データ幅算出手段を備え、
前記分解能算出手段は、前記個別データ幅を、前記データ型に格納可能な範囲を表す値で除算した分解能（以下、個別分解能と言う）を算出するようになっており、
前記可変範囲を前記所定の分割数で分割して、分割後の個々の領域（以下、個別領域と言う）のそれぞれについて、その領域の始値（以下、オフセット値と言う）を算出するオフセット値算出手段を備え、
前記制御処理では、前記数値データの値から、その数値データが含まれる前記個別領域のオフセット値（以下、対象オフセット値と言う）を減算した値が、前記個別分解能でメモリに格納されるようになっていると共に、そのメモリに格納された値と、前記対象オフセット値とを用いて前記数値データが表わされるように構成されていることを特徴とする電子制御装置。
【請求項３】
請求項２に記載の電子制御装置において、
前記データ幅は前記所定の分割数で所定幅毎に分割されるようになっており、
前記オフセット値は、前記個別データ幅に、分割の境界数を表す整数値の最小値から最大値をそれぞれ乗算することで算出されるようになっていることを特徴とする電子制御装置。
【請求項４】
請求項１ないし請求項３の何れか１項に記載の電子制御装置において、
前記データ幅取得手段及び前記分解能算出手段の動作を制御する動作制御手段を備え、該動作制御手段は、使用者の入力に基づき、数値データの種別毎に、前記データ幅取得手段及び前記分解能算出手段の動作を許可するか否かを判定し、
前記動作制御手段により動作が許可されない場合は、前記データ幅取得手段及び前記分解能算出手段は動作しないように構成され、この場合の前記制御処理では、使用者により予め入力された分解能で前記数値データがメモリに格納されるように構成されていることを特徴とする電子制御装置。
【請求項５】
請求項１ないし請求項４の何れか１項に記載の電子制御装置において、
前記数値データは、固定小数点型の変数としてメモリに格納されるようになっていることを特徴とする電子制御装置。
【請求項６】
請求項５に記載の電子制御装置において、
前記数値データの要求精度は予め定められ、
前記数値データを、固定小数点型の変数として、前記分解能算出手段により算出される分解能で前記メモリに格納した場合のそのデータの精度（以下、数値データ精度と言う）と、前記要求精度とを比較する比較手段を備え、
前記比較手段の比較結果に基づき、前記数値データ精度が前記要求精度を満たしているか否かを判定し、満たしている場合に前記数値データが固定小数型の変数としてメモリに格納されるようになっていることを特徴とする電子制御装置。
【請求項７】
車両に備えられ、その車両における制御対象を制御する制御処理を実行する電子制御装置であって、
前記制御処理のプログラムにおいて変数のデータ型は予め定められ、
前記制御対象を制御するために検出される数値データであって、前記制御処理において扱われるその数値データの要求精度となる分解能は予め定められ、
前記数値データの可変範囲の幅（以下、データ幅と言う）を表す情報を取得するデータ幅取得手段と、
前記データ幅を前記データ型に前記分解能で格納可能な範囲を表す値で除算して、その結果の小数点以下を切り上げて分割数を算出する分割数算出手段と、
前記数値データの可変範囲が前記分割数算出手段により算出された分割数（以下、算出分割数と言う）で分割された後の個々の領域（以下、個別領域と言う）のそれぞれについて、その領域の始値（以下、オフセット値と言う）を算出するオフセット値算出手段とを備え、
前記制御処理では、前記数値データの値から、その数値データが含まれる前記個別領域のオフセット値（以下、対象オフセット値と言う）を減算した値が、前記分解能でメモリに格納されるようになっていると共に、そのメモリに格納された値と、前記対象オフセット値とを用いて前記数値データが表わされるように構成されていることを特徴とする電子制御装置。
【請求項８】
請求項７に記載の電子制御装置において、
前記データ幅取得手段及び前記分割数算出手段の動作を制御する動作制御手段を備え、該動作制御手段は、使用者の入力に基づき、数値データの種別毎に、前記データ幅取得手段及び前記分割数算出手段の動作を許可するか否かを判定し、
前記動作制御手段により動作が許可されない場合は、前記データ幅取得手段及び前記分割数算出手段は動作しないように構成され、この場合の前記制御処理では、使用者により予め入力された分解能で前記数値データがメモリに格納されるように構成されていることを特徴とする電子制御装置。
【請求項９】
車両に備えられる電子制御装置にて、その車両における制御対象を制御する制御処理において用いられる演算方法であって、
前記制御処理のプログラムにおいて変数のデータ型は予め定められ、
前記制御対象を制御するために検出される数値データであって、前記制御処理において扱われるその数値データの可変範囲の幅（以下、データ幅と言う）を表す情報を取得し、
前記取得されたデータ幅を、前記データ型に格納可能な範囲を表す値で除算した分解能を算出し、
前記制御処理では、前記算出された分解能で前記数値データがメモリに格納されるようになっていることを特徴とする電子制御装置における演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車両の各部を制御する電子制御装置に関し、また、電子制御装置における制御処理での演算方法に関する。
【背景技術】
【０００２】
従来、車両においては、機能別に様々な電子制御装置（以下、ＥＣＵと記載する）が搭載されている。例えば、エンジンを制御するためのエンジンＥＣＵ、ブレーキを制御するためのブレーキＥＣＵなど、種々のものがある。そして、それら各ＥＣＵにはそれぞれ、専用のソフトウェアが組み込まれる（例えば、特許文献１参照）。
【０００３】
ＥＣＵ及びそのＥＣＵに組み込まれる組込みソフトウェアの開発過程では、扱うデータのとり得る値の範囲（以下、データ範囲と記載する）を、制御要件（例えば、燃料噴射量、トルク、エンジン回転数等）に応じて予め予測して、データを格納するメモリのデータ型（メモリサイズ）を定めると共に、そのデータ範囲とデータ型とに応じたデータ精度を定めて設計する場合が多い。限られたリソースを有効活用すべく、データ範囲を予め予測し、予測できたデータ範囲に応じて最適なデータ型及びデータ精度を決定する（設計する）ものである。
【０００４】
データ型（メモリサイズ）としては、２バイト、４バイトといった種類がある。例えば１〜１０の値（データ範囲が１〜１０）を２バイトのデータ型で表す場合、分解能（データ精度）は、１０／６５５３５（２バイト）となる。データ範囲が１〜１０００のデータを２バイトのデータ型で表す場合は、分解能（データ精度）は、１０００／６５５３５（２バイト）である。尚、データ型としては、他に、例えば整数を扱う整数型、実数を扱う実数型などがある。整数型としては、正負を表す符号付きの整数型、正数のみの符号無しの整数型などがあり、実数型としては、浮動小数点型、固定小数点型などがある。
【０００５】
そして、ＥＣＵにおける組込みソフトウェアでは、予め決定されたデータ型及びデータ精度を用いて演算が実行される。
【特許文献１】特開昭５９−８５４４４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで、上記のような開発過程において、制御要件に応じて定まるデータ範囲に変更が生じる場合もある。データ範囲に変更が生じると、データ範囲に応じて決定したデータ型及びデータ精度についても見直しが必要となる。つまり、組込みソフトウェアの再設計が必要となる。
【０００７】
データ範囲を、予め余裕を持たせて大きめに見積もることも考えられるが、データ範囲が大きいデータについて、限られたデータ型（メモリサイズ）でその値を表現しようとすれば、メモリの分解能（ＬＳＢ）はどうしても粗くなってしまう。つまり、データ範囲を大きく設定すると、データ精度が低くなってしまい、誤差が大きくなってしまう。一方、メモリサイズを大きくすると、コストが増加してしまう。
【０００８】
尚、メモリサイズのアップによるコストの増加という点では、次のような観点からも問題となっている。近年は、マイコンの高性能化に伴って浮動小数点演算が導入されるようになっているが、浮動小数点演算では、制御要件から決定されるデータ範囲によらず、リソース（メモリサイズ）が一律に決定され（例えば４バイト）、以前よりも多くのリソース（メモリサイズ）を必要とする場合がある。これにより、マイコンにおけるメモリの容量アップや、不揮発性メモリ（ＥＥＰＲＯＭ）の容量アップが必要となる場合があり、このため、コストの増加につながるというものである。
【０００９】
本発明は、こうした問題に鑑みなされたもので、車両の各部を制御する車両用電子制御装置において、制御のための制御処理で扱うデータの精度をなるべく向上させることを目的とし、また、電子制御装置におけるソフトウェアの再設計やメモリの容量アップを防止することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するためになされた請求項１に記載の電子制御装置は、車両に備えられ、その車両における制御対象を制御する制御処理を実行する。その制御処理のプログラムにおいて変数のデータ型（例えば、２バイト或いは４バイトといったような種別）は予め定められる（例えばプログラム中において宣言される）。
【００１１】
そして、本請求項１の電子制御装置では、データ幅取得手段が、制御対象を制御するために検出される数値データであって、制御処理において扱われるその数値データの可変範囲の幅（以下、データ幅と言う）を表す情報を取得し、分解能算出手段が、データ幅取得手段により取得されたデータ幅を、データ型に格納可能な範囲を表す値で除算した分解能を算出する。そして、制御処理では、分解能算出手段により算出された分解能で数値データがメモリに格納されるようになっている。
【００１２】
つまり、数値データのデータ幅に応じて、分解能が算出されるようになっている。例えば、可変範囲が０〜１０（データ幅が１０）である数値データＡと、可変範囲が０〜１００（データ幅が１００）である数値データＢとがある場合、同じデータ型に格納するならば、前者のほうが分解能を１０倍高くすることができる。具体的に、データ型が２バイトであれば、数値データＡの分解能は１０／６５５３５となり、数値データＢの分解能は１００／６５５３５となる。本請求項１の電子制御装置では、数値データのデータ幅に応じて分解能が最適に（分解能がより高くなるように）設定されるため、データ精度が粗くなってしまわないようにすることができる。換言すれば、データ精度がなるべく良くなるようにされる。
【００１３】
また、データ幅に応じて分解能（データ精度）が算出されるため、データ幅の変化に柔軟に対応できる。
例えば従来は、設計段階において、データ幅を制御要件や仕様に応じて予測し、その予測したデータ幅に応じてデータ型や分解能（データ精度）を設定していたが、データ幅は前述のように制御要件や仕様に応じて算出（予測）されるものであり、そのデータ幅の算出値（予測値）に変更が生じる場合もある。このため、データ型や分解能（データ精度）も見直しが必要となる場合があった。つまり、再設計が必要となる場合があった。また、このような再設計を避けるためにデータ幅を大きめに見積もることも考えられるが、そうすると、分解能（データ精度）は粗くなってしまう。
【００１４】
これに対し、本請求項１の電子制御装置では、データ幅に応じて分解能（データ精度）が算出されることから、上記のような従来において問題となっていた分解能（データ精度）の見直しというような作業が不要となる。つまり、再設計の問題を回避できる。また、データ幅を大きめに見積もって分解能（データ精度）が低下してしまう、という問題を回避することができる。
【００１５】
さらに、このような本請求項１の構成によれば、ソフトウェアの汎用性を向上させることができる。具体的に、例えばデータ幅は車両やエンジンの種類によって異なるが、データ幅に応じて分解能（データ精度）が算出されるようなソフトウェアによれば、車両やエンジンの種類によらずどのような電子制御装置にも搭載することができる。また、ソフトウェア上で分解能（データ精度）が算出されるため、ソフトウェア上において分解能（データ精度）が認識されるようになって、このため、分解能（データ精度）に応じてプログラム（演算）を切り換えるというような必要がなくなる。例えば従来の、分解能（データ精度）が予め設定される構成では、例えばプログラム中において予め分解能（データ精度）が定義され、このため分解能（データ精度）毎にプログラムを切り換える必要もあったが、本請求項１の構成によればそのような必要がなくなる。
【００１６】
次に、請求項１の電子制御装置では、請求項２のように構成すると良い。
請求項２の電子制御装置は、請求項１の電子制御装置において、データ幅取得手段は、データ幅を所定の分割数で分割してその分割後の個々のデータ幅（以下、個別データ幅と言う）を算出する個別データ幅算出手段を備え、分解能算出手段は、個別データ幅を、データ型に格納可能な範囲を表す値で除算した分解能（以下、個別分解能と言う）を算出するようになっている。
【００１７】
そして、可変範囲を所定の分割数で分割して、分割後の個々の領域（以下、個別領域と言う）のそれぞれについて、その領域の始値（以下、オフセット値と言う）を算出するオフセット値算出手段を備え、制御処理では、数値データの値から、その数値データが含まれる個別領域のオフセット値（以下、対象オフセット値と言う）を減算した値が、個別分解能でメモリに格納されるようになっていると共に、そのメモリに格納された値と、対象オフセット値とを用いて数値データが表わされるように構成されている。
【００１８】
本請求項２の構成について例をあげて具体的に説明する。
可変範囲が０〜１０（データ幅が１０）である数値データＡを例にとる。また、分割数は４、データ型は２バイトであるとする。
【００１９】
分割数４で数値データＡのデータ幅を分割すると（つまり、４つに分割すると）、分割後の個々のデータ幅は２．５となる。データ幅２．５を２バイトのデータ型に格納する場合、分解能は２．５／６５５３５となる。
【００２０】
可変範囲０〜１０を分割数４で分割した後の個々の領域は、それぞれ、０〜２．５（領域０）、２．５〜５．０（領域１）、５．０〜７．５（領域２）、７．５〜１０（領域３）となる。各領域の始値（オフセット値）は、それぞれ、０、２．５、５．０、７．５である。領域間の境界の数値は番号の大きい領域に属する。例えば２．５という数値は、領域１に属する。
【００２１】
ここで、３．５という数値を表す場合を考える。数値３．５は、可変範囲０〜１０を４分割した後の個々の領域のうち、領域１に含まれる。そして、３．５は、２．５＋１であり、領域１のオフセット値２．５に１を足した数値として表される。
【００２２】
そして、本請求項２の構成では、３．５＝２．５＋１で表した場合の１が、２．５／６５５３５の分解能でメモリに格納される。そして、そのメモリに格納された値と、オフセット値である２．５という数値とで、３．５という数値が表される。
【００２３】
これによれば、３．５という値を表す場合に、より高い分解能（データ精度）でその値を表すことができる。具体的に、所定の数値データのデータ幅を所定分割数で分割し、分割後のデータ幅に基づいて分解能を算出しているため、分解能（データ精度）を（１／分割数）倍だけ向上させる（細かくする）ことができる。
【００２４】
次に、請求項２の電子制御装置では、請求項３のように構成すると良い。
請求項３の電子制御装置は、請求項２の電子制御装置において、データ幅は所定の分割数で所定幅毎に分割されるようになっており、オフセット値は、個別データ幅に、分割の境界数を表す整数値の最小値から最大値をそれぞれ乗算することで算出されるようになっている。
【００２５】
分割の境界数について、例えば４分割の場合は、境界数（区切りの数）は３である。
例えば、上記の数値データＡの可変範囲０〜１０，データ範囲１０を４分割する例において、本請求項３の構成によれば、わざわざオフセット値０、２．５、５．０、７．５を記憶しておかなくても、データ幅２．５、及び分割の境界数を表す情報（４分割を表す情報）さえあれば、データ幅２．５に０〜３を乗算して、オフセット値０（２．５＊０）、２．５（２．５＊１）、５．０（２．５＊２）、７．５（２．５＊３）を算出することができる。４分割の場合は、前述のように分割の境界は３つであり、データ幅２．５に０〜３の整数値を乗算することでオフセット値が算出される。
【００２６】
ところで、電子制御装置においては、数値データは、その電子制御装置に備えられる不揮発性メモリ（以下、ＥＥＰＲＯＭと記載する）やバックアップＲＡＭに格納される場合がある。この場合において、オフセット値がそのまま格納されると、メモリ容量がより多く必要となる。この点、請求項３の電子制御装置では、分割数を表す情報さえ記憶しておけば、オフセット値をそのまま格納する必要がないため、メモリ容量を節約することができる。
【００２７】
尚、分割数を表す情報を記憶するメモリサイズとして例えば２ビットが割り当てられた場合、そのメモリには０〜３（つまり、最大４分割までを表す情報）を記憶できる。このため、例えば１バイトのデータ中に、最大４分割までを表す情報を、４種類の数値データについてそれぞれ記憶しておくことができる。
【００２８】
次に、請求項１〜３の電子制御装置では、請求項４のように構成することができる。
請求項４の電子制御装置は、データ幅取得手段及び分解能算出手段の動作を制御する動作制御手段を備え、該動作制御手段は、使用者の入力に基づき、数値データの種別毎に、データ幅取得手段及び分解能算出手段の動作を許可するか否かを判定し、動作制御手段により動作が許可されない場合は、データ幅取得手段及び分解能算出手段は動作しないように構成され、この場合の制御処理では、使用者により予め入力された分解能で数値データがメモリに格納されるようになっている。
【００２９】
例えば、データ幅に応じて分解能（データ精度）が適宜算出される構成は上述のようにメリットがあるが、一方で、開発者（設計者）が、分解能（データ精度）を固定したいという場合も想定される。この点、本請求項４の電子制御装置によれば、データ幅に応じて分解能（データ精度）が算出されるという構成を無効にするということも自由にでき、開発者（設計者）に要望により応えることができる。
【００３０】
次に、請求項５の電子制御装置は、請求項１〜４の電子制御装置において、数値データは、固定小数点型の変数としてメモリに格納されるようになっている。
例えば、浮動小数型の変数の場合、データ型は少なくとも４バイトとなり、メモリ容量を増加させる必要も生じ得る。これに対し、本請求項５の電子制御装置では、固定小数型を適用するため、浮動小数型を適用する場合と比較してメモリ容量を抑えることができる。
【００３１】
尚、数値データの種類に応じて、浮動小数型を適用するか固定小数型を適用するかを変更しても良い。例えば、分解能（データ精度）の精密さが要求される数値データについては浮動小数型が適用されるようにし、分解能（データ精度）の精密さがさほど要求されない数値データについては固定小数型が適用されるようにしても良い。
【００３２】
次に、請求項５の電子制御装置では、請求項６のように構成すると良い。
請求項６の電子制御装置は、請求項５の電子制御装置において、数値データの要求精度は予め定められ、数値データを、固定小数点型の変数として、分解能算出手段により算出される分解能でメモリに格納した場合のそのデータの精度（以下、数値データ精度と言う）と、要求精度とを比較する比較手段を備え、比較手段の比較結果に基づき、数値データ精度が要求精度を満たしているか否かを判定し、満たしている場合に数値データが固定小数型の変数としてメモリに格納されるようになっている。
【００３３】
これによれば、数値データを固定小数型でメモリに格納しようとする際に、分解能算出手段によりデータ幅に応じて算出された分解能（データ精度）が予め定められた要求精度を満たしていれば、固定小数型で格納され、この場合はメモリ容量を節約することができる。逆に言えば、分解能算出手段によりデータ幅に応じて算出された分解能（データ精度）が予め定められた要求精度を満たしていなければ、固定小数型で格納されないようにすることができるが、この場合は、例えば浮動小数型で格納されるようにすることで数値データの精度を向上させることができる。
【００３４】
つまり、本請求項６の構成によれば、メモリ容量を節約することと、データ精度の悪化を防止することとを、両立させることができる。
次に、請求項７の電子制御装置は、車両に備えられ、その車両における制御対象を制御する制御処理を実行する電子制御装置であって、制御処理のプログラムにおいて変数のデータ型は予め定められ、制御対象を制御するために検出される数値データであって、制御処理において扱われるその数値データの要求精度である分解能は予め定められている。
【００３５】
そして、データ幅取得手段が、数値データの可変範囲の幅（以下、データ幅と言う）を表す情報を取得し、分割数算出手段が、そのデータ幅を前記データ型に前記分解能で格納可能な範囲を表す値で除算して、その結果の小数点以下を切り上げて分割数を算出し、オフセット値算出手段が、数値データの可変範囲が分割数算出手段により算出された分割数（以下、算出分割数と言う）で分割された後の個々の領域（以下、個別領域と言う）のそれぞれについて、その領域の始値（以下、オフセット値と言う）を算出する。
【００３６】
そして、制御処理では、数値データの値から、その数値データが含まれる個別領域のオフセット値（以下、対象オフセット値と言う）を減算した値が、予め定められた分解能でメモリに格納されるようになっていると共に、そのメモリに格納された値と、対象オフセット値とを用いて数値データが表わされるようになっている。
【００３７】
この請求項７の電子制御装置において、数値データの可変範囲（データ幅）を分割して、メモリに格納する幅を分割後のデータ幅に狭めることで要求精度となるデータの分解能（データ精度）を満足させるという趣旨がある。請求項２と以下のような点で異なる。
【００３８】
本請求項７の電子制御装置では、数値データの要求精度が予め定められており、その要求精度に合わせて、数値データの可変範囲（データ幅）の分割数が算出される点が、請求項２の構成と異なっている。
【００３９】
例えば電子制御装置においては、制御要件或いは仕様に基づいて分解能（データ精度）の精密さが決定される場合もあるが、データ幅が大きい場合、その分解能（データ精度）を維持しようとすればデータ型を大きくしなければならなくなる。
【００４０】
この点、本請求項７の電子制御装置によれば、分割数算出手段が、データ幅取得手段により取得されたデータ幅を、所定のデータ型に所定の分解能（尚、共に予め定められる）で格納可能な範囲を表す値で除算して、その結果の小数点以下を切り上げて分割数を算出するため、メモリに格納する幅を、数値データの可変範囲（データ幅）をその分割数で分割した後の個々のデータ幅にまで狭めた場合の分解能（データ精度）が、予め定められる要求精度に合致するようになるため、データ型を大きくしなくても、要求精度が満たされるようになる。
【００４１】
次に、請求項７の電子制御装置では、請求項８のように構成すると良い。
請求項８の電子制御装置は、請求項７の電子制御装置において、データ幅取得手段及び分割数算出手段の動作を制御する動作制御手段を備え、該動作制御手段は、使用者の入力に基づき、数値データの種別毎に、データ幅取得手段及び分割数算出手段の動作を許可するか否かを判定し、動作制御手段により動作が許可されない場合は、データ幅取得手段及び分割数算出手段は動作しないように構成され、この場合の制御処理では、使用者により予め入力された分解能で数値データがメモリに格納されるようになっている。
【００４２】
これによれば、請求項４について述べた効果と同じ効果を得ることができる。
次に、請求項９の発明は、車両に備えられる電子制御装置にて、その車両における制御対象を制御する制御処理において用いられる演算方法であって、制御処理のプログラムにおいて変数のデータ型は予め定められ、制御対象を制御するために検出される数値データであって、制御処理において扱われるその数値データの可変範囲の幅（以下、データ幅と言う）を表す情報を取得し、取得されたデータ幅を、データ型に格納可能な範囲を表す値で除算した分解能を算出し、制御処理では、算出された分解能で数値データがメモリに格納されるようになっていることを特徴とする電子制御装置における演算方法である。
【００４３】
これによれば、請求項１について述べた効果と同じ効果を得ることができる。
【発明を実施するための最良の形態】
【００４４】
以下に、本発明の実施形態を図面に基づき説明する。
［第１実施形態］
図１は、本発明が適用された電子制御装置（以下、ＥＣＵと記載する）１の構成図である。
【００４５】
図１のＥＣＵ１は車両に備えられてその車両の各部を制御するものであり、そのＥＣＵ１が扱う種々の制御データの値がとり得る範囲（後述するデータ範囲）から、その制御データのそれぞれについて、制御データを格納するメモリの分解能（ＬＳＢ：Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）を動的に算出する機能を備える。言い換えると、データ精度を一律にして扱うのではなく、制御データそれぞれについてのデータ範囲に応じてその制御データのデータ精度を動的に算出する。尚、制御データとは、車両を制御するための各種制御処理（制御ロジック）で用いられるものであり、例えば燃料噴射量やエンジン回転数といったようなデータが考えられる。
【００４６】
ＥＣＵ１は、マイコン１０と、不揮発性のメモリであるＥＥＰＲＯＭ３０とを備えている。
マイコン１０は、所定のプログラムに従い動作して各種演算を実行するＣＰＵ１２と、ＣＰＵ１２に各種演算を実行させるためのプログラムや固定データが予め格納されるフラッシュＲＯＭ１６と、ＣＰＵ１２による演算結果が一時的に記憶されるＲＡＭ１８と、例えば車両に設けられるバッテリ（図示省略）から常時電源電圧が供給され、電源電圧が供給される間情報を保持可能なバックアップＲＡＭ２０と、を備えている。
【００４７】
また、ＣＰＵ１２は、浮動小数点演算を行うＦＰＵ１４を備えている。ＦＰＵ１４は、ＣＰＵ１２からの指令により動作して浮動小数点演算を行う演算器である。
次に、ＥＣＵ１のＣＰＵ１２が実行する図２〜図４の処理について説明する。
【００４８】
まず、図２は、制御データのデータ精度（メモリの分解能）を算出する分解能算出処理を表すフローチャートである。この分解能算出処理は、制御データを更新、或いは参照するタイミングで実行される。
【００４９】
図２の分解能算出処理では、まず、Ｓ１１０で、制御データがとり得る値の範囲（幅）であるデータ範囲（以下、Ｄｓとも記載（併記）する）を表す情報を取得する。尚、以下の説明では、例えば「データ範囲（Ｄｓ）を取得する」というように「を表す情報」という記載を適宜省略して説明する。データ範囲（Ｄｓ）は、具体的に、制御データの値の最小値〜最大値の範囲の幅を言う。このデータ範囲（Ｄｓ）は、フラッシュＲＯＭ１６に予め記憶されており、Ｓ１１０では、フラッシュＲＯＭ１６からデータ範囲（Ｄｓ）を読み出して取得するようになっている。また、データ範囲（Ｄｓ）は、制御要件（例えば、燃料噴射量、トルク、エンジン回転数といった種々の要件）に応じて定められるものであり、フラッシュＲＯＭ１６には、データ範囲（Ｄｓ）と制御要件との関係を表す情報（テーブル）が記憶されている。Ｓ１１０では、その時々の制御要件に応じたデータ範囲（Ｄｓ）の情報が読み出される。
【００５０】
Ｓ１１０の後は、Ｓ１２０に進み、制御データを格納するメモリの型（サイズ）を取得する（読み出す）。メモリの型とは、言い換えると、変数の型（例えば２バイト、或いは４バイトといったような種別）である。尚、以下、メモリの型（サイズ）をＤｓｐとも記載（併記）する。メモリの型（Ｄｓｐ）を表す情報は、例えばフラッシュＲＯＭ１６に予め記憶されている。
【００５１】
次に、Ｓ１３０に進み、メモリの分解能（以下、Ｖａｃとも記載（併記）する）を更新（算出）する。具体的に、メモリの分解能（Ｖａｃ）は、Ｖａｃ＝Ｄｓ／Ｄｓ＿ｍａｘなる式により算出される。Ｄｓ＿ｍａｘは、メモリの型（Ｄｓｐ）の最大値である。つまり、メモリの分解能（Ｖａｃ）は、データ範囲（Ｄｓ）をメモリの型に格納可能な範囲（Ｄｓｐ）で除算した値である。例えばデータ範囲１０（最小値０〜最大値１０）の制御データを２バイトの型に格納する場合、分解能は、１０／６５５３５となる。Ｓ１３０の後は、当該処理を終了する。
【００５２】
次に、図３は、各種制御ロジックにより算出される実データを、図２の処理で算出したメモリの分解能（Ｖａｃ）を用いて変換してメモリに格納する格納処理を表すフローチャートである。ここで、実データ（ｔＤｆｘ）は、例えばプログラム中において一時的に使用される（レジスタ等に一時的に格納される）テンポラリ変数であり、制御データ（Ｄｆｘ）は、格納アドレスが定義され、各種制御ロジックに公開される変数であるとして区別する。
【００５３】
図３の格納処理では、まず、Ｓ２１０で、所定の実データ（以下、ｔＤｆｘとも記載（併記）する）を算出する。
次に、Ｓ２２０に進み、実データ（ｔＤｆｘ）を、前述のＳ１３０で予め算出したメモリの分解能（Ｖａｃ）に合致するデータに変換してその変換したデータをメモリに書き込む。メモリに書き込まれたデータが制御データ（Ｄｆｘ）であり、各種制御ロジックで利用可能となる。
【００５４】
制御データ（Ｄｆｘ）は、Ｄｆｘ＝ｔＤｆｘ／Ｖａｃなる式により算出される。つまり、Ｓ２２０では、実データ（ｔＤｆｘ）が予めソフトウェア上で算出されたメモリの分解能（Ｖａｃ）に合致するデータ（制御データ：Ｄｆｘ）としてメモリに格納される。Ｓ２２０の処理の後は当該処理を終了する。
【００５５】
次に、図４は、メモリに格納された制御データ（Ｄｆｘ）を、各種制御ロジックのプログラムにおいて利用できる実データ（ｔＤｆｘ）に変換する変換処理を表すフローチャートである。
【００５６】
この変換処理では、まず、Ｓ３１０で、前述のＳ２２０でメモリに格納された制御データ（Ｄｆｘ）をそのメモリから読み出す。
次に、Ｓ３２０に進み、実データ（ｔＤｆｘ）を算出する。具体的に、実データ（ｔＤｆｘ）は、ｔＤｆｘ＝Ｄｆｘ＊Ｖａｃなる式により算出される。
【００５７】
そして、Ｓ３３０では、実データ（ｔＤｆｘ）を用いた処理（制御ロジック）が実行される。そしてその後、当該処理を終了する。
以上のように、本第１実施形態のＥＣＵ１では、制御データがとり得る値の範囲（幅）であるデータ範囲と、制御データを格納するメモリの型（サイズ）とから、メモリの分解能（データ精度）をソフトウェア上で算出するようにしている。これにより、データ範囲の大きさにかかわらず、データ範囲に応じて適切なデータ精度がソフトウェア上で設定されるようになる。例えばデータ範囲が小さい場合にはデータ精度が高く設定され、これにより、より細かい桁まで表現されるようになり、逆に、データ範囲が大きい場合にはデータ精度が小さく設定され、これにより、細かい桁までは表現できないとしてもより広い範囲の値を表現できるようになる。
【００５８】
このように、ソフトウェア上においてデータ精度が算出されるため、そのソフトウェア上ではデータ精度を認識して演算を実行することができる。従来、例えばデータ精度が複数種類存在する場合は、データ精度に合わせてソフトウェア上の演算を切り換えるというような構成を設ける場合もあったが、本実施形態のＥＣＵ１によればデータ精度が認識されるためそのような構成が必要なくなる。このため、ソフトウェアの汎用性が広がる。
【００５９】
また、ＥＣＵ１に搭載する組込みソフトウェアの開発において、制御要件や仕様に応じて予測されるデータ範囲に変更が生じることでデータ精度を見直す（設計し直す）必要が生じてしまう、という問題を回避できる。
【００６０】
尚、本実施形態において、Ｓ１１０の処理がデータ幅取得手段に相当し、Ｓ１３０の処理が分解能算出手段に相当している。
［第２実施形態］
次に、第２実施形態について、第１実施形態と異なる点を中心に説明する。
【００６１】
本第２実施形態では、第１実施形態と比較して、ＣＰＵ１２が図２〜図４の処理に代えて図５〜図７の処理を実行する点が異なっている。
図５は、データ範囲（Ｄｓ）及びそのデータ範囲（Ｄｓ）の分割数に応じて、分割後の個々の領域の範囲を算出すると共に、その算出した範囲に応じてメモリの分解能を算出する算出処理を表すフローチャートである。
【００６２】
図５の処理では、まず、Ｓ４１０で、データ範囲（Ｄｓ）及びそのデータ範囲（Ｄｓ）の分割数（以下、Ｎｄｉｖと記載（併記）する）を取得する。ここで、データ範囲（Ｄｓ）及び分割数（Ｎｄｉｖ）は、フラッシュＲＯＭ１６に予め記憶されており、Ｓ４１０では、フラッシュＲＯＭ１６からデータ範囲（Ｄｓ）及び分割数（Ｎｄｉｖ）を読み出して取得する。また、分割数（Ｎｄｉｖ）は例えばデータの種類毎に定められる。
【００６３】
次に、Ｓ４２０に進み、データ範囲（Ｄｓ）を分割数（Ｎｄｉｖ）で等分割し、分割後の領域のデータ範囲（以下、Ｄｓｄとも記載（併記）する）を算出する。データ範囲（Ｄｓｄ）は、分割後の各領域の幅を表すものであり、Ｄｓｄ＝Ｄｓ／Ｎｄｉｖなる式により算出される。
【００６４】
次に、Ｓ４３０に進み、オフセット値（Ｄｏｆｎ）を算出する。ここで、オフセット値（Ｄｏｆｎ）とは、データの最小値〜最大値の可変範囲を分割数（Ｎｄｉｖ）で分割した後の個々の領域の始値であり、データ範囲（Ｄｓｄ）の値に０〜ｎ（ｎ＝０〜Ｎｄｉｖ−１）の値を乗じて算出される。つまり、オフセット値（Ｄｏｆｎ）は、Ｄｏｆｎ＝Ｄｓｄ＊ｎなる式により算出される。算出されたオフセット値（Ｄｏｆｎ）は所定のメモリに記憶される。
【００６５】
データ範囲（Ｄｓｄ）及びオフセット値（Ｄｏｆｎ）について例を挙げて説明する。
例えば、データ範囲（Ｄｓ）が１０（最小値０〜最大値１０）で分割数（Ｎｄｉｖ）が４の場合（つまり、データ範囲１０を４分割する場合）、分割後の個々の領域のデータ範囲（Ｄｓｄ）は、１０（データ範囲：Ｄｓ）／４（分割数：Ｎｄｉｖ）＝２．５（データ範囲：Ｄｓｄ）となる。オフセット値（Ｄｏｆｎ）は、２．５＊０＝０、２．５＊１＝２．５、２．５＊２＝５、２．５＊３＝７．５となる。
【００６６】
次に、Ｓ４４０に進み、メモリの分解能（Ｖａｃ）を算出する。メモリの分解能（Ｖａｃ）は、Ｖａｃ＝Ｄｓｄ／Ｄｓ＿ｍａｘなる式により算出される。つまり、ここでは、データ範囲（Ｄｓ）を分割数（Ｎｄｉｖ）で分割した後の領域のデータ範囲（Ｄｓｄ）に応じてメモリの分解能（Ｖａｃ）を算出する。具体的に、メモリに格納する幅をデータ範囲（Ｄｓｄ）とした場合の分解能を算出する。これによれば、メモリの分解能（Ｖａｃ）は、分割前のデータ範囲（Ｄｓ）に応じて算出する場合よりも向上するが、これは、メモリに格納するデータ範囲を狭くすることで格納するデータのデータ精度を向上させる趣旨である。尚、詳しくは後述するが、制御データは、分割後のデータ範囲（Ｄｓｄ）における値と前述のオフセット値とを用いて表現（復元）することができる。
【００６７】
次に、図６は、各種制御ロジックにより算出される実データを、図５の処理で算出したメモリの分解能（Ｖａｃ）を用いて変換してメモリに格納する格納処理を表すフローチャートである。
【００６８】
この格納処理では、まず、Ｓ５１０で、所定の実データ（ｔＤｆｘ）を算出する。
次に、Ｓ５２０に進み、オフセット値（Ｄｏｆｎ）を算出する。この処理は、前述のＳ４３０の処理と同じであり、Ｄｏｆｎ＝Ｄｓｄ＊ｎ（ｎ＝０〜Ｎｄｉｖ−１）なる式により算出される。
【００６９】
次に、Ｓ５３０に進み、実データ（ｔＤｆｘ）の最小値〜最大値までの可変範囲を分割数（Ｎｄｉｖ）で等分割した分割後の領域のうち、実データ（ｔＤｆｘ）が何番目の領域に含まれるかを算出する。オフセット値（Ｄｏｆｎ）のｎの値を算出する（Ｄｏｆｎの具体的な値を算出する）趣旨である。Ｓ５３０で「ｎの算出」と記載しているのはそのためである。例えば、実データ（ｔＤｆｘ）の値が、Ｓ５２０で算出したオフセット値と比較して、Ｄｏｆ２≦ｔＤｆｘ＜Ｄｏｆ３であれば、ｎ＝２となる。尚、詳細については図８で後述する。
【００７０】
次に、Ｓ５４０に進み、実データ（ｔＤｆｘ）を、前述のＳ４４０で予め算出したメモリの分解能（Ｖａｃ）に合致するデータに変換してその変換したデータをメモリに書き込む。尚、前述のように、メモリに書き込まれたデータが、各種制御ロジックで利用可能な制御データ（Ｄｆｘ）である。ここで、制御データ（Ｄｆｘ）は、Ｄｆｘ＝（ｔＤｆｘ−Ｄｏｆｎ）／Ｖａｃなる式により算出される。つまり、実データ（ｔＤｆｘ）からオフセット値（Ｄｏｆｎ）を減算した値を、分割後の領域のデータ範囲（Ｄｓｄ）に応じて算出したメモリの分解能（言い換えればデータ精度）を用いて算出する。これによれば、変換後のデータのデータ精度が向上する一方、その変換後のデータとオフセット値（Ｄｏｆｎ）とを用いて、元のデータを正しく算出（復元）できる。
【００７１】
次に、図７は、メモリに格納された制御データ（Ｄｆｘ）を、各種制御ロジックのプログラムにおいて利用できる実データ（ｔＤｆｘ）に変換する変換処理を表すフローチャートである。
【００７２】
この変換処理では、まず、Ｓ６１０で、前述のＳ５４０でメモリに格納された制御データ（Ｄｆｘ）をそのメモリから読み出す。
次に、Ｓ６２０に進み、実データ（ｔＤｆｘ）を算出する。具体的に、実データ（ｔＤｆｘ）は、ｔＤｆｘ＝Ｄｆｘ＊Ｖａｃ＋Ｄｏｆｎなる式により算出される。
【００７３】
そして、Ｓ６３０では、実データ（ｔＤｆｘ）を用いた処理（制御ロジック）が実行される。そしてその後、当該処理を終了する。
次に、図８を用いて本第２実施形態の作用について説明する。
【００７４】
図８のグラフにおいて、縦軸はデータ値を示し、横軸は分割数を示す。
図８において、データ値Ｖｍｉｎ〜Ｖｍａｘの幅がデータ範囲（Ｄｓ）である。
本第２実施形態では、データ範囲（Ｄｓ）を分割数（Ｎｄｉｖ）で等分割する。データ範囲（Ｄｓ）を分割数（Ｎｄｉｖ）で等分割した後の個々の領域の範囲（幅）がデータ範囲（Ｄｓｄ）である。そして、分割後の領域のうち、０番目の領域はＶｍｉｎ（或いはオフセット値Ｄｏｆ０）〜Ｄｏｆ１に相当し、１番目の領域はＤｏｆ１（１番目の領域のオフセット値）〜Ｄｏｆ２に相当し、２番目の領域はＤｏｆ２（２番目の領域のオフセット値）〜Ｄｏｆ３に相当する。以下、ｎ番目まで同様である。オフセット値Ｄｏｆ０，Ｄｏｆ１，Ｄｏｆ２，Ｄｏｆ３・・・Ｄｏｆｎの値は、前述のように、Ｄｏｆｎ＝Ｄｓｄ＊ｎ（ｎ＝０〜Ｎｄｉｖ−１）なる式により算出され、それぞれ所定のメモリに記憶される。
【００７５】
今、仮に、実データ（ｔＤｆｘ）が算出されたとする（Ｓ５１０）。そして、その実データ（ｔＤｆｘ）の値は、２番目の領域（Ｄｏｆ２〜Ｄｏｆ３）に含まれるとする。
この場合、Ｄｏｆ２≦ｔＤｆｘ＜Ｄｏｆ３であると算出され、ｎ＝２（実データ：ｔＤｆｘは２番目の領域に含まれる）と算出される（Ｓ５３０）。
【００７６】
この時、実データ（ｔＤｆｘ）を格納するメモリの分解能（Ｖａｃ）は、前述のように、Ｖａｃ＝Ｄｓｄ／Ｄｓ＿ｍａｘなる式により算出される（Ｓ４４０）。データ範囲（Ｄｓｄ）は、Ｄｏｆ２〜Ｄｏｆ３の範囲の幅である。つまり、メモリに格納されるデータはデータ範囲（Ｄｓ）ではなくデータ範囲（Ｄｓｄ：Ｄｏｆ２〜Ｄｏｆ３）のみ表せれば良いため、より細かい桁を表現できる。このため、データ精度が向上する。
【００７７】
一方、実データ（ｔＤｆｘ）の値が含まれる領域のオフセット値（Ｄｏｆ２）が別途算出されるため、これによりそのオフセット値（Ｄｏｆ２）とメモリに格納された高分解能の値とで実データ（ｔＤｆｘ）は正しく表される。
【００７８】
ここで、車両における後処理制御を例にとり、本第２実施形態の適用例（応用例）について説明する。後処理制御とは、具体的に説明すると、例えばディーゼルエンジンの排出ガスに含まれる粒子状物質（ＰＭ）をディーゼルパティキュレートフィルタ（ＤＰＦ）で捕捉し、その捕捉したＰＭが既定量に達した時にＤＰＦの温度を上げ、ＤＰＦに担持した触媒の反応によりＰＭを燃焼させ、ＰＭが付着したＤＰＦを再生する、というような制御である。
【００７９】
このような後処理制御においては、ディーゼルエンジンの１サイクルにおいて発生するＰＭ量が算出され、その算出値が積算される。積算値が、ＤＰＦに堆積するＰＭ量となる。積算値は、バックアップＲＡＭ２０、或いはＥＥＰＲＯＭ３０に格納される（更新記憶される）。ところで、１サイクル当たりのＰＭの発生量は極僅かであるが、積算されていくとその値は大きくなる。このため、ＰＭ量の値を高分解能、かつ広範囲にわたって記憶できる構成が必要となる。この点、従来は、バックアップＲＡＭ２０、或いはＥＥＰＲＯＭ３０の容量を大きくすることで対応する場合があった。
【００８０】
これに対し、本第２実施形態の構成によれば、データ範囲を分割し、メモリ（バックアップＲＡＭ２０、或いはＥＥＰＲＯＭ３０）に格納する値の幅を、その分割後の各領域の幅に狭めることで、分解能を向上させることができると共に、各領域の始値（オフセット値）を別途保持することで、広範囲にわたる数値を記憶することができる。これにより、メモリ容量を増加させなくても、所望の値を、高分解能、かつ広範囲にわたって記憶できるようになっている。
【００８１】
尚、本実施形態において、Ｓ４２０の処理が個別データ幅算出手段に相当し、Ｓ４３０の処理がオフセット値算出手段に相当している。
［第３実施形態］
次に、第３実施形態について、第２実施形態と比較してその第２実施形態と異なる点を中心に説明する。
【００８２】
第３実施形態では、第２実施形態と比較して、制御ロジックにて浮動小数演算が実行される点が異なっており、これにより浮動小数型データが算出されるようになっている。
そして、ＣＰＵ１２は、浮動小数型データを固定小数型データに変換する処理を実行するようになっている。
【００８３】
具体的に、第３実施形態では、第２実施形態と比較して、ＣＰＵ１２は、図６の格納処理に代えて図９の処理を実行するようになっている。図９の処理は、制御データを更新、或いは参照するタイミングで実行される。
【００８４】
図９の処理では、まず、Ｓ７１０で、浮動小数型の所定の実データ（ｔＤｆｌ）を算出する。
次に、Ｓ７２０に進み、オフセット値（Ｄｏｆｎ）を算出する。このＳ７２０の処理は、図６のＳ５２０の処理と同じである。
【００８５】
次に、Ｓ７３０に進み、データ範囲（Ｄｓ）を分割数（Ｎｄｉｖ）で等分割した分割後の領域のうち、実データ（ｔＤｆｌ）が何番目の領域に含まれるかを算出する。オフセット値（Ｄｏｆｎ）のｎの値を算出する（Ｄｏｆｎの具体的な値を算出する）趣旨である。Ｓ７３０で「ｎの算出」と記載しているのはそのためである。例えば、実データ（ｔＤｆｌ）の値が、Ｓ７２０で算出したオフセット値と比較して、Ｄｏｆ２≦ｔＤｆｌ＜Ｄｏｆ３であれば、ｎ＝２となる。
【００８６】
次に、Ｓ７４０に進み、実データ（ｔＤｆｌ）を、前述のＳ４４０で予め算出したメモリの分解能（Ｖａｃ）に合致するデータに変換してその変換したデータをメモリに書き込む。尚、前述のように、メモリに書き込まれたデータが、各種制御ロジックで利用可能な制御データ（Ｄｆｘ）である。制御データ（Ｄｆｘ）は、Ｄｆｘ＝（ｔＤｆｌ−Ｄｏｆｎ）／Ｖａｃなる式により算出される。Ｓ７４０の後は、当該処理を終了する。
【００８７】
このように、本第３実施形態においては、制御ロジックによる演算は浮動小数型で実行することにより精度を確保し、算出された浮動小数型のデータは固定小数型に変換してメモリに格納することにより、メモリの容量を節約するようにしている。例えば、単精度浮動小数型のデータを格納するには４バイトが必要であるが、固定小数型のデータに変換すれば２バイトで済む。このため、メモリ容量を節約することができる。
〈変形例１〉
ところで、上記第３実施形態では、以下に示す変形例１のように構成しても良い。
【００８８】
図１０は、変形例１の内容を説明する図面である。具体的に、図１０は、図９のＳ７４０の処理で算出された制御データ（Ｄｆｘ）、及びＳ７３０の処理で算出されたｎの値（オフセット値：Ｄｏｆｎにおけるｎの値）を、ＥＥＰＲＯＭ３０（図１参照）に記憶する方法を示す図面である。
【００８９】
まず、図１０（ａ）について説明する。前述のＳ７１０で算出された実データ（ｔＤｆｌ１，ｔＤｆｌ２）は、固定小数型データである制御データ（Ｄｆｘ１，Ｄｆｘ２）に変換される（Ｓ７４０）。また、制御データ（Ｄｆｘ１，Ｄｆｘ２）の最小値〜最大値の可変範囲を分割した後の個々の領域のうち、何れの領域にその制御データ（Ｄｆｘ１，Ｄｆｘ２）が含まれるかを表すｎの値（ｎ１，ｎ２）がそれぞれ算出される（Ｓ７３０）。
【００９０】
そして、図１０（ｂ）に示すが、算出されたｎの値（ｎ１，ｎ２）がそれぞれビット値に変換され、ＥＥＰＲＯＭ３０に記憶される。ｎの値（ｎ１，ｎ２）を記憶する点について、これは、オフセット値（Ｄｏｆｎ）を記憶することに代えてｎの値（ｎ１，ｎ２）を記憶する趣旨である。より具体的に、オフセット値（Ｄｏｆｎ）をｎ＝０〜Ｎｄｉｖ−１のそれぞれについて記憶するとメモリの容量が多く必要となるため、ｎの値のみを記憶しておき、そのｎの値からオフセット値（Ｄｏｆｎ）の具体的な値を算出できるようにするものである。
【００９１】
例えば、所定の１６ビットのメモリ領域において、最初の１，２ビット目をｎ１の記憶用に割り当て、次の３，４ビット目をｎ２の記憶用に割り当てていく。以下同様である。最後の１５，１６ビット目はｎ８の記憶用に割り当てられる。図１０（ｂ）の例のようにｎの値を記憶するメモリ領域として２ビットが割り当てられれば、ｎの値として０〜３までを表現できる。
【００９２】
このような変形例１によれば、オフセット値（Ｄｏｆｎ）をｎ＝０〜Ｎｄｉｖ−１のそれぞれについて記憶する場合と比較して、メモリ容量を削減することができる。
例えば、図１０（ｃ）に示すように、データ範囲（Ｄｓ）は１０（最小値０〜最大値１０）、分割数（Ｎｄｉｖ）は４（つまり、４分割）、メモリの型は２バイト、制御データ（ｔＤｆｌ）の値は３．５の場合を例にとり説明する。
【００９３】
分割後のデータ範囲（Ｄｓｄ）は、１０（データ範囲：Ｄｓ）／４（分割数：Ｎｄｉｖ）＝２．５となる。分解能（Ｖａｃ）は、２．５（データ範囲：Ｄｓｄ）／６５５３５（２バイト）となる。
【００９４】
また、最小値０〜最大値１０の領域を４分割した後の領域は、それぞれ、０〜２．５（領域０：ｎ＝０）、２．５〜５．０（領域１：ｎ＝１）、５．０〜７．５（領域２：ｎ＝２）、７．５〜１０（領域３：ｎ＝３）となる。制御データ（ｔＤｆｌ）の値である３．５は、領域１に含まれる（つまり、ｎ＝１である）。
【００９５】
この場合、本変形例１では、ｎの値である１がビット値に変換されて記憶される。これによれば、オフセット値（２．５）を記憶しておかなくても、２．５（データ範囲：Ｄｓｄ）＊１によりそのオフセット値（２．５）を算出できるため、オフセット値を記憶する場合と比較してメモリの容量を節約することができる。
【００９６】
また一方、制御データ（Ｄｆｘ）用のメモリには、３．５（実データ：ｔＤｆｌ）−２．５（オフセット値：Ｄｏｆ１）＝１が記憶されるのであるが、分解能（Ｖａｃ）を用いて変換すると、１／（２．５／６５５３５）＝２６２１４となる。１６進数表示なら０ｘ６６６６である。つまり、Ｄｆｘは０ｘ６６６６で表され、このデータがメモリに記憶される。尚、０ｘ６６６６の「０ｘ」は、１６進数表示であることを示す符号である。そして、制御ロジックのプログラムにおいて用いる実データ（ｔＤｆｌ）の算出に際しては、〜０ｘ６６６６の表す１（１０進数）とオフセット値２．５（１０進数）とから実データ（ｔＤｆｌ）＝３．５（１０進数）と算出される。
［第４実施形態］
次に、第４実施形態について、第３実施形態と比較してその第３実施形態と異なる点を中心に説明する。
【００９７】
第４実施形態は、第３実施形態と比較して、データに求められる精度（要求精度）が予め定められている点、データ範囲（Ｄｓ）の分割数（Ｎｄｉｖ）が予め定められておらず、要求精度を満たすように、データ範囲（Ｄｓ）に応じて分割数（Ｎｄｉｖ）及びオフセット値（Ｄｏｆｎ）を算出する点が異なっている。
【００９８】
具体的に、第４実施形態では、第３実施形態と比較して、ＣＰＵ１２は、図９の処理に代えて図１１の処理を実行するようになっている。図１１の処理は、制御データを更新、或いは参照するタイミングで実行される。
【００９９】
図１１の処理では、まず、Ｓ８１０において、浮動小数型の実データ（ｔＤｆｌ）が算出される。
次に、Ｓ８２０に進み、予め定められるメモリの型（Ｄｓｐ）、及び分解能（Ｖａｃ）を取得する。このメモリの型（Ｄｓｐ）及びメモリの分解能（Ｖａｃ）を表す情報は、予め所定のメモリに記憶されており、Ｓ８２０では、その情報を読み出すようになっている。
【０１００】
次に、Ｓ８３０に進み、実データ（ｔＤｆｌ）のデータ範囲（Ｄｓ）を算出する。データ範囲（Ｄｓ）は、実データ（ｔＤｆｌ）の最大値−最小値なる式により算出される。このデータ範囲（Ｄｓ）は、各種制御要件に基づき、ソフトウェア上で算出されるものである。つまり、制御要件に応じて変化する。
【０１０１】
次に、Ｓ８４０に進み、データ範囲（Ｄｓ）の分割数（Ｎｄｉｖ）を算出する。具体的に、分割後の個々のデータの範囲（幅）をメモリに格納する場合の分解能が、Ｓ８２０で取得した分解能（Ｖａｃ）を満たすように分割数（Ｎｄｉｖ）を算出する。分割数（Ｎｄｉｖ）は、分割数（Ｎｄｉｖ）＝ｔＤａｔａ／Ｄｓ＿ｍａｘなる式により算出される。ここで、ｔＤａｔａ＝Ｄｓ／Ｖａｃである。尚、分割数（Ｎｄｉｖ）の算出において、小数点以下は切り上げとなる。
【０１０２】
次に、Ｓ８５０に進み、オフセット値（Ｄｏｆｎ）を算出する。具体的に、オフセット値（Ｄｏｆｎ）は、オフセット値（Ｄｏｆｎ）＝データ範囲（Ｄｓｄ）＊ｎ（ｎ＝０〜Ｎｄｉｖ−１）なる式により算出される。Ｄｓｄ＝ｔＤａｔａ／Ｎｄｉｖである。
【０１０３】
次に、Ｓ８６０に進み、制御データ（Ｄｆｘ）を算出する。具体的に、制御データ（Ｄｆｘ）は、Ｄｆｘ＝（ｔＤｆｌ−Ｄｏｆｊ）／Ｖａｃなる式により算出される。Ｄｏｆｊのｊの値は、Ｄｏｆｊ≦ｔＤｆｌ＜Ｄｏｆｊ＋１の式に基づき算出される。つまり、Ｄｏｆｊ≦ｔＤｆｌ＜Ｄｏｆｊ＋１を満たすようにｊの値が算出される。
【０１０４】
尚、本第４実施形態において、Ｓ８４０の処理が分割数算出手段に相当している。
〈変形例２〉
ところで、上記第２〜第４実施形態では、以下に示す変形例２のように構成しても良い。図１２は、変形例２の内容を説明する図面である。具体的に、図１２に示す変形例２では、メモリの分解能（Ｖａｃ）、及びオフセット値（Ｄｏｆｎ）をソフトウェア上で動的に算出するか否かを管理するようにしている。言い換えると、メモリの分解能（Ｖａｃ）、及びオフセット値（Ｄｏｆｎ）をソフトウェア上で動的に算出する構成を有効にするか無効にするかを管理するようにしている。
【０１０５】
例えば、図１２の例では、２ビットのデータ（つまり、０〜３の数値）で管理している。また、その２ビットの管理情報は、データの種別毎に保持される。具体的に、図１２の例では、２バイトのデータ中に、２ビットの管理情報が８種類記憶されるようになっている。つまり、８種類のデータのそれぞれについて、２ビットの管理情報が割り当てられている。
【０１０６】
図１２の例では、２ビットのデータが表す０〜３の数値のうち、０が適用を表す。具体的に、「適用」の場合は、メモリの分解能（Ｖａｃ）、及びオフセット値（Ｄｏｆｎ）がソフトウェア上で動的に算出されるようになる。例えば、第２実施形態、或いは第３実施形態が実現されることに相当し、より具体的には、第２実施形態のＳ４３０及びＳ４４０の処理が実行されるようにすることに相当する。
【０１０７】
一方、図１２の例では、１〜３が非適用を表す。
このうち、１は、分解能（Ｖａｃ）が１６０／２５６に固定され、オフセット値（Ｄｏｆｎ）が０に固定される例を表す。２は、分解能（Ｖａｃ）が２００／２５６に固定され、オフセット値（Ｄｏｆｎ）が１０に固定される例を表す。３は、分解能（Ｖａｃ）が−１に固定され、オフセット値（Ｄｏｆｎ）が１に固定される例を表す。これは、例えば分解能（Ｖａｃ）が予め定められる第４実施形態が実現されるようにすることに相当する。
【０１０８】
このような変形例２によれば、メモリの分解能（Ｖａｃ）、或いはオフセット値（Ｄｏｆｎ）がソフトウェア上で動的に算出される構成を有効にする、或いは無効にする、ということを簡単にできるため、自由度が広がる。例えば分解能（Ｖａｃ）を固定したいと言う開発者（設計者）の要望にも容易に応えることができる。
〈変形例３〉
次に、上記第１〜第４実施形態において、制御データ（Ｄｆｘ）の型として固定小数型を適用するか浮動小数型を適用するかは、以下のようにして決定しても良い。
【０１０９】
具体的に、ＣＰＵ１２は、図１３の処理を実行して、固定小数型を採用するか浮動小数型を採用するかを決定するようにしている。
図１３の処理では、まず、Ｓ９１０において、メモリの型（Ｄｓｐ）、及びメモリの分解能（Ｖａｃ）を取得する。メモリの分解能（Ｖａｃ）は、前述のＳ１３０或いはＳ４４０で算出されるものである。
【０１１０】
そして、次に、Ｓ９２０に進み、Ｓ９１０で取得したメモリの分解能（Ｖａｃ）が、予め要求される分解能（Ｖａｃｍｉｎ）以下か否か（言い換えると、分解能が高いか否か、或いは分解能が優れているか否か）を判断する。
【０１１１】
Ｓ９２０でＶａｃ≦Ｖａｃｍｉｎであると判定すると（Ｓ９２０：ＹＥＳ）、Ｓ９１０で取得した分解能（Ｖａｃ）が要求される分解能（Ｖａｃｍｉｎ）より高いと判断してＳ９３０に移行し、固定小数型を適用する。固定小数型を適用することで、必要なメモリ容量を節約する趣旨である。そしてその後、当該処理を終了する。
【０１１２】
一方、Ｓ９２０でＶａｃ≦Ｖａｃｍｉｎが成立しない、つまり、Ｖａｃ＞Ｖａｃｍｉｎであると判定すると（Ｓ９２０：ＮＯ）、Ｓ９１０で取得した分解能（Ｖａｃ）が要求される分解能（Ｖａｃｍｉｎ）より劣ると判断してＳ９４０に移行し、浮動小数型を適用する。制御データ（Ｄｆｘ）の分解能（データ精度）が要求値より悪化しないようにする趣旨である。そしてその後、当該処理を終了する。
【０１１３】
このような本変形例３では、メモリ容量を節約することと、分解能（データ精度）が要求値より悪化しないようにすることとを両立することができる。
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の技術範囲内において種々の形態をとることができる。
【０１１４】
例えば、上記第１実施形態において、図２の分解能算出処理は定期的に実行されても良い。尚、定期的に実行される場合には、Ｓ１３０の処理で算出されたＶａｃが保持される必要がある。つまり、算出されたＶａｃが所定のメモリ領域に記憶される必要がある。
【０１１５】
また図２の分解能算出処理において、データ範囲が変化した場合にのみＶａｃが更新（算出）されるようにしても良い。例えば、ＣＰＵ１２は、図２の処理において、Ｓ１１０にてＤｓ（データ範囲）を取得した後、そのＤｓ（データ範囲）が前回の取得値から変化したか否かを判定し、変化したと判定すると、Ｓ１３０の処理を実行してＶａｃを更新（算出）するようにしても良い。
【０１１６】
また、図２の分解能算出処理において、制御データの値がとり得る最小値（Ｖｍｉｎ）及び最大値（Ｖｍａｘ）をフラッシュＲＯＭ１６に予め記憶させておき、Ｓ１１０の処理では、ＣＰＵ１２は、その最小値（Ｖｍｉｎ）及び最大値（Ｖｍａｘ）をフラッシュＲＯＭ１６から読み出して、データ範囲（Ｄｓ）＝最大値（Ｖｍａｘ）−最小値（Ｖｍｉｎ）の演算を実行することによりデータ範囲（Ｄｓ）を算出するようにしても良い。図５の算出処理についても同様である。
【０１１７】
また、上記変形例２において、データをより大きな分類にグループ分けしたグループ毎に管理情報が割り当てられても良い。また、分割数（Ｎｄｉｖ）が動的に算出される構成について、有効／無効が管理されるようにしても良い。また、場合によっては、メモリの型を動的に算出する構成を付加しても良く、この場合も、メモリの型を動的に算出する構成について、有効／無効が管理されるようにしても良い。
【図面の簡単な説明】
【０１１８】
【図１】本実施形態のＥＣＵ１の構成図である。
【図２】ＣＰＵ１２が実行する分解能算出処理を表すフローチャートである。
【図３】ＣＰＵ１２が実行する格納処理を表すフローチャートである。
【図４】ＣＰＵ１２が実行する変換処理を表すフローチャートである。
【図５】第２実施形態のＣＰＵ１２が実行する分解能算出処理を表すフローチャートである（その１）。
【図６】第２実施形態のＣＰＵ１２が実行する格納処理を表すフローチャートである（その２）。
【図７】第２実施形態のＣＰＵ１２が実行する変換処理を表すフローチャートである（その３）。
【図８】第２実施形態の作用を表す図面である。
【図９】第３実施形態のＣＰＵ１２が実行する処理を表すフローチャートである。
【図１０】変形例１の内容を表す図面である。
【図１１】第４実施形態のＣＰＵ１２が実行する処理を表すフローチャートである。
【図１２】変形例２の内容を表す図面である。
【図１３】変形例３のＣＰＵ１２が実行する処理を表すフローチャートである。
【符号の説明】
【０１１９】
１…ＥＣＵ、１０…マイコン、１２…ＣＰＵ、１４…ＦＰＵ、１６…フラッシュＲＯＭ、１８…ＲＡＭ、２０…バックアップＲＡＭ、３０…ＥＥＰＲＯＭ。
【図１】
0005040710.tif 000002
【図２】
0005040710.tif 000003
【図３】
0005040710.tif 000004
【図４】
0005040710.tif 000005
【図５】
0005040710.tif 000006
【図６】
0005040710.tif 000007
【図７】
0005040710.tif 000008
【図８】
0005040710.tif 000009
【図９】
0005040710.tif 000010
【図１０】
0005040710.tif 000011
【図１１】
0005040710.tif 000012
【図１２】
0005040710.tif 000013
【図１３】
0005040710.tif 000014