請求項1記載のマイクロコンピュータは、自身が保有するタイマに対して目標時間を指定して時間計測の開始を指令するアプリケーションと、アプリケーションから時間計測の開始の指令を受けたときに目標時間をセットし、目標時間に達したときにアプリケーションに対して目標時間を計測したことを通知するタイマと、タイマフレームワークからのタイマを進める指令に基づいて時間計測中のタイマを進めるチッカと、基準クロック間隔でチッカに対してタイマを進めることを指令するタイマフレームワークとを備えることを特徴とする。請求項1記載のマイクロコンピュータによれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができる。
請求項2記載のマイクロコンピュータは、自身が保有するタイマに対して目標時間を指定して時間計測の開始を指令するアプリケーションと、アプリケーションから時間計測の開始の指令を受けたときに自身をチッカに登録することを指令し、目標時間に達したときにチッカから自身の登録を抹消してアプリケーションに対して目標時間を計測したことを通知するタイマと、タイマからチッカへの登録の指令を受けたときに該タイマを自身に登録し、タイマフレームワークからのタイマを進める指令に基づいて時間計測中のタイマを進めるチッカと、基準クロック間隔でチッカに対してタイマを進めることを指令するタイマフレームワークとを備えることを特徴とする。請求項2記載のマイクロコンピュータによれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができるとともに、CPUの処理負荷を低減できる。
請求項3記載のマイクロコンピュータは、請求項1または請求項2記載のマイクロコンピュータにおいて、前記タイマが前記目標時間の変数領域として全て同一サイズの領域を確保し、複数の前記チッカが互いに異なるチック間隔を持つことを特徴とする。請求項3記載のマイクロコンピュータによれば、タイマが同じサイズの目標時間の変数領域を扱い、チッカのチック間隔を変えることで、計測できる時間の長さを変えることにより、計測する時間の長短にかかわらず、共通のロジックで時間計測を行うことができるという効果がある。この結果、アプリケーションの開発が容易になり、開発者の負担が軽減するとともに、アプリケーションにおけるバグの発生も抑えることができる。
請求項4記載のマイクロコンピュータは、自身が保有するタイマに対して目標時間を指定して時間計測の開始を指令するアプリケーションと、アプリケーションから時間計測の開始の指令を受けたときに目標時間を対応するチッカのチック間隔で割った目標カウント値を設定し、チッカからのチック数をカウントする指令に基づいて目標までの残りのカウント値を演算し、目標カウント値に達したときにアプリケーションに対して目標時間を計測したことを通知するタイマと、タイマフレームワークからのタイマを進める指令に基づいて時間計測中のタイマのチック数を求め、該チック数をカウントすることをタイマに指令するチッカと、基準クロック間隔でチッカに対してタイマを進めることを指令するタイマフレームワークとを備えることを特徴とする。請求項4記載のマイクロコンピュータによれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。特に、アプリケーションは、目標時間を指定するだけで、チッカの数やチック間隔を事前に知っている必要がないので、その開発がきわめて容易になる。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができるとともに、CPUの処理負荷を低減できる。
請求項5記載のマイクロコンピュータは、自身が保有するタイマに対して目標時間を指定して時間計測の開始を指令するアプリケーションと、アプリケーションから時間計測の開始の指令を受けたときに目標時間を対応するチッカのチック間隔で割った目標カウント値を設定して自身を該チッカに登録することを指令し、チッカからのチック数をカウントする指令に基づいて目標までの残りのカウント値を演算し、目標カウント値に達したときにチッカから自身の登録を抹消してアプリケーションに対して目標時間を計測したことを通知するタイマと、タイマからチッカへの登録の指令を受けたときに該タイマを自身に登録し、タイマフレームワークからのタイマを進める指令に基づいて時間計測中のタイマのチック数を求め、該チック数をカウントすることをタイマに指令するチッカと、基準クロック間隔でチッカに対してタイマを進めることを指令するタイマフレームワークとを備えることを特徴とする。請求項5記載のマイクロコンピュータによれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。特に、アプリケーションは、目標時間を指定するだけで、チッカの数やチック間隔を事前に知っている必要がないので、その開発がきわめて容易になる。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができるとともに、CPUの処理負荷を低減できる。
請求項6記載のマイクロコンピュータは、請求項4または請求項5記載のマイクロコンピュータにおいて、前記タイマが前記目標カウント値の変数領域として全て同一サイズの領域を確保し、複数の前記チッカが互いに異なるチック間隔を持つことを特徴とする。請求項6記載のマイクロコンピュータによれば、タイマが同じサイズの目標カウント値の変数領域を扱い、チッカのチック間隔を変えることで、計測できる時間の長さを変えることにより、計測する時間の長短にかかわらず、共通のロジックで時間計測を行うことができるという効果がある。この結果、アプリケーションの開発が容易になり、開発者の負担が軽減するとともに、アプリケーションにおけるバグの発生も抑えることができる。
請求項7記載のマイクロコンピュータは、CPU,タイマブロックおよび間欠動作制御部を備え、CPUが通常動作モードと、スリープ状態にあって間欠的にウェイクアップ状態を繰り返す低消費電力モードとをとるマイクロコンピュータにおいて、自身が保有するタイマに対して目標時間を指定して時間計測の開始を指令するアプリケーションと、アプリケーションから時間計測の開始の指令を受けたときに目標時間をセットし、目標時間に達したときにアプリケーションに対して目標時間を計測したことを通知するタイマと、タイマフレームワークからのタイマを進める指令に基づいて時間計測中のタイマを進めるチッカと、基準クロック間隔でチッカに対してタイマを進めることを指令するタイマフレームワークとを備えることを特徴とする。請求項7記載のマイクロコンピュータによれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができるとともに、CPUの処理負荷を低減できる。さらに、低消費電力モードではウェイクアップ状態の間欠動作時にスリープ状態でのスリープ時間分だけタイマを進めるので、個々のアプリケーションでスリープ状態におけるタイマの遅れを考慮する必要がなくなり、チッカで一括してスリープ状態によるタイマの遅れを補正することができる。この結果、アプリケーションの開発が容易になり、開発者の負担が軽減するとともに、アプリケーションにおけるバグの発生も抑えることができる。
請求項8記載のマイクロコンピュータは、CPU,タイマブロックおよび間欠動作制御部を備え、CPUが通常動作モードと、スリープ状態にあって間欠的にウェイクアップ状態を繰り返す低消費電力モードとをとるマイクロコンピュータにおいて、自身が保有するタイマに対して目標時間を指定して時間計測の開始を指令するアプリケーションと、アプリケーションから時間計測の開始の指令を受けたときに自身をチッカに登録することを指令し、目標時間に達したときにチッカから自身の登録を抹消してアプリケーションに対して目標時間を計測したことを通知するタイマと、タイマからチッカへの登録の指令を受けたときに該タイマを自身に登録し、タイマフレームワークからのタイマを進める指令に基づいて時間計測中のタイマを進めるチッカと、基準クロック間隔でチッカに対してタイマを進めることを指令するタイマフレームワークとを備えることを特徴とする。請求項8記載のマイクロコンピュータによれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができるとともに、CPUの処理負荷を低減できる。さらに、低消費電力モードではウェイクアップ状態の間欠動作時にスリープ状態でのスリープ時間分だけタイマを進めるので、個々のアプリケーションでスリープ状態におけるタイマの遅れを考慮する必要がなくなり、チッカで一括してスリープ状態によるタイマの遅れを補正することができる。この結果、アプリケーションの開発が容易になり、開発者の負担が軽減するとともに、アプリケーションにおけるバグの発生も抑えることができる。
請求項9記載のマイクロコンピュータは、請求項7または請求項8記載のマイクロコンピュータにおいて、前記タイマが前記目標時間の変数領域として全て同一サイズの領域を確保し、複数の前記チッカが互いに異なるチック間隔を持つことを特徴とする。請求項9記載のマイクロコンピュータによれば、タイマが同じサイズの目標時間の変数領域を扱い、チッカのチック間隔を変えることで、計測できる時間の長さを変えることにより、計測する時間の長短にかかわらず、共通のロジックで時間計測を行うことができるという効果がある。この結果、アプリケーションの開発が容易になり、開発者の負担が軽減するとともに、アプリケーションにおけるバグの発生も抑えることができる。
請求項10記載のマイクロコンピュータは、CPU,タイマブロックおよび間欠動作制御部を備え、CPUが通常動作モードと、スリープ状態にあって間欠的にウェイクアップ状態を繰り返す低消費電力モードとをとるマイクロコンピュータにおいて、自身が保有するタイマに対して目標時間を指定して時間計測の開始を指令するアプリケーションと、アプリケーションから時間計測の開始の指令を受けたときに目標時間を対応するチッカのチック間隔で割った目標カウント値を設定し、チッカからのチック数をカウントする指令に基づいて目標までの残りのカウント値を演算し、目標カウント値に達したときにアプリケーションに対して目標時間を計測したことを通知するタイマと、タイマフレームワークからのタイマを進める指令に基づいて時間計測中のタイマのチック数を求め、該チック数をカウントすることをタイマに指令するチッカと、基準クロック間隔でチッカに対してタイマを進めることを指令するタイマフレームワークとを備えることを特徴とする。請求項10記載のマイクロコンピュータによれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができる。
請求項11記載のマイクロコンピュータは、CPU,タイマブロックおよび間欠動作制御部を備え、CPUが通常動作モードと、スリープ状態にあって間欠的にウェイクアップ状態を繰り返す低消費電力モードとをとるマイクロコンピュータにおいて、自身が保有するタイマに対して目標時間を指定して時間計測の開始を指令するアプリケーションと、アプリケーションから時間計測の開始の指令を受けたときに目標時間を対応するチッカのチック間隔で割った目標カウント値を設定して自身を該チッカに登録することを指令し、チッカからのチック数をカウントする指令に基づいて目標までの残りのカウント値を演算し、目標カウント値に達したときにチッカから自身の登録を抹消してアプリケーションに対して目標時間を計測したことを通知するタイマと、タイマからチッカへの登録の指令を受けたときに該タイマを自身に登録し、タイマフレームワークからのタイマを進める指令に基づいて時間計測中のタイマのチック数を求め、該チック数をカウントすることをタイマに指令するチッカと、基準クロック間隔でチッカに対してタイマを進めることを指令するタイマフレームワークとを備えることを特徴とする。請求項11記載のマイクロコンピュータによれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができるとともに、CPUの処理負荷を低減できる。
請求項12記載のマイクロコンピュータは、請求項10または請求項11記載のマイクロコンピュータにおいて、前記タイマが前記目標カウント値の変数領域として全て同一サイズの領域を確保し、複数の前記チッカが互いに異なるチック間隔を持つことを特徴とする。請求項12記載のマイクロコンピュータによれば、タイマが同じサイズの目標カウント値の変数領域を扱い、チッカのチック間隔を変えることで、計測できる時間の長さを変えることにより、計測する時間の長短にかかわらず、共通のロジックで時間計測を行うことができるという効果がある。この結果、アプリケーションの開発が容易になり、開発者の負担が軽減するとともに、アプリケーションにおけるバグの発生も抑えることができる。
請求項13記載のマイクロコンピュータは、請求項7ないし請求項12のいずれかに記載のマイクロコンピュータにおいて、前記チッカが、現在時刻と前回更新時刻との差である経過時間をチック間隔で割った商であるチック数を時間計測中のタイマの目標カウント値までの残りのカウント値を演算させることにより、低消費電力モードでもウェイクアップ状態の間欠動作時にスリープ状態でのスリープ時間分だけタイマを進めることを特徴とする。請求項13記載のマイクロコンピュータによれば、低消費電力モードではウェイクアップ状態の間欠動作時にスリープ状態でのスリープ時間分だけタイマを進めるので、個々のアプリケーションでスリープ状態におけるタイマの遅れを考慮する必要がなくなり、チッカで一括してスリープ状態によるタイマの遅れを補正することができる。この結果、アプリケーションの開発が容易になり、開発者の負担が軽減するとともに、アプリケーションにおけるバグの発生も抑えることができる。さらに、チッカにタイマが登録されていないときには、マイクロコンピュータは、CPUのスリープ状態を続けることが可能になり、省電力化に資することができる。
請求項14記載のマイクロコンピュータは、請求項1ないし請求項13のいずれかに記載のマイクロコンピュータにおいて、前記タイマフレームワークが、チック間隔が短いチッカに関連付けられたタイマのうち1つでも時間を計測しているときには動作停止命令を発行しないようにすることにより、CPUのスリープを禁止することを特徴とする。請求項14記載のマイクロコンピュータによれば、チック間隔が短いチッカでは時間計測中にCPUをスリープさせないようにできる。この結果、CPUが頻繁にスリープ/ウェイクアップを繰り返すことが防止されるので、電力消費を抑えることができる。また、スリープ可否は計測する時間の長さで一意に決まるので、開発者はスリープを注意深く考えて設計していたことから解放されるという効果がある。
請求項15記載の時間計測方法は、マイクロコンピュータの時間計測方法において、アプリケーションがタイマに対して目標時間を指定して時間計測の開始を指令する工程と、アプリケーションから時間計測の開始を指令されたときにタイマが目標時間をセットする工程と、タイマフレームワークがチッカに対してタイマを進めることを指令する工程と、タイマフレームワークからタイマを進めることを指令されたときにチッカが時間計測中のタイマを進める工程と、タイマが目標時間に達したときにアプリケーションに対して時間計測の終了を通知する工程とを含むことを特徴とする。請求項15記載の時間計測方法によれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができる。
請求項16記載の時間計測方法は、マイクロコンピュータの時間計測方法において、アプリケーションがタイマに対して目標時間を指定して時間計測の開始を指令する工程と、アプリケーションから時間計測の開始を指令されたときにタイマが自身を登録することを該チッカに指令する工程と、タイマから登録を指令されたときにチッカがタイマを登録する工程と、タイマフレームワークがチッカに対してタイマを進めることを指令する工程と、タイマフレームワークからタイマを進めることを指令されたときにチッカが時間計測中のタイマを進める工程と、タイマが目標時間に達したときにアプリケーションに対して時間計測の終了を通知する工程とを含むことを特徴とする。請求項16記載の時間計測方法によれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができるとともに、CPUの処理負荷を低減できる。
請求項17記載の時間計測方法は、請求項15または請求項16記載の時間計測方法において、前記タイマが前記目標時間の変数領域として全て同一サイズの領域を確保し、複数の前記チッカが互いに異なるチック間隔を持つことを特徴とする。タイマが同じサイズの目標時間の変数領域を扱い、チッカのチック間隔を変えることで、請求項17記載の時間計測方法によれば、計測できる時間の長さを変えることにより、計測する時間の長短にかかわらず、共通のロジックで時間計測を行うことができるという効果がある。この結果、アプリケーションの開発が容易になり、開発者の負担が軽減するとともに、アプリケーションにおけるバグの発生も抑えることができる。
請求項18記載の時間計測方法は、マイクロコンピュータの時間計測方法において、アプリケーションが、自身が保有するタイマに対して目標時間を指定して時間計測の開始を指令する工程と、アプリケーションから時間計測の開始の指令を受けたときに、タイマが、目標時間を対応するチッカのチック間隔で割った目標カウント値を設定する工程と、タイマフレームワークが、チッカに対してタイマを進めることを指令する工程と、タイマフレームワークからのタイマを進める指令に基づいて、チッカが、時間計測中のタイマに対してチック数をカウントするように指令する工程と、タイマが、チッカからのチック数をカウントする指令に基づいて目標までの残りのカウント値を演算し、目標カウント値に達したときに、アプリケーションに対して目標時間を計測したことを通知する工程とを含むことを特徴とする。請求項18記載の時間計測方法によれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。特に、アプリケーションは、目標時間を指定するだけで、チッカの数やチック間隔を事前に知っている必要がないので、その開発がきわめて容易になる。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができるとともに、CPUの処理負荷を低減できる。
請求項19記載の時間計測方法は、マイクロコンピュータの時間計測方法において、アプリケーションがタイマに対して目標時間を指定して時間計測の開始を指令する工程と、アプリケーションから時間計測の開始を指令されたときにタイマが、目標時間を対応するチッカのチック間隔で割った目標カウント値を設定するとともに自身を登録することを該チッカに指令する工程と、タイマから登録を指令されたときにチッカがタイマを登録する工程と、タイマフレームワークがチッカに対してタイマを進めることを指令する工程と、タイマフレームワークからのタイマを進める指令に基づいて、チッカが、時間計測中のタイマに対してチック数をカウントするように指令する工程と、タイマが、チッカからのチック数をカウントする指令に基づいて目標までの残りのカウント値を演算し、目標カウント値に達したときに、チッカから自身の登録を抹消して、アプリケーションに対して目標時間を計測したことを通知する工程とを含むことを特徴とする。請求項19記載の時間計測方法によれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。特に、アプリケーションは、目標時間を指定するだけで、チッカの数やチック間隔を事前に知っている必要がないので、その開発がきわめて容易になる。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができるとともに、CPUの処理負荷を低減できる。
請求項20記載の時間計測方法は、請求項18または請求項19記載の時間計測方法において、前記タイマが前記目標カウント値の変数領域として全て同一サイズの領域を確保し、複数の前記チッカが互いに異なるチック間隔を持つことを特徴とする。請求項20記載の時間計測方法によれば、タイマが同じサイズの目標カウント値の変数領域を扱い、チッカのチック間隔を変えることで、計測できる時間の長さを変えることにより、計測する時間の長短にかかわらず、共通のロジックで時間計測を行うことができるという効果がある。この結果、アプリケーションの開発が容易になり、開発者の負担が軽減するとともに、アプリケーションにおけるバグの発生も抑えることができる。
請求項21記載の時間計測方法は、CPU,タイマブロックおよび間欠動作制御部を備え、通常動作モードと、スリープ状態にあって間欠的にウェイクアップ状態を繰り返す低消費電力モードとをとるマイクロコンピュータの時間計測方法において、アプリケーションがタイマに対して目標時間を指定して時間計測の開始を指令する工程と、アプリケーションから時間計測の開始を指令されたときにタイマが目標時間をセットする工程と、タイマフレームワークがチッカに対してタイマを進めることを指令する工程と、タイマフレームワークからタイマを進めることを指令されたときにチッカが時間計測中のタイマを進める工程と、タイマが目標時間に達したときにアプリケーションに対して時間計測の終了を通知する工程とを含むことを特徴とする。請求項21記載の時間計測方法によれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができるとともに、CPUの処理負荷を低減できる。さらに、低消費電力モードではウェイクアップ状態の間欠動作時にスリープ状態でのスリープ時間分だけタイマを進めるので、個々のアプリケーションでスリープ状態におけるタイマの遅れを考慮する必要がなくなり、チッカで一括してスリープ状態によるタイマの遅れを補正することができる。この結果、アプリケーションの開発が容易になり、開発者の負担が軽減するとともに、アプリケーションにおけるバグの発生も抑えることができる。
請求項22記載の時間計測方法は、CPU,タイマブロックおよび間欠動作制御部を備え、通常動作モードと、スリープ状態にあって間欠的にウェイクアップ状態を繰り返す低消費電力モードとをとるマイクロコンピュータの時間計測方法において、アプリケーションがタイマに対して目標時間を指定して時間計測の開始を指令する工程と、アプリケーションから時間計測の開始を指令されたときにタイマが自身を登録することを該チッカに指令する工程と、タイマから登録を指令されたときにチッカがタイマを登録する工程と、タイマフレームワークがチッカに対してタイマを進めることを指令する工程と、タイマフレームワークからタイマを進めることを指令されたときにチッカが時間計測中のタイマを進める工程と、タイマが目標時間に達したときにアプリケーションに対して時間計測の終了を通知する工程とを含むことを特徴とする。請求項22記載の時間計測方法によれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができるとともに、CPUの処理負荷を低減できる。さらに、低消費電力モードではウェイクアップ状態の間欠動作時にスリープ状態でのスリープ時間分だけタイマを進めるので、個々のアプリケーションでスリープ状態におけるタイマの遅れを考慮する必要がなくなり、チッカで一括してスリープ状態によるタイマの遅れを補正することができる。この結果、アプリケーションの開発が容易になり、開発者の負担が軽減するとともに、アプリケーションにおけるバグの発生も抑えることができる。
請求項23記載の時間計測方法は、請求項21または請求項22記載の時間計測方法において、前記タイマが前記目標時間の変数領域として全て同一サイズの領域を確保し、複数の前記チッカが互いに異なるチック間隔を持つことを特徴とする。請求項23記載の時間計測方法によれば、タイマが同じサイズの目標時間の変数領域を扱い、チッカのチック間隔を変えることで、計測できる時間の長さを変えることにより、計測する時間の長短にかかわらず、共通のロジックで時間計測を行うことができるという効果がある。この結果、アプリケーションの開発が容易になり、開発者の負担が軽減するとともに、アプリケーションにおけるバグの発生も抑えることができる。
請求項24記載の時間計測方法は、CPU,タイマブロックおよび間欠動作制御部を備え、通常動作モードと、スリープ状態にあって間欠的にウェイクアップ状態を繰り返す低消費電力モードとをとるマイクロコンピュータの時間計測方法において、アプリケーションが、自身が保有するタイマに対して目標時間を指定して時間計測の開始を指令する工程と、アプリケーションから時間計測の開始の指令を受けたときに、タイマが、目標時間を対応するチッカのチック間隔で割った目標カウント値を設定する工程と、タイマフレームワークが、チッカに対してタイマを進めることを指令する工程と、タイマフレームワークからのタイマを進める指令に基づいて、チッカが、時間計測中のタイマに対してチック数をカウントするように指令する工程と、タイマが、チッカからのチック数をカウントする指令に基づいて目標までの残りのカウント値を演算し、目標カウント値に達したときに、アプリケーションに対して目標時間を計測したことを通知する工程とを含むことを特徴とする。請求項24記載の時間計測方法によれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができる。
請求項25記載の時間計測方法は、CPU,タイマブロックおよび間欠動作制御部を備え、通常動作モードと、スリープ状態にあって間欠的にウェイクアップ状態を繰り返す低消費電力モードとをとるマイクロコンピュータの時間計測方法において、アプリケーションがタイマに対して目標時間を指定して時間計測の開始を指令する工程と、アプリケーションから時間計測の開始を指令されたときにタイマが、目標時間を対応するチッカのチック間隔で割った目標カウント値を設定するとともに自身を登録することを該チッカに指令する工程と、タイマから登録を指令されたときにチッカがタイマを登録する工程と、タイマフレームワークがチッカに対してタイマを進めることを指令する工程と、タイマフレームワークからのタイマを進める指令に基づいて、チッカが、時間計測中のタイマに対してチック数をカウントするように指令する工程と、タイマが、チッカからのチック数をカウントする指令に基づいて目標までの残りのカウント値を演算し、目標カウント値に達したときに、チッカから自身の登録を抹消して、アプリケーションに対して目標時間を計測したことを通知する工程とを含むことを特徴とする。請求項25記載の時間計測方法によれば、時間計測のための共通ロジック(タイマ,チッカおよびタイマフレームワーク)を使うことができるので、アプリケーションの開発が容易になるという効果がある。また、個々のアプリケーションに時間計測のロジックを組み込む場合に比べて、CPUが使用するメモリ容量を低減することができるとともに、CPUの処理負荷を低減できる。
請求項26記載の時間計測方法は、請求項24または請求項25記載の時間計測方法において、前記タイマが前記目標カウント値の変数領域として全て同一サイズの領域を確保し、複数の前記チッカが互いに異なるチック間隔を持つことを特徴とする。請求項26記載の時間計測方法によれば、タイマが同じサイズの目標カウント値の変数領域を扱い、チッカのチック間隔を変えることで、計測できる時間の長さを変えることにより、計測する時間の長短にかかわらず、共通のロジックで時間計測を行うことができるという効果がある。この結果、アプリケーションの開発が容易になり、開発者の負担が軽減するとともに、アプリケーションにおけるバグの発生も抑えることができる。
請求項27記載の時間計測方法は、請求項21ないし請求項26のいずれかに記載の時間計測方法において、前記チッカがタイマを進める工程においては、現在時刻と前回更新時刻との差である経過時間をチック間隔で割った商であるチック数を時間計測中のタイマの目標カウント値に対して演算させることにより、低消費電力モードでもウェイクアップ状態の間欠動作時にスリープ状態でのスリープ時間分だけタイマを進めることを特徴とする。請求項27記載の時間計測方法によれば、低消費電力モードではウェイクアップ状態の間欠動作時にスリープ状態でのスリープ時間分だけタイマを進めるので、個々のアプリケーションでスリープ状態におけるタイマの遅れを考慮する必要がなくなり、チッカで一括してスリープ状態によるタイマの遅れを補正することができる。この結果、アプリケーションの開発が容易になり、開発者の負担が軽減するとともに、アプリケーションにおけるバグの発生も抑えることができる。さらに、チッカにタイマが登録されていないときには、マイクロコンピュータは、CPUのスリープ状態を続けることが可能になり、省電力化に資することができる。
請求項28記載の時間計測方法は、請求項15ないし請求項27のいずれかに記載の時間計測方法において、前記タイマフレームワークがチッカに対してタイマを進めることを指令する工程においては、チック間隔が短いチッカに関連付けられたタイマのうち1つでも時間を計測しているときには動作停止命令を発行しないようにすることにより、CPUのスリープを禁止することを特徴とする。請求項28記載の時間計測方法によれば、チック間隔が短いチッカでは時間計測中にCPUをスリープさせないようにできる。この結果、CPUが頻繁にスリープ/ウェイクアップを繰り返すことが防止されるので、電力消費を抑えることができる。また、スリープ可否は計測する時間の長さで一意に決まるので、開発者はスリープを注意深く考えて設計していたことから解放されるという効果がある。
図3は、本発明の実施例1に係る時間計測方法が適用されるマイクロコンピュータ1の一例を示す回路ブロック図である。このマイクロコンピュータ1は、制御プログラムに従い動作するCPU3と、制御プログラムや固定データが予め格納されるROM5と、CPU3による演算結果を一時記憶するためのRAM7と、マイクロコンピュータ1の外部に設けられる発振素子8と協働してCPU3の動作クロックであるメインクロック(本実施例1では数MHz〜数十MHz)を生成するメイン発振回路9およびメイン発振回路9を制御する発振制御部11からなるメインクロック発生部13と、発振制御部11と協働してCPU3を間欠的に動作(間欠動作)させるための制御を行う間欠動作制御部15と、CPU3の間欠時間(すなわち、CPU3が間欠動作している際にスリープ状態である期間)を計測するタイマブロック17と、マイクロコンピュータ1の外部に設けられる発振素子18と協働してメインクロックよりも周波数が低いサブクロック(本実施例1では数十KHz)を生成するサブ発振回路19とを備えて構成されている。
本実施例1に係るマイクロコンピュータ1において、発振制御部11と、間欠動作制御部15と、タイマブロック17との各々は、サブ発振回路19で常時生成されるサブクロックを受けて動作する。
CPU3は、特定の動作停止命令を実行することによって自己の動作を停止することができる。そして、CPU3は、自ら動作を停止する時に(つまり、動作停止命令の実行時に)、間欠動作制御部15へ停止指令を出力するようになっている。
一方、間欠動作制御部15は、計測すべき目標時間がCPU3によってセットされる(書き込まれる)レジスタ15aを備えている。そして、間欠動作制御部15は、通常時には、メインクロック発生部13の発振制御部11に動作指令を与えて、発振制御部11にメイン発振回路9を動作させているが、CPU3からの停止指令を受けると(すなわち、CPU3が動作を停止すると)、発振制御部11に停止指令を出力して、発振制御部11にメイン発振回路9の動作を停止させるとともに、レジスタ15aにセットされている目標時間の計測を開始し、その目標時間が経過すると、発振制御部11に再び動作指令を出力して、発振制御部11にメイン発振回路9の動作を再開させる。さらに、間欠動作制御部15は、CPU3から停止指令を受けて、発振制御部11へ停止指令を出力した時に、タイマブロック17へ、CPU3の動作が停止したことを示す停止報知信号を出力する。
なお、目標時間は、サブクロックの数(すなわち、周期数)に基づいて計測される。また、本実施例1において、停止報知信号は、極短いパルス幅のワンショットパルス信号である。さらに、メインクロック発生部13の発振制御部11は、間欠動作制御部15からの動作指令と停止指令とに応じて、メイン発振回路9の動作と非動作とを切り替えるが、特に、間欠動作制御部15からの動作指令を受けてメイン発振回路9の動作を開始させた際には、その時点からメインクロックの周波数が安定すると見なされる所定の発振安定待ち時間が経過した時に、CPU3へ、該CPU3をスリープ状態からウェイクアップ状態へとウェイクアップさせるためのRUN信号を出力する。
また、発振安定待ち時間は、メインクロックの周波数が確実に安定してからCPU3をウェイクアップさせるために設けられており、サブクロックの数に基づいて計測される。そして、発振制御部11は、発振安定待ち時間がCPU3によってセットされる(書き込まれる)レジスタ11aを備えている。また、本実施例1において、発振制御部11は、RUN信号を、間欠動作制御部15から次に停止指令を受けるまで(つまり、メイン発振回路9の動作を次に停止させる時まで)継続して出力するようになっている。そして、そのRUN信号は、タイマブロック17にも供給されるようになっている。
タイマブロック17は、CPU3のスリープ状態/ウェイクアップ状態にかかわらず、間欠動作と連動してCPU3の間欠時間を自動的に計測する基本動作モードとしての第1の動作モードと、タイマブロック17(図3参照)から取得したカウント値である現在時刻を継続して計測するフリーランの第2の動作モードとの、2つの動作モードを有している。そして、タイマブロック17は、CPU3からの動作モード切替指令によって、動作モードが2つの動作モードの内のいずれかに設定されるとともに、時間の計測値がCPU3によって読み取り可能に構成されている。
さらに、タイマブロック17は、動作モードが第1の動作モードに設定されている場合には、間欠動作制御部15からの停止報知信号によって計測値が0にクリアされるとともに、発振制御部11からRUN信号が出力されている間は、計測動作を停止して計測値を保持するように構成されている。
また、タイマブロック17は、CPU3からのクリア指令によって、計測値のクリアが行われるとともに、CPU3からのカウント停止指令によって、計測動作の停止および計測値の保持が行われるように構成されている。具体的に説明すると、図4に示すように、タイマブロック17は、時間を計測する手段として、サブクロックを受けてカウントアップ動作するとともに、そのカウント値(時間の計測値に相当)が、CPU3に読み取られるカウンタ21を備えている。そして、カウンタ21は、リセット端子21aにハイレベルの信号が供給されると、カウント値が0にクリアされ、また、動作停止端子21bにハイレベルの信号が供給されている間、計測動作に相当するカウントアップ動作を停止してカウント値を保持するように構成されている。
さらに、タイマブロック17は、CPU3からの動作モード切替指令に該当する信号(以下、動作モード切替信号という)と間欠動作制御部15からの停止報知信号との論理積信号を出力するアンド回路23と、CPU3からの動作モード切替信号と発振制御部11からのRUN信号との論理積信号を出力するアンド回路25と、アンド回路23の出力とCPU3からのクリア指令に該当する信号(以下、クリア信号という)との論理和信号を、カウンタ21のリセット端子21aに供給するオア回路27と、アンド回路25の出力とCPU3からのカウント停止指令に該当する信号(以下、カウント停止信号という)との論理和信号を、カウンタ21の動作停止端子21bに供給するオア回路29とを備えている。
なお、タイマブロック17に入力される各信号は、ハイレベルがアクティブレベルである。また、CPU3からオア回路27へのクリア信号は、間欠動作制御部15からの停止報知信号と同様に、極短いパルス幅のワンショットパルス信号である。
このようなタイマブロック17では、CPU3からの動作モード切替信号がハイレベル(=論理1)の場合に、間欠動作制御部15からの停止報知信号が、アンド回路23およびオア回路27を介してカウンタ21のリセット端子21aに供給されるとともに、発振制御部11からのRUN信号が、アンド回路25およびオア回路29を介してカウンタ21の動作停止端子21bに供給されるため、タイマブロック17の動作モードが第1の動作モードに設定される。
つまり、この場合には、図5(A)に示すように、CPU3の動作が停止して間欠動作制御部15から停止報知信号が出力されると、カウンタ21のカウント値が0にクリアされてカウンタ21のカウント動作が最初から開始され、その後、発振制御部11からRUN信号が出力されてCPU3が動作を再開すると、再びCPU3の動作が停止して間欠動作制御部15から停止報知信号が出力されるまで、カウンタ21のカウント動作が停止してカウント値が保持される、という動作が繰り返されることとなる。
逆に、CPU3からの動作モード切替信号がローレベル(=論理0)の場合には、間欠動作制御部15からの停止報知信号がカウンタ21のリセット端子21aに供給されることと、発振制御部11からのRUN信号がカウンタ21の動作停止端子21bに供給されることとが、アンド回路23,25によって防止されるため、当該タイマブロック17の動作モードが第2の動作モードに設定される。
この場合には、間欠動作制御部15からの停止報知信号と、発振制御部11からのRUN信号とにかかわらず、カウンタ21は、フリーランの状態でカウントアップ動作を行うからである。さらに、タイマブロック17では、動作モードが上記2つの動作モードのいずれに設定されている場合でも、CPU3からクリア信号が出力されると、カウンタ21のカウント値が0にクリアされ、また、CPU3からカウント停止信号が出力されている間は、カウンタ21のカウント動作が停止してカウンタ21のカウント値が保持される。
以上のようなマイクロコンピュータ1では、CPU3が、間欠動作制御部15のレジスタ15aへ任意の時間をセットするとともに、実行すべき処理がなくて動作を停止してもよいと判断すると、動作停止命令を実行して、自己の動作を停止するとともに間欠動作制御部15へ停止指令を出力する、といった具合に制御プログラムを設定すれば、図5(A),(B)の上段に示すようなCPU3の間欠動作が実現されることとなる。
すなわち、CPU3が、動作を停止してもよいと判断して、自らの動作を停止するとともに間欠動作制御部15へ停止指令を出力すると、間欠動作制御部15が、発振制御部11に停止指令を出力してメイン発振回路9の動作を停止させるとともに、レジスタ15aにセットされている目標時間の計測を開始し、その目標時間が経過すると、発振制御部11に再び動作指令を出力してメイン発振回路9の動作を再開させる。そして、その時点から、発振安定待ち時間が経過すると、発振制御部11からCPU3へRUN信号が出力されて、CPU3がスリープ状態からウェイクアップ状態へとウェイクアップすることとなり、以後は、こうした動作が繰り返されることとにより、CPU3の間欠動作が実施される。
マイクロコンピュータ1では、サブクロックを受けて動作するタイマブロック17が設けられており、タイマブロック17は、動作モードがCPU3によって第1の動作モードに設定されている場合には、図5(A)を用いて説明したように、CPU3の実際の間欠時間(すなわち、CPU3が動作を停止して間欠動作制御部15が停止報知信号を出力した時点から、発振制御部11がCPU3へRUN信号を出力するまでの時間)を自動的に計測する。
よって、マイクロコンピュータ1によれば、CPU3がタイマブロック17の動作モードを第1の動作モードに設定して下記の如く動作するように、制御プログラムを設定すれば、たとえ数十時間や数日間といった非常に長い目標時間でも計測することができるとともに、その時間計測機能(タイマ機能)を、非常に少ない消費電力で実現することができる。
すなわち、図5(A)に示すように、CPU3は、時間を計測する際に、間欠動作するとともに、スリープ状態からウェイクアップして一時動作する毎に、今回ウェイクアップするまでの間欠時間Taに相当するカウント値をタイマブロック17のカウンタ21から読み取って、そのカウント値に基づき今回の実際の間欠時間Taを算出し、また、今回ウェイクアップしてからの動作時間(すなわち、当該CPU3がウェイクアップ状態となっている時間)Tbを自らソフトウェア処理で計測する。
このようなマイクロコンピュータ1によれば、CPU3だけでなくCPU3の動作クロックである高周波数のメインクロックが停止した状態で、時間の計測が遂行されるため、予定の動作を目標時間が経過してから実施する、というタイマ機能を、より少ない消費電力で実現することができ、しかも、計測すべき目標時間が数十時間や数日間といった具合に非常に長くても、確実に対応することができる。
また、マイクロコンピュータ1によれば、経過したことを判断する目標時間をソフトウェアによって自由に設定することができ、汎用性を損なうこともない。さらに、図5(A)に示したように、CPU3を定期的に動作させながら、継続して長い目標時間を計測することができるため、時間の計測中に処理を適宜変更することも可能になる。例えば、目標時間の計測を開始してから状況が変化して、実施予定の動作が不要になった場合には、そのことを検知して他の処理を実行することができ、また、定期的にRAM7内のデータ等をチェックして当該マイクロコンピュータ1の動作の安定性を確認することができ、動作の信頼性を向上させることができる。
図1は、本発明の実施例1に係る時間計測方法を実現するソフトウェア構成を表すUML(Unified Modeling Language)によるクラス図である。このソフトウェア構成は、クラスTimerと、クラスTickerと、クラスTimerFrameworkと、クラスApplicationと、インターフェースAlarmとから、その主要部が構成されている。
クラスTimerは、属性count,およびalarmTimeを持つ。属性countは、後述するカウント値count(図9参照)に相当するものであり、可視性がprivateであり、タイプはU2である。属性alarmTimeは、後述する目標カウント値alarmTime(図9参照)に相当するものであり、可視性がprivateであり、タイプはU2である。
また、クラスTimerは、操作start(),stop(),pause(),resume(),isActive(),およびaddCount()を持つ。各操作start(),stop(),pause(),resume(),isActive(),およびaddCount()の可視性はpublicである。また、登録先のクラスTickerへの関連を持っている。
クラスTickerは、属性lastUpdateTime,tickTime,およびisDosyを持つ。属性lastUpdateTimeは、後述する前回更新時刻lastUpdateTime(図12参照)に相当するものであり、可視性がprivateであり、タイプはU2である。属性tickTimeは、後述するチック間隔tickTime(図9参照)に相当するものであり、可視性がprivateであり、タイプはU2である。属性isDosyは、後述するチック間隔が短いチッカであるかどうか、すなわちスリープが可能なチッカであるかどうかを表すフラグisDozy(図6参照)であり、可視性がprivateであり、タイプは_Boolである。なお、本実施例1では、チッカTickerA,TickerBはチック間隔が短いチッカ、すなわちCPU3のスリープが禁止されたチッカであるものとする(図6参照)。
また、クラスTickerは、操作addTimer(),removeTimer(),hasTimer(),goForward(),isAwaken(),およびinitialize()を持つ。操作addTimer()は、可視性がpublicであり、タイプTimerのパラメータtimerがある。操作removeTimer()は、可視性がpublicであり、タイプTimerのパラメータtimerがある。操作hasTimer()は、可視性がpublicであり、タイプは_Boolである。操作goForward()は、可視性がpublic、タイプがVDであり、タイプU2のパラメータforwardTimeがある。操作isAwaken()は、可視性がpublicであり、タイプは_Boolである。操作initialize()は、可視性がpublic、タイプがVDであり、タイプU2のパラメータinitialTimeがある。
クラスTimerFrameworkは、ステレオタイプ<<Singleton>>として定義され、操作main(),initialize(),wakeup(),およびsetSLNG()を持つ。各操作main(),initialize(),wakeup(),およびsetSLNG()は、可視性がpublicである。
また、クラスTimerFrameworkは、チッカの集合tickersを持つ。
クラスApplicationは、1つのクラスTimerを持ち、インターフェースAlarmを実現する。クラスApplicationが保有するクラスTimerがそのインターフェースに対して時間経過を通知する。
インターフェースAlarmは、操作alarm()およびticked()を持つ。各操作alarm()およびticked()の可視性は、publicである。
図2は、図1に示したクラスのインスタンスと操作との関係を具体的に示す図である。クラスApplicationのインスタンスとして、アプリケーションApplicationA1,ApplicationA2,およびApplicationDが生成されている。クラスTimerのインスタンスとして、タイマApplicationA1Timer,ApplicationA2Timer,およびApplicationDTimerが生成されている。クラスTickerのインスタンスとして、4つのチッカTickerA,TickerB,TickerC,およびTickerDが生成されている.
図6は、クラスTickerのチッカTickerA,TickerB,TickerC,およびTickerDのチック間隔tickTime,最大計測時間およびスリープ可否isDosyを示す表である。チッカTickerAのチック間隔tickTimeA(下付のAは、チッカTickerAのチック間隔であることを示す)は5msであり、所定サイズ2バイトの変数領域で最大5分27秒を計測することができる。チッカTickerBのチック間隔tickTimeB(下付のBは、チッカTickerBのチック間隔であることを示す)は20msであり、所定サイズ2バイトの変数領域で最大21分50秒を計測することができる。チッカTickerCのチック間隔tickTimeC(下付のCは、チッカTickerCのチック間隔であることを示す)は100msであり、所定サイズ2バイトの変数領域で最大1時間49分を計測することができる。チッカTickerDのチック間隔tickTimeD(下付のDは、チッカTickerDのチック間隔であることを示す)は1分であり、所定サイズ2バイトの変数領域で最大45日12時間を計測することができる。
図7(A)は、スリープすることを考慮せずに設計した場合に時間の進みが実時間に対して遅れてしまうことを説明するタイミングチャート、図7(B)は、本実施例1に係る時間計測方法によりチッカTickerA,TickerB,TickerC,およびTickerDがカウントするタイミングを制御して時間の進みを実時間と同等とすることを説明するタイミングチャートである。図7(A)に示すように、スリープすることを考慮せずに設計すると、時間の進みが実時間に対して遅れてしまう。そうならないように、従来は、各アプリケーション開発者がタイマをカウントしていた。しかし、本実施例1の時間計測方法によって、チッカTickerA,TickerB,TickerC,およびTickerDがカウントするタイミングを制御できるので、全てのタイマを図7(B)のように扱うことができる。
図8は、タイマApplicationA1Timer,ApplicationA2Timer,ApplicationA3Timer,ApplicationA4Timerが登録されるチェッカTickerAのスタックの遷移を例示する図である。タイマApplicationA1Timer,ApplicationA2Timer,ApplicationA3Timernがすでに登録されているスタックにタイマApplicationA4Timerを追加する場合には、タイマApplicationA1Timer,ApplicationA2Timer,ApplicationA3Timernのポインタ&A1Timer,&A2Timer,&A3Timerが積まれているスタックの次のスタック位置に該タイマApplicationA4Timerのポインタ&A4Timerを積む。次に、スタックからタイマApplicationA2Timerが抹消される場合には、タイマApplicationA2Timerのポインタ&A2Timerが積まれていたスタック位置にダミーのポインタが一旦格納された後に、ダミーのポインタが除去されて、タイマApplicationA3Timer,ApplicationA4Timerが順次詰められる。なお、空いたスタック位置には、NULLポインタが格納される。
図9は、タイマApplicationA1Timer,ApplicationA2Timer,ApplicationDTimerが目標時間tの計測を開始する処理を示すフローチャートである。
図10は、図9中の操作addTimer()のより詳細な処理を示すフローチャートである。
図11は、タイマフレームワークTimerFrameworkの処理を示すフローチャートである。
図12は、図11中の操作goForward()のより詳細な処理を示すフローチャートである。
図13は、図12中の操作addCount()のより詳細な処理を示すフローチャートである。
図14は、図13中の操作removeTimer()のより詳細な処理を示すフローチャートである。
次に、このように構成された実施例1に係るマイクロコンピュータ1の動作について、図2に示す一例に基づいて説明する。
例えば、クラスTickerのインスタンスとして、4つのチッカTickerA,TickerB,TickerC,TickerDを生成したとする(図6参照)。チッカTickerAは、5msのチック間隔tickTimeAを持つチッカである。チッカTickerBは、20msのチック間隔tickTimeBを持つチッカである。チッカTickerCは、100msのチック間隔tickTimeCを持つチッカである。チッカTickerDは、1minのチック間隔tickTimeDを持つチッカである。
(1) アプリケーションApplicationA1によるタイマApplicationA1Timerに対する操作start(100ms)の実行
いま、クラスApplicationのインスタンスであるアプリケーションApplicationA1が100msの目標時間tA1(下付のA1は、アプリケーションApplicationA1の目標時間であることを示す)を計測するアプリケーションである場合、アプリケーションApplicationA1は、クラスTimerのインスタンスであるタイマApplicationA1Timerを保有する。タイマApplicationA1Timerは、所定サイズ2バイトの変数領域を有し、5msのチック間隔tickTimeAを持つチッカTickerAに関連付けられる。
アプリケーションApplicationA1は、目標時間tA1(=100ms)を計測するタイミングになると、自身が保有するタイマApplicationA1Timerに対して操作start(100ms)を実行する。
(2) タイマApplicationA1TimerによるチッカTickerAに対する操作addTimer()の実行
アプリケーションApplicationA1から操作start(100ms)の実行を受けると、タイマApplicationA1Timerは、目標時間tA1(=100ms)の計測を開始するために、カウント値countA1を0に初期化するとともに、目標時間tA1(=100ms)をチック間隔tickTimeA(=5ms)で割った値20を目標カウント値alarmTimeA1(下付のA1は、アプリケーションApplicationA1の目標カウント値であることを示す)に設定する(図9のステップS101)。次に、タイマApplicationA1Timerは、タイマApplicationA1Timer自身をチッカTickerAに登録するために操作addTimer()をチッカTickerAに対して実行する(図9のステップS102)。
タイマApplicationA1Timerから操作addTimer()の実行を受けると、チッカTickerAは、チッカTickerAのスタック(図8参照)にタイマApplicationA1Timerがすでに登録済みかどうかを判定し(図10のステップS201)、すでに登録済みでなければ、スタックが一杯かどうかを判定する(図10のステップS202)。スタックが一杯でなければ、チッカTickerAは、スタックの末尾にタイマApplicationA1Timerへのポインタを格納し(図10のステップS203)、末尾を1つ進め(図10のステップS204)、末尾にNULLポインタを格納する(図10のステップS205)。
(3) アプリケーションApplicationA2によるタイマApplicationA2Timerに対する操作start(200ms)の実行
クラスApplicationのインスタンスであるアプリケーションApplicationA2が200msの目標時間tA2(下付のA2は、アプリケーションApplicationA2の目標時間であることを示す)を計測するアプリケーションである場合、アプリケーションApplicationA2は、クラスTimerのインスタンスであるタイマApplicationA2Timerを保有する。タイマApplicationA2Timerは、所定サイズ2バイトの変数領域を有し、5msのチック間隔tickTimeAを持つチッカTickerAに関連付けられる。
アプリケーションApplicationA2は、目標時間tA2(=200ms)を計測するタイミングになると、自身が保有するタイマApplicationA2Timerに対して操作start(200ms)を実行する。
(4) タイマApplicationA2TimerによるチッカTickerAに対する操作addTimer()の実行
アプリケーションApplicationA2から操作start(200ms)の実行を受けると、タイマApplicationA2Timerは、目標時間tA2(=200ms)の計測を開始するために、カウント値countA2を0に初期化するとともに、目標時間tA2(=200ms)をチック間隔tickTimeA(=5ms)で割った値40を目標カウント値alarmTimeA2(下付のA2は、アプリケーションApplicationA2の目標カウント値であることを示す)に設定する(図9のステップS101)。次に、タイマApplicationA2Timerは、タイマApplicationA2Timer自身をチッカTickerAに登録するために操作addTimer()をチッカTickerAに対して実行する(図9のステップS102)。
タイマApplicationA2Timerから操作addTimer()の実行を受けると、チッカTickerAは、チッカTickerAのスタック(図8参照)にタイマApplicationA2Timerがすでに登録済みかどうかを判定し(図10のステップS201)、すでに登録済みでなければ、スタックが一杯かどうかを判定する(図10のステップS202)。スタックが一杯でなければ、チッカTickerAは、スタックの末尾にタイマApplicationA2Timerへのポインタを格納し(図10のステップS203)、末尾を1つ進め(図10のステップS204)、末尾にNULLポインタを格納する(図10のステップS205)。
このように、1つのチッカTickerAに対して、複数のタイマApplicationA1Timer,ApplicationA2Timerが存在できる。また、複数存在するタイマApplicationA1Timer,ApplicationA2Timerは、同じロジック(クラスTimer)を共有している。
(5) タイマフレームワークTimerFrameworkによる全てのチッカTickerA,TickerB,TickerC,TickerDに対する操作goForward()の実行
タイマフレームワークTimerFrameworkは、基準クロック間隔δ(=5ms)で全てのチッカTickerA,TickerB,TickerC,TickerDに対して操作goForward()を実行する(図11のステップS301,S302)。まず、チッカTickerAに対して操作goForward()を実行する。
タイマフレームワークTimerFrameworkから操作goForward()の実行を受けると、チッカTickerAは、チェッカTickerAに登録されているタイマApplicationA1Timer,ApplicationA2Timerをチック間隔tickTimeA(=5ms)でチックするために、タイマブロック17(図3参照)から取得したカウント値である現在時刻から前回更新時刻lastUpdateTimeAを引いた値を経過時間etに設定するとともにチック数ftを0クリアし(図12のステップS211)、経過時間etがチック間隔tickTimeA(=5ms)以上であるかどうかを判定する(図12のステップS212)。経過時間etがチック間隔tickTimeA(=5ms)以上であれば、チッカTickerAは、経過時間etからチック間隔tickTimeA(=5ms)を引いた値を経過時間etに設定するとともにチック数ftを1つインクリメントしてから(図12のステップS213)、ステップS212に制御を戻す。経過時間etがチック間隔tickTimeA(=5ms)未満であれば、チッカTickerAは、チック数ftが0より大きいかどうかを判定し(図12のステップS214)、チック数ftが0以下であればステップS218に制御を移す。チック数ftが0より大きければ、チッカTickerAは、チック数ftだけタイマApplicationA1Timer,ApplicationA2Timerを進めるために操作addCount()を、チッカTickerAに登録されている全てのタイマApplicationA1Timer,ApplicationA2Timerに対して繰り返す(図12のステップS215,S216)。次に、チッカTickerAは、前回更新時刻lastUpdateTimeAにチック数ftとチック間隔tickTimeA(=5ms)との積を加えた値を前回更新時刻lastUpdateTimeAに設定する(図12のステップS217)。続いて、チッカTickerAは、登録を抹消されたタイマがあれば、スタックから取り除く(図12のステップS218)。
次に、チッカTickerB,TickerC,TickerDに対しても操作goForward()が実行されるが、この時点でいずれのチッカTickerB,TickerC,TickerDにも登録されているタイマがないので、なにも行われない。
全てのチッカTickerA,TickerB,TickerC,TickerDに対する操作goFoward()の実行完了後(図11のステップS301,S302)、タイマフレームワークTimerFrameworkは、チック間隔tickTimeA(=5ms),tickTimeB(=20ms)が短いチッカTickerA,TickerBに対してタイマが登録されているかどうかを判定し(図11のステップS303,S304)、チッカTickerAにタイマApplicationA1Timer,ApplicationA2Timerが登録されているので、スリープ禁止フラグをセットする(図11のステップS305)。これにより、以降はCPU3はスリープしない通常動作モードとなる。
(6) チッカTickerAによるタイマApplicationA1Timerに対する操作addCount()の実行
チッカTickerAから操作addCount()の実行を受けると、タイマApplicationA1Timerは、カウント値countA1とチック数ftとの和が目標カウント値alarmTimeA1(=20)以上であるかどうかを判定し(図13のステップS111)、カウント値countA1とチック数ftとの和が目標カウント値alarmTimeA1(=20)未満であれば、カウント値countA1とチック数ftとの和をカウント値countA1に設定する(図13のステップS112)。一方、カウント値countA1とチック数ftとの和が目標カウント値alarmTimeA1(=20)以上であれば、タイマApplicationA1Timerは、操作removeTimer()をチェッカTickerAに対して実行することにより、チッカTickerAからタイマApplicationA1Timerの登録を抹消する(図13のステップS113)。
操作removeTimer()の実行完了後(図13のステップS113)、タイマApplicationA1Timerは、カウント値countA1を0に初期化するとともに目標カウント値alarmTimeA1(=20)を0に初期化し(図13のステップS114)、目標時間tA1(=100ms)を計測したことをアプリケーションApplicationA1に対して操作alarm()を実行することによりアプリケーションApplicationA1に通知する(図13のステップS115)。
なお、操作addCount()は、チッカTickerAに登録されているタイマApplicationA2Timerに対しても実行されるが、目標カウント値alarmTimeA2が40のタイマApplicationA2Timerでは、カウント値countA2とチック数ftとの和がカウント値countA2に設定されるだけである(図13のステップS112)。
(7) タイマApplicationA1TimerによるチッカTickerAに対する操作removeTimer()の実行
チック間隔tickTimeA(=5ms)毎のカウント値countA1のカウントアップによりカウント値countA1とチック数ftとの和が目標カウント値alarmTimeA1(=20)以上になると(図13のステップS111)、タイマApplicationA1Timerは、操作removeTimer()をチッカTickerAに対して実行する(図13のステップS113)。
タイマApplicationA1Timerから操作removeTimer()の実行を受けると、チッカTickerAは、タイマApplicationA1Timerがすでに登録済みかどうかを判定し(図14のステップS221)、登録済みであるので、タイマApplicationA1TimerをチッカTickerAから抹消するために、タイマApplicationA1Timerへのポインタをダミーに置き換える(図14のステップS222)。
(8) タイマApplicationA1TimerによるアプリケーションApplicationA1に対する操作alarm()の実行
操作removeTimer()の実行完了後(図13のステップS113)、タイマApplicationA1Timerは、カウント値countA1を0に初期化するとともに目標カウント値alarmTimeA1(=20)を0に初期化し(図13のステップS114)、目標時間tA1(=100ms)を計測したことをアプリケーションApplicationA1に対して操作alarm()を実行することによりアプリケーションApplicationA1に通知する(図13のステップS115)。
(9) タイマフレームワークTimerFrameworkによる全てのチッカTickerA,TickerB,TickerC,TickerDに対する操作goForward()の実行
タイマフレームワークTimerFrameworkは、基準クロック間隔δ(=5ms)で全てのチッカTickerA,TickerB,TickerC,TickerDに対して操作goForward()を実行する(図11のステップS301,S302)。まず、チッカTickerAに対して操作goForward()を実行する。
タイマフレームワークTimerFrameworkから操作goForward()の実行を受けると、チッカTickerAは、チェッカTickerAにこの時点で登録されているタイマApplicationA2Timerをチック間隔tickTimeA(=5ms)でチックするために、タイマブロック17(図3参照)から取得したカウント値である現在時刻から前回更新時刻lastUpdateTimeAを引いた値を経過時間etに設定するとともにチック数ftを0クリアし(図12のステップS211)、経過時間etがチック間隔tickTimeA(=5ms)以上であるかどうかを判定する(図12のステップS212)。経過時間etがチック間隔tickTimeA(=5ms)以上であれば、チッカTickerAは、経過時間etからチック間隔tickTimeA(=5ms)を引いた値を経過時間etに設定するとともにチック数ftを1つインクリメントしてから(図12のステップS213)、ステップS212に制御を戻す。経過時間etがチック間隔tickTimeA(=5ms)未満であれば、チッカTickerAは、チック数ftが0より大きいかどうかを判定し(図12のステップS214)、チック数ftが0以下であればステップS218に制御を移す。チック数ftが0より大きければ、チッカTickerAは、チック数ftだけタイマApplicationA2Timerを進めるために操作addCount()を登録されている全てのタイマApplicationA2Timerに対して繰り返す(図12のステップS215,S216)。次に、チッカTickerAは、前回更新時刻lastUpdateTimeAにチック数ftとチック間隔tickTimeA(=5ms)との積を加えた値を前回更新時刻lastUpdateTimeAに設定する(図12のステップS217)。続いて、チッカTickerAは、登録を抹消されたタイマがあれば、スタックから取り除く(図12のステップS218)。
次に、チッカTickerB,TickerC,TickerDに対しても操作goForward()が実行されるが、この時点ではいずれのチッカTickerB,TickerC,TickerDにも登録されているタイマがないので、なにも行われない。
全てのチッカTickerA,TickerB,TickerC,TickerDに対する操作goForward()の実行完了後(図11のステップS301,S302)、タイマフレームワークTimerFrameworkは、チック間隔tickTimeA(=5ms),tickTimeB(=20ms)が短いチッカTickerA,TickerBに対してタイマが登録されているかどうかを判定し(図11のステップS303,S304)、チッカTickerAにタイマApplicationA2Timerが登録されているので、スリープ禁止フラグをセットする(図11のステップS305)。これにより、以降はCPU3はスリープしない通常動作モードとなる。
(10) チッカTickerAによるタイマApplicationA2Timerに対する操作addCount()の実行
チッカTickerAから操作addCount()の実行を受けると(図12のステップS216)、タイマApplicationA2Timerは、カウント値countA2とチック数ftとの和が目標カウント値alarmTimeA2(=40)以上であるかどうかを判定し(図13のステップS111)、カウント値countA2とチック数ftとの和が目標カウント値alarmTimeA2(=40)未満であれば、カウント値countA2とチック数ftとの和をカウント値countA2に設定する(図13のステップS112)。一方、カウント値countA2とチック数ftとの和が目標カウント値alarmTimeA2(=40)以上であれば、タイマApplicationA2Timerは、操作removeTimer()をチェッカTickerAに対して実行することにより、チッカTickerAからタイマApplicationA2Timerの登録を抹消する(図13のステップS113)。
操作removeTimer()の実行完了後(図13のステップS113)、タイマApplicationA2Timerは、カウント値countA2を0に初期化するとともに目標カウント値alarmTimeA2(=40)を0に初期化し(図13のステップS114)、目標時間tA2(=200ms)を計測したことをアプリケーションApplicationA2に対して操作alarm()を実行することによりアプリケーションApplicationA2に通知する(図13のステップS115)。
(11) タイマApplicationA2TimerによるチッカTickerAに対する操作removeTimer()の実行
チック間隔tickTimeA(=5ms)毎のカウント値countA2のカウントアップによりカウント値countA2とチック数ftとの和が目標カウント値alarmTimeA2(=40)以上になると(図13のステップS111)、タイマApplicationA2Timerは、操作removeTimer()をチッカTickerAに対して実行する(図13のステップS113)。
タイマApplicationA2Timerから操作removeTimer()の実行を受けると、チッカTickerAは、タイマApplicationA2Timerがすでに登録済みかどうかを判定し(図14のステップS221)、登録済みであるので、タイマApplicationA2TimerをチッカTickerAから抹消するために、タイマApplicationA2Timerへのポインタをダミーに置き換える(図14のステップS222)。
(12) タイマApplicationA2TimerによるアプリケーションApplicationA2に対する操作alarm()の実行
操作removeTimer()の実行完了後(図13のステップS113)、タイマApplicationA2Timerは、カウント値countA2を0に初期化するとともに目標カウント値alarmTimeA2(=40)を0に初期化し(図13のステップS114)、目標時間tA2(=200ms)を計測したことをアプリケーションApplicationA2に対して操作alarm()を実行することによりアプリケーションApplicationA2に通知する(図13のステップS115)。
(13) アプリケーションApplicationDによるタイマApplicationDTimerに対する操作start(7days)の実行
クラスApplicationのインスタンスであるアプリケーションApplicationDが7日間の目標時間tD(下付のDは、アプリケーションApplicationDの目標時間であることを示す)を計測する場合、アプリケーションApplicationDは、クラスTimerのインスタンスである7日間を計測するタイマApplicationDTimerを保有する。タイマApplicationDTimerは、所定サイズ2バイトの変数領域を有し、1minのチック間隔tickTimeD(下付のDは、アプリケーションApplicationDのチック間隔であることを示す)を持つチッカTickerDに関連付けられる。
アプリケーションApplicationDは、目標時間tD(=7days)を計測するタイミングになると、自身が保有するタイマApplicationDTimerに対して操作start(7days)を実行する。
(14) タイマApplicationDTimerによるチッカTickerDに対する操作addTimer()の実行
アプリケーションApplicationDから操作start(7days)の実行を受けると、タイマApplicationDTimerは、目標時間tD(=7days)の計測を開始するために、カウント値countDを0に初期化するとともに、目標時間tD(=7days)をチック間隔tickTimeD(=1min)で割った値10080を目標カウント値alarmTimeD(下付のDは、アプリケーションApplicationDの目標カウント値であることを示す)に設定する(図9のステップS101)。次に、タイマApplicationDTimerは、タイマApplicationDTimer自身をチッカTickerDに登録するために操作addTimer()をチッカTickerDに対して実行する(図9のステップS102)。
タイマApplicationDTimerから操作addTimer()の実行を受けると、チッカTickerDは、チッカTickerDのスタック(図8参照)にタイマApplicationDTimerがすでに登録済みかどうかを判定し(図12のステップS211)、すでに登録済みでなければ、スタックが一杯かどうかを判定する(図12のステップS212)。スタックが一杯でなければ、チッカTickerDは、スタックの末尾にタイマApplicationDTimerへのポインタを格納し(図12のステップS213)、末尾を1つ進め(図12のステップS214)、末尾にNULLポインタを格納する(図12のステップS215)。
タイマApplicationA1Timer,ApplicationA2TimerとタイマApplicationDTimerとではチック間隔tickTimeA(=5ms)とチック間隔tickTimeD(=1min)とが違うが、チック間隔tickTimeA(=5ms)とチック間隔tickTimeD(=1min)とは関連付けるチッカTickerAとチッカTickerDとを変えるだけでよいので、同じロジック(クラスTimer)を使用することができる。
(15) タイマフレームワークTimerFrameworkによる全てのチッカTickerA,TickerB,TickerC,TickerDに対する操作goForward()の実行
タイマフレームワークTimerFrameworkは、基準クロック間隔δ(=5ms)で操作goForward()を全てのチッカTickerA,TickerB,TickerC,TickerDに対して実行する(図11のステップS301,S302)。しかし、チッカTickerA,TickerB,TickerCについては、この時点で登録されているタイマがないので、なにも行われない。
一方、タイマフレームワークTimerFrameworkからチッカTickerDに対して操作goForward()が実行されると、チッカTickerDは、チェッカTickerDに登録されているタイマApplicationDTimerをチック間隔tickTimeD(=1min)でチックするために、タイマブロック17(図3参照)から取得したカウント値である現在時刻から前回更新時刻lastUpdateTimeDを引いた値を経過時間etに設定するとともにチック数ftを0クリアし(図12のステップS211)、経過時間etがチック間隔tickTimeD(=1min)以上であるかどうかを判定する(図12のステップS212)。経過時間etがチック間隔tickTimeD(=1min)以上であれば、チッカTickerDは、経過時間etからチック間隔tickTimeD(=1min)を引いた値を経過時間etに設定するとともにチック数ftを1つインクリメントしてから(図12のステップS213)、ステップS212に制御を戻す。経過時間etがチック間隔tickTimeD(=1min)未満であれば、チッカTickerDは、チック数ftが0より大きいかどうかを判定し(図12のステップS214)、チック数ftが0以下であればステップS218に制御を移す。チック数ftが0より大きければ、チッカTickerDは、チック数ftだけタイマApplicationDTimer
を進めるために操作addCount()をチッカTickerDに登録されている全てのタイマApplicationDTimerに対して繰り返す(図12のステップS215,S216)。次に、チッカTickerDは、前回更新時刻lastUpdateTimeDにチック数ftとチック間隔tickTimeD(=1min)との積を加えた値を前回更新時刻lastUpdateTimeDに設定する(図12のステップS217)。続いて、チッカTickerDは、登録を抹消されたタイマがあれば、スタックから取り除く(図12のステップS218)。
全てのチッカTickerA,TickerB,TickerC,TickerDに対する操作goForward()の実行完了後(図11のステップS301,S302)、タイマフレームワークTimerFrameworkは、チック間隔が短いチッカTickerA,TickerBに対してタイマが登録されているかどうかを判定し(図11のステップS304)、この時点でチッカTickerA,TickerBにタイマが登録されていないので、スリープ禁止フラグをクリアする(図11のステップS306)。これにより、以降はCPU3はスリープし得る低消費電力モードになる。
(16) チッカTickerDによるタイマApplicationDTimerに対する操作addCount()の実行
チッカTickerDから操作addCount()の実行を受けると、タイマApplicationDTimerは、カウント値countDとチック数ftとの和が目標カウント値alarmTimeD(=10080)以上であるかどうかを判定し(図13のステップS111)、カウント値countDとチック数ftとの和が目標カウント値alarmTimeD(=10080)未満であれば、カウント値countDとチック数ftとの和をカウント値countDに設定する(図13のステップS112)。一方、カウント値countDとチック数ftとの和が目標カウント値alarmTimeD(=10080)以上であれば、タイマApplicationDTimerは、操作removeTimer()をチェッカTickerDに対して実行することにより、チッカTickerDからタイマApplicationDTimerの登録を抹消する(図13のステップS113)。
操作removeTimer()の実行完了後(図13のステップS113)、タイマApplicationDTimerは、カウント値countDを0に初期化するとともに目標カウント値alarmTimeD(=10080)を0に初期化し(図13のステップS114)、目標時間tD(=7days)を計測したことをアプリケーションApplicationDに対して操作alarm()を実行することによりアプリケーションApplicationDに通知する(図13のステップS115)。
(17) タイマApplicationDTimerによるチッカTickerDに対する操作removeTimer()の実行
チック間隔tickTimeD(=1min)毎のカウント値countDのカウントアップによりカウント値countDとチック数ftとの和が目標カウント値alarmTimeD(=10080)以上になると(図13のステップS111)、タイマApplicationDTimerは、チッカTickerDから自身の登録を抹消するために、チッカTickerDに対して操作removeTimer()を実行する(図13のステップS113)。
タイマApplicationDTimerから操作removeTimer()の実行を受けると、チッカTickerDは、タイマApplicationDTimerがすでに登録済みかどうかを判定し(図14のステップS221)、登録済みであるので、タイマApplicationA1Timerへのポインタをダミーに置き換えることにより抹消する(図14のステップS222)。
(18) タイマApplicationDTimerによるアプリケーションApplicationDに対する操作alarm()の実行
操作removeTimer()の実行完了後(図13のステップS113)、タイマApplicationDTimerは、カウント値countDを0に初期化するとともに目標カウント値alarmTimeD(=10080)を0に初期化し(図13のステップS114)、目標時間tD(=7days)を計測したことをアプリケーションApplicationDに対して操作alarm()を実行することによりアプリケーションApplicationDに通知する(図13のステップS115)。
本実施例1によれば、チッカTickerAにタイマApplicationA1Timer,ApplicationA2Timerが動的に登録され、チッカTickerDにタイマApplicationDTimerが動的に登録されるので、CPU3の処理負荷を低減できる。
詳しくは、あらかじめタイマApplicationA1Timer,ApplicationA2TimerがチッカTickerAに登録され、タイマApplicationDTimerがチッカTickerDに登録されているならば(静的に登録されているならば)、タイマフレームワークTimerFrameworkが時間を進めるようとするたびに、チッカTickerA,TickerDは登録されている全てのタイマに対して、目標時間を計測中であるかどうかをチェックして、タイマをカウントアップしてよいかどうかを判断しなければならない。
これに対して、タイマApplicationA1Timer,ApplicationA2TimerをチッカTickerAに動的に登録し、タイマApplicationDTimerをチッカTickerDに動的に登録する場合は、チッカTickerA,TickerDは、登録されているタイマApplicationA1Timer,ApplicationA2TimerおよびタイマApplicationDTimerを無条件でカウントアップするだけでよい。全てのタイマが同時に動作することはほとんどないので、扱うタイマの数も、非常に少なくなる。もし、いかなるタイマも動作していなければ、チッカには何も登録されていないので、何もしなくてすむ。アプリケーションApplicationA1Timerだけが動作していれば、チッカTickerAは、アプリケーションApplicationA1Timerをカウントアップするだけでよい。
なお、上記実施例1の動作の説明では、図2に示す一例に基づいて説明したが、動作は生成するタイマの数やチッカの数に応じて異なってくる。詳細な説明は省略するが、タイマの数やチッカの数が異なる場合にも、動作が容易に類推可能なことはいうまでもない。
また、タイマをチッカに動的に登録するようにしたが、タイマをチッカにあらかじめ静的に関連付けておき、タイマからの目標カウント値がセットされていなければ、タイマを進めないようにすることにより、同様の時間計測を実現することができる。
さらに、タイマがチッカからのチック数をカウント値に加算し、カウント値が目標カウント値を越えたときにアプリケーションに対して目標時間を計測したことを通知するようにしたが、逆にチッカからのチック数で目標カウント値を減算し、目標カウント値がゼロ以下になったときにアプリケーションに対して目標時間を計測したことを通知するようにしてもよい。つまり、目標時間の計測をどのような演算によって判断するかは適宜選択可能である。
以上、本発明の実施例を説明したが、これはあくまでも例示にすぎず、本発明はこれに限定されるものではなく、特許請求の範囲の趣旨を逸脱しない限りにおいて、当業者の知識に基づく種々の変更が可能である。特に、図3ないし図5を用いて説明したマイクロコンピュータ1は、単なる一例であって、本発明の時間計測方法が適用されるマイクロコンピュータの構成がこれに限られるわけでないことはいうまでもない。