第1処理ルーチンにてイベントが発生した時に実行されるべき第1処理、又は第2処理ルーチンにてイベントが発生した時に実行されるべき第2処理を実行する処理プログラムであって、マイクロコンピュータ100を、第1処理ルーチン中には、実行されるべき処理として第1処理を特定する第1情報を格納し、第2処理ルーチン中には、実行されるべき処理として第2処理を特定する第2情報を格納する格納制御手段と、前記格納制御手段の格納結果に基づいて、第1処理又は前記第2処理を実行する実行手段と、として機能させる。
第1処理ルーチンにてイベントが発生した時に実行されるべき第1処理、又は第2処理ルーチンにてイベントが発生した時に実行されるべき第2処理を実行する処理プログラムであって、
コンピュータを、
前記第1処理ルーチン中には、実行されるべき処理として前記第1処理を特定する第1情報を格納し、前記第2処理ルーチン中には、実行されるべき処理として前記第2処理を特定する第2情報を格納する格納制御手段と、
前記格納制御手段の格納結果に基づいて、前記第1処理又は前記第2処理を実行する実行手段と、
として機能させる処理プログラム。
前記格納制御手段は、前記第1処理を実行する命令を特定する第1基準アドレスを前記第1情報として格納し、前記第2処理を実行する命令を特定する第2基準アドレスを前記第2情報として格納する、
請求項1に記載の処理プログラム。
第1処理ルーチンにてイベントが発生した時に実行されるべき第1処理、又は第2処理ルーチンにてイベントが発生した時に実行されるべき第2処理を実行する処理システムであって、
前記第1処理ルーチン中には、実行されるべき処理として前記第1処理を特定する第1情報を格納し、前記第2処理ルーチン中には、実行されるべき処理として前記第2処理を格納する格納制御手段と、
前記格納制御手段の格納結果に基づいて、前記第1処理又は前記第2処理を実行する実行手段と、
を備える処理システム。
【発明を実施するための形態】
【0020】
以下、本発明に係る処理プログラム、及び処理システムの実施の形態について図面を参照しつつ詳細に説明する。ただし、実施の形態によって本発明が限定されるものではない。
【0021】
本発明に係る処理プログラムは、第1処理ルーチンにてイベントが発生した時に実行されるべき第1処理、又は第2処理ルーチンにてイベントが発生した時に実行されるべき第2処理を実行するプログラムであり、例えば、第1処理又は第2処理を実行するための専用プログラム、あるいは、汎用的に用いられるプログラム(一例としては、汎用コンピュータ等で用いられる基本ソフトであるオペレーティングシステム(OS)、あるいは、マイクロコンピュータの如き組み込みシステムで用いられるリアルタイムオペレーティングシステム(リアルタイムOS))の一部として実現されるプログラム等を含む概念である。また、この処理プログラムは、コンピュータ(例えば、マイクロコンピュータの如き組み込みシステム、あるいは、当該組み込みシステムの一部の要素(一例としては、中央演算処理装置であるCPU等)等)を、格納制御手段、及び実行手段として機能させるものである。
【0022】
また、処理システムとは、第1処理ルーチンにてイベントが発生した時に実行されるべき第1処理、又は第2処理ルーチンにてイベントが発生した時に実行されるべき第2処理を実行するシステムであり、第1処理又は第2処理を実行するための専用システム、あるいは、汎用的に用いられるシステム(一例としては、汎用コンピュータ、マイクロコンピュータの如き組み込みシステム、あるいは、当該組み込みシステムの一部の要素(一例としては、中央演算処理装置であるCPU等)等)に対して、第1処理又は第2処理を実行するための機能を実装することにより実現されるシステム等を含む概念である。また、処理システムは、例えば、格納制御手段、及び実行手段を備える。
【0023】
ここで、「第1処理ルーチン」及び「第2処理ルーチン」は、コンピュータで実行される処理群であり、具体的には、相互に異なる処理群であり、例えば、リアルタイムOSにおけるタスクに対応する処理群(以下、単に「タスク」とも称する)、及び当該リアルタイムOSにおける割込み処理(つまり、割込みハンドラであるISR(Interrupt Service Routine))に対応する処理群(以下、単に「ISR」とも称する)等を含む概念である。なお、このISRについては、公知の処理を含む任意の処理を行うが、特に、タスクに対して割り込んで処理を行ったり、あるいは、他のISRに対して割り込んで処理を行ったりすることが可能となっているものである。そして、以下の実施の形態では、「第1処理ルーチン」がタスクに対応する処理群であり、また、「第2処理ルーチン」がISRに対応する処理群であることとして説明する。また、「イベント」とは、発生する出来事であり、例えば、割込み等を含む概念である。
【0024】
また、「第1処理」とは、第1処理ルーチンにてイベントが発生した時に実行されるべき処理であり、例えば、リアルタイムOSにおいて、第1処理ルーチンが実行されている場合において割り込みが発生した場合に実行されるべき処理であり、あるいは、第1処理ルーチンが実行されている場合においてシステムコールが実行された場合に実行されるべき処理であり、1つ又は複数のコマンドを含む処理であり、また、リアルタイムOSの実行に関する処理であり、一例としては、限定されるものではないが、スタック領域を切り替える処理である切替処理を含む処理、任意のシステムコールに対応する処理、及びCPUの所定のレジスタが特定するアドレス(つまり、RAM又はROMの如き記録部のアドレス)を基準に実行される処理等を含む概念である。
【0025】
また、「第2処理」とは、第2処理ルーチンにてイベントが発生した時に実行されるべき処理であり、例えば、リアルタイムOSにおいて、第2処理ルーチンが実行されている場合において割り込みが発生した場合に実行されるべき処理であり、あるいは、第2処理ルーチンが実行されている場合においてシステムコールが実行された場合に実行されるべき処理であり、1つ又は複数のコマンドを含む処理であり、また、リアルタイムOSの実行に関する処理(特に、第1処理とは異なる処理)であり、一例としては、限定されるものではないが、スタック領域を切り替えるための処理である切替処理を含んでいない処理、任意のシステムコールに対応する処理、第1処理と同様にして、CPUの所定のレジスタが特定するアドレス(つまり、RAM又はROMの如き記録部のアドレス)を基準に実行される処理等を含む概念である。
【0026】
また、「格納制御手段」とは、第1処理ルーチン中には、実行されるべき処理として第1処理を特定する第1情報を格納し、第2処理ルーチン中には、実行されるべき処理として第2処理を特定する第2情報を格納する手段であり、例えば、第1処理を実行する命令を特定する第1基準アドレスを第1情報として格納し、第2処理を実行する命令を特定する第2基準アドレスを第2情報として格納する処理である。また、「実行手段」とは、納制御手段の格納結果に基づいて、第1処理又は第2処理を実行する手段である。
【0027】
また、「第1情報」とは、第1処理を実行する基準となる情報であり、具体的には、所定のレジスタに格納される情報であり、例えば、特殊レジスタに格納される情報であり、また、第1処理を実行する命令を特定する第1基準アドレスに対応する情報である。また、「第2情報」とは、第2処理を実行する基準となる情報であり、具体的には、所定のレジスタに前述の第1情報とは択一的に格納される情報であり、例えば、特殊レジスタに格納される情報であり、また、第2処理を実行する命令を特定する第2基準アドレスに対応する情報である。
【0028】
また、前述の「第1処理」として例示した「第1処理ルーチンが実行されている場合において割り込みが発生した場合に実行されるべき処理」、及び「第1処理ルーチンが実行されている場合においてシステムコールが実行された場合に実行されるべき処理」については、例えば、実装するハードウェアの仕様に応じて構成することができ、一例としては、1つの第1情報を基準に実行するように構成する(つまり、1つのベクタ又はベクタテーブルにて実現する)こともできるし、あるいは、2つの相互に異なる第1情報を基準に実行するように構成する(つまり、2つのベクタ又はベクタテーブルにて実現する)こともできるが、以下に示す実施の形態では、前者の場合を例示して説明する。すなわち、CPUアーキテクチャが単数のベクタテーブルを持つ場合であっても、複数のベクタテーブルを持つ場合であっても適用できるが、前者に適用する場合を例示して説明する。
【0029】
また、前述の「第2処理」として例示した「第2処理ルーチンが実行されている場合において割り込みが発生した場合に実行されるべき処理」、及び「第2処理ルーチンが実行されている場合においてシステムコールが実行された場合に実行されるべき処理」についても、第1処理の場合と同様に、例えば、実装するハードウェアの仕様に応じて構成することができ、一例としては、1つの第2情報を基準に実行するように構成する(つまり、1つのベクタ又はベクタテーブルにて実現する)こともできるし、あるいは、2つの相互に異なる第2情報を基準に実行するように構成する(つまり、2つのベクタ又はベクタテーブルにて実現する)こともできるが、以下に示す実施の形態では、前者の場合を例示して説明する。すなわち、CPUアーキテクチャが単数のベクタテーブルを持つ場合であっても、複数のベクタテーブルを持つ場合であっても適用できるが、前者に適用する場合を例示して説明する。
【0030】
そして、以下に示す実施の形態では、「処理システム」又は「コンピュータ」が、マイクロコンピュータであり、「処理プログラム」がマイクロコンピュータのリアルタイムOSであり、「格納制御手段」及び「実行手段」がマイクロコンピュータの要素によって実現されており、また、当該マイクロコンピュータがリアルタイムOSを実行する場合を例示して、以下説明する。
【0031】
(構成)
まず、本実施の形態に係るマイクロコンピュータについて説明する。
図1は、本発明の実施の形態に係るマイクロコンピュータを例示するブロック図である。なお、実際には、マイクロコンピュータ100には、図示されている要素以外にも、クロック発振器、タイマー、AD変換器、DA変換器、又は割込みコントローラ等の公知の要素も含まれ得るが、ここでは、主な要素のみ図示し、図示した要素以外の要素については、必要に応じて適宜説明する。また、図示されている各要素については、本願に特徴的な内容以外については、公知の内容を適用することができるので、本願に特徴的な内容のみについて説明する。
【0032】
マイクロコンピュータ100は、処理システム又はコンピュータであり、例えば、ROM1、RAM2、及びCPU3を備える。
【0033】
(構成−ROM)
ROM1は、マイクロコンピュータ100の動作に必要なプログラム及び各種のデータを記録する記録手段であり、例えば、外部記録装置としてのフラッシュメモリ(図示省略)等を用いて構成されている。
【0034】
(構成−RAM)
RAM2は、マイクロコンピュータ100の動作に必要なプログラム及び各種のデータを一時的に記録する記録手段であり、例えば、外部記録装置としてのDRAM(Dynamic Random Access Memory)等を用いて構成されている。
図2は、RAMが備えるスタック領域を例示した図である。なお、この
図2の「SP:Ad211」については、スタックポインタである「SP」が指し示しているアドレスが「Ad211」であることを特定しており、「SP:Ad212」、「SP:Ad221」についても、同様な概念を特定している。
図1のRAM2は、例えば、
図2の第1スタック領域21、及び第2スタック領域22を備える。なお、
図2においては、データが図面上側から下側に向かって蓄積されるものとして、各スタック領域を図示している。「第1スタック領域」21は、第1処理ルーチンであるタスクで用いられる記録領域であり、「第2スタック領域」22は、第2処理ルーチンであるISRにて用いられる記録領域である。
【0035】
(構成−CPU)
CPU3は、ROM1又はRAM2に適宜アクセスして、マイクロコンピュータ100を制御する制御手段であり、例えば、第1処理ルーチン中には、実行されるべき処理として第1処理を特定する第1情報を格納し、第2処理ルーチン中には、実行されるべき処理として第2処理を特定する第2情報を格納する格納制御手段であり、また、格納制御手段の格納結果に基づいて、第1処理又は第2処理を実行する実行手段である。また、CPU3は、例えば、ベクタ関連特殊レジスタ31を備える。
【0036】
(構成−CPU−ベクタ関連特殊レジスタ)
「ベクタ関連特殊レジスタ」31とは、第1情報又は第2情報を格納する格納手段であり、具体的には、第1割込み処理又は第1システム処理を実行するための情報、あるいは、第2割込み処理又は第2システム処理を実行するための情報を択一的に格納する手段であり、例えば、ISR用又はシステムコール用の特殊レジスタであり、一例としては、第1割込み処理又は第1システム処理を実行する命令群であるプログラムを特定するRAM2におけるベースアドレス(第1基準アドレス)、あるいは、第2割込み処理又は第2システム処理を実行する命令群であるプログラムを特定するRAM2におけるベースアドレス(第2基準アドレス)を格納する手段である。そして、例えば、ベクタ関連特殊レジスタ31は、第1割込み処理又は第1システム処理に対応する第1基準アドレスとしての「Ad_vect1」、あるいは、第2割込み処理又は第2システム処理に対応する第2基準アドレスとしての「Ad_vect2」が択一的に記録されることとして、説明する。なお、「Ad_vect1」及び「Ad_vect2」については、説明の便宜上の標記であり、アドレス値を示していることとする(なお、他のアドレスに関する標記についても同様とする)。
【0037】
なお、「第1割込み処理」とは、前述の第1処理であり、例えば、タスクが実行されている場合において割り込みが発生した場合に実行されるべき処理であり、また、「第2割込み処理」とは、前述の第2処理であり、例えば、ISRが実行されている場合において割り込みが発生した場合に実行されるべき処理である。なお、これらの各割込み処理については、後述する。
【0038】
また、「第1システム処理」とは、前述の第1処理であり、例えば、タスクが実行されている場合に実行されるべきシステムコールに対応する処理であり、公知の処理を含む任意の処理であり、また、「第2システム処理」とは、前述の第2処理であり、例えば、ISRが実行されている場合に実行されるべきシステムコールに対応する処理であり、公知の処理を含む任意の処理である。なお、これらの第1及び第2システム処理は、相互に異なる処理であってもよく、あるいは、相互に同じ処理であってもよいが、ここでは、例えば、相互に異なる処理であることとして説明する。
【0039】
(処理)
次に、このように構成されるマイクロコンピュータ100によって実行される第1割込み処理、第2割込み処理、第1システム処理、及び第2システム処理について説明する。
図3は、第1割込み処理のフローチャートであり(以下の各処理の説明ではステップを「S」と略記する)、
図4は、第2割込み処理のフローチャートであり、
図5は、タスク及びISRを示すタイミングチャートである。なお、
図5においては、時刻T1においてタスクに対して第1のISRの割込みが発生し、時刻T2において第1のISRに対して第2のISRの割込みが発生し、時刻T3において第2のISRの処理が終了し、時刻T4において第1のISRの処理が終了した場合の各処理の実行状態が図示されている。また、各タイミングでの、ベクタ関連特殊レジスタ31に格納されている情報も図示されている。なお、ここでのISRに付されている「第1の」及び「第2の」については、説明の便宜上の記載である。
【0040】
そして、以下の説明では、マイクロコンピュータ100の電源をオンした場合に、ベクタ関連特殊レジスタ31に初期値としてCPU3によって「Ad_vect1」が格納されることとする。
【0041】
(処理−第1割込み処理)
まず、第1割込み処理について説明する。この第1割込み処理については、例えば、ベクタ関連特殊レジスタ31に「Ad_vect1」が格納されている場合において、割込みが発生した場合に処理が起動されるものであり、処理が起動したところから、説明する。ここでは、例えば、前述したように、ベクタ関連特殊レジスタ31に初期値として「Ad_vect1」が格納されているので、
図5の時刻T1においてタスクに対して第1のISRの割込みが発生した場合に、第1割込み処理が起動されるが、この場合を適宜例示して説明する。また、時刻T1の時点で、スタックポインタが
図2の第1スタック領域21における「Ad211」を指していたこととして説明する。
【0042】
図3のSA1においてCPU3は、復帰用情報を保存する。「復帰用情報」とは、割込みが発生する前の状態に復帰する場合に利用される情報であり、例えば、プログラムカウンタ値、プログラムステータスワード(つまり、PSW)、及び汎用レジスタ値等含む概念である。具体的には任意であるが、例えば、復帰用情報を所定のレジスタから取得して、取得した情報を、
図2の第1スタック領域21にプッシュして保存する。この場合、スタックポインタが「Ad212」となる。
【0043】
図3のSA2においてCPU3は、レジスタ値を変更する。具体的には任意であるが、例えば、ベクタ関連特殊レジスタ31の情報を「Ad_vect1」から「Ad_vect2」に変更する。
【0044】
図3のSA3においてCPU3は、スタックポインタを保存する。具体的には任意であるが、例えば、現在のスタックポインタの値を任意の格納場所(一例としては、所定のレジスタやRAM2の任意の領域等)に格納する。ここでは、例えば、
図2の「Ad212」を格納する。
【0045】
図3のSA4においてCPU3は、スタックを切り替える。具体的には任意であるが、例えば、切替先のスタックのアドレスを任意の格納場所(一例としては、所定のレジスタやRAM2の任意の領域等)に予め記録しておき、この記録されているアドレスを取得し、取得したアドレスをスタックポインタに設定することにより、切り替える。ここでは、例えば、スタックポインタに
図2の「Adr221」を設定することにより、利用するスタック領域を、第1スタック領域21から第2スタック領域22に切り替える。
【0046】
図3のSA5においてCPU3は、割込み処理を実行する。具体的には任意であるが、例えば、割込みが発生した割込み原因に応じて任意の処理を行う。
【0047】
図3のSA6においてCPU3は、スタックポインタを復帰する。具体的には任意であるが、例えば、SA5の割込み処理が終了した後に、SA3で保存したスタックポインタの値を取得し、取得した値をスタックポインタに設定することにより、復帰する。ここでは、例えば、
図2の「Ad212」をスタックポインタに設定することにより復帰し、この場合、利用されるスタック領域が、第2スタック領域22から第1スタック領域21に切り替えられることになる。
【0048】
図3のSA7においてCPU3は、レジスタ値を変更する。具体的には任意であるが、例えば、ベクタ関連特殊レジスタ31の情報を「Ad_vect2」から「Ad_vect1」に変更する。
【0049】
図3のSA8においてCPU3は、復帰する。具体的には任意であるが、
図2のスタックポインタが「Ad212」に対応する領域から復帰用情報を取得(ポップ処理)し、取得した情報を所定のレジスタに反映することにより、復帰する。これにて、第1割込み処理を終了する。
【0050】
(処理−第2割込み処理)
次に、第2割込み処理について説明する。この第2割込み処理については、例えば、ベクタ関連特殊レジスタ31に「Ad_vect2」が格納されている場合において、割込みが発生した場合に処理が起動されるものであり、処理が起動したところから、説明する。ここでは、例えば、前述したように、ベクタ関連特殊レジスタ31に初期値として「Ad_vect1」が格納されているが、
図3のSA2でベクタ関連特殊レジスタ31の情報が「Ad_vect1」から「Ad_vect2」に変更されるので、このように変更された場合において、SA5の割込み処理中に他のISRの割込み(つまり、いわゆる多重割込み)が発生した場合に処理が起動されることになる。
【0051】
図4のSB1においてCPU3は、復帰用情報を保存する。具体的には任意であるが、例えば、このSB1を実行するタイミングでは、前述の
図3のSA4にて、スタックポインタに
図2の「Adr221」が設定され、利用するスタック領域が、第1スタック領域21から第2スタック領域22に切り替えられているので、この第2スタック領域22に保存することになる。詳細には、
図3のSA1と同様にして、復帰用情報を取得して、取得した情報を第2スタック領域22に保存する。
【0052】
この後、
図4のSB2及びSB3においてCPU3は、
図3のSA5及びSA8と同様な処理を行う。これにて、第2割込み処理を終了する。
【0053】
(処理−第1システム処理)
次に、第1システム処理について説明する。この第1システム処理については、例えば、ベクタ関連特殊レジスタ31に「Ad_vect1」が格納されている場合において、システムコールが実行された場合に処理が起動されるものであり、起動された後に、公知の処理を含む任意のシステムコールの処理を行って、終了する。
【0054】
(処理−第2システム処理)
次に、第2システム処理について説明する。この第2システム処理については、例えば、ベクタ関連特殊レジスタ31に「Ad_vect2」が格納されている場合において、システムコールが実行された場合に処理が起動されるものであり、起動された後に、公知の処理を含む任意のシステムコールの処理を行って、終了する。
【0055】
(動作)
次に、マイクロコンピュータ100の動作について説明する。ここでは、例えば、
図5のタイミングチャートを参照して、割込みが発生した場合の動作、及びシステムコールが実行された場合の動作について説明する。
【0056】
(動作−割込みが発生した場合の動作)
まず、マイクロコンピュータ100の電源をオンした後のベクタ関連特殊レジスタ31の情報が「Ad_vect1」であるので、時刻T1において第1のISRの割込みが発生した場合、
図3の第1割込み処理が実行されることになる。この場合、SA2にてベクタ関連特殊レジスタ31の情報が「Ad_vect1」から「Ad_vect2」に変更され、SA4にて利用されるスタック領域が第1スタック領域21から第2スタック領域22に切り替えられる。次に、この
図3のSA5の割り込み処理中に、時刻T2において当該第1のISRよりも優先度が高い第2のISRの割込みが発生した場合、
図3のSA2にてベクタ関連特殊レジスタ31の情報が「Ad_vect1」から「Ad_vect2」に変更されているので、
図4の第2割込み処理が実行されることになる。この後、時刻T3にて第2のISRの実行が終了した場合に第1のISRに復帰し、この後、時刻T4において、
図3のSA5の割り込み処理終了後に、SA6にてスタックポインタが復帰されて、利用されるスタック領域が第2スタック領域22から第1スタック領域21に切り替えられ、この後、SA7にてベクタ関連特殊レジスタ31の情報が「Ad_vect2」から「Ad_vect1」に変更された上で、SA8にてタスクに復帰することになるが、前述したようにベクタ関連特殊レジスタ31の情報が「Ad_vect2」から「Ad_vect1」に変更されているので、時刻T4の後のタスクで再度、ISRの割込みが発生した場合、第1割込み処理が実行されることになる。
【0057】
このように、マイクロコンピュータ100においては、タスク実行中にISRの割込みが発生した場合と、ISR実行中に他のISRの割込みが発生した場合とで、実行する処理内容を相互に異ならせることができ、特に、従来のようにタスクに対して割込みが発生したか、あるいは、ISRに対して割込みが発生したかを、割込みが発生する毎に判定する判定処理を行うことなく、実行する処理内容を相互に異ならせることができるので、処理時間を短縮することが可能となる。
【0058】
(動作−システムコールが実行された場合の動作)
まず、マイクロコンピュータ100の電源をオンした後のベクタ関連特殊レジスタ31の情報が「Ad_vect1」であるので、時刻T1よりも前のタスク中でシステムコールを実行した場合、第1システム処理が実行されることになる。次に、時刻T1において第1のISRの割込みが発生した場合、
図3の第1割込み処理が実行されることになり、
図3のSA2にてベクタ関連特殊レジスタ31の情報が「Ad_vect1」から「Ad_vect2」に変更されるので、時刻T1〜時刻T4の第1のISR又は第2のISR中でシステムコールを実行した場合、第2システム処理が実行されることになる。次に、時刻T4において第1のISRの処理が終了する場合、
図3のSA7にてベクタ関連特殊レジスタ31の情報が「Ad_vect2」から「Ad_vect1」に変更されるので、時刻T4の後のタスクでシステムコールを実行した場合、第1システム処理が実行されることになる。
【0059】
このように、マイクロコンピュータ100においては、タスク実行中にシステムコールを実行した場合と、ISR実行中にシステムコールを実行した場合とで、実行する処理内容を相互に異ならせることができ、特に、従来のようにタスクに対して割込みが発生したか、あるいは、ISRに対して割込みが発生したかを、割込みが発生する毎に判定する判定処理を行うことなく、実行する処理内容を相互に異ならせることができるので、処理時間を短縮することが可能となる。
【0060】
(実施の形態の効果)
このように本実施の形態によれば、CPU3によるベクタ関連特殊レジスタ31への格納結果に基づいて第1処理又は第2処理を実行することにより、例えば、第1処理ルーチンであるタスクにて呼び出されたか、あるいは、第2処理ルーチンであるISR呼び出されたかを判定する必要がないので、処理時間を短縮することが可能となる。
【0061】
また、第1基準アドレス又は第2基準アドレスを格納することにより、例えば、第1処理又は第2処理を実行するためのプログラムに迅速にアクセスすることができるので、処理時間を確実に短縮することが可能となる。
【0062】
また、第1処理である第1割込み処理が切替処理を含む処理であり、第2処理である第2割込み処理が切替処理を含まない処理であることにより、例えば、スタック領域を適切に切り替えて処理することができるので、スタック領域を効率的に利用することが可能となる。
【0063】
また、第1処理及び第2処理がシステムコールが実行された場合に実行される相互に異なる処理であることにより、例えば、タスク実行中にシステムコールを実行した場合の処理と、ISR実行中にシステムコールを実行した場合の処理とを相互に異ならせることができるので、ユーザの多様なニーズにこたえることができ、利便性を向上させることが可能となる。
【0064】
〔実施の形態に対する変形例〕
以上、本発明に係る実施の形態について説明したが、本発明の具体的な構成及び手段は、特許請求の範囲に記載した本発明の技術的思想の範囲内において、任意に改変及び改良することができる。以下、このような変形例について説明する。
【0065】
(解決しようとする課題や発明の効果について)
まず、発明が解決しようとする課題や発明の効果は、上述の内容に限定されるものではなく、発明の実施環境や構成の細部に応じて異なる可能性があり、上述した課題の一部のみを解決したり、上述した効果の一部のみを奏したりすることがある。
【0066】
(分散や統合について)
また、上述した各電気的構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散や統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散又は統合して構成できる。また、本出願における「装置」とは、単一の装置によって構成されたものに限定されず、複数の装置によって構成されたものを含む。
【0067】
(形状、数値、構造、時系列について)
実施の形態や図面において例示した構成要素に関して、形状、数値、又は複数の構成要素の構造若しくは時系列の相互関係については、本発明の技術的思想の範囲内において、任意に改変及び改良することができる。
【0068】
(第1割込み処理及び第2割込み処理について)
また、上記実施の形態では、第1割込み処理及び第2割込み処理が、スタック領域の切り替えを行うか否かにおいて相互に異なる場合について説明したが、これに限らず、例えば、各処理をスタック領域の切り替え以外の点において相互に異ならせてもよい。
【0069】
(特殊レジスタについて)
また、上記実施の形態では、ベクタ関連特殊レジスタ31をISR用及びシステムコール用で共通に用いる場合について説明したがこれに限らない。例えば、CPUアーキテクチャの仕様に応じて任意に変更することができ、例えば、CPUが複数のベクタテーブルを持つ仕様となっている場合であっても適用することができる。
【0070】
(第1割込み処理及び第2割込み処理について)
また、上記実施の形態では、
図3の第1割込み処理がスタックを切り替える処理を含んでおり、また、
図4の第2割り込み処理がスタックを切り替える処理を含んでいない点において相互に異なる場合を例示して説明したが、これに限らず、他の点において相互に異なるように構成してもよい。
【0071】
(第1及び第2処理ルーチンについて)
また、上述では、「第1処理ルーチン」及び「第2処理ルーチン」として、タスク及びISRを例示して説明したがこれに限らず、「第1処理ルーチン」及び「第2処理ルーチン」が、それ以外の実行コンテキストであることとしてもよい。具体的には、例えば、「第1処理ルーチン」及び「第2処理ルーチン」が、相互に種類の異なるタスク、あるいは、相互に種類の異なるISRであってもよく、特に、ユーザモードタスク、特権モードタスク、ユーザモードISR、特権モードISR、クリティカル割り込み用のISR、Hookと称するOSコンテキストの延長で動作するコンテキスト、割り込み禁止状態のコンテキスト等から選択される任意の処理ルーチンであることとしてもよい。
【0072】
(第1及び第2処理について)
また、上述の「第1処理」及び「第2処理」が以下に示す様々な場合に適用して、様々な処理であることとしてもよい。なお、以下の説明では、特記する場合を除いて、「イベント」が「割込み」であり、「第1処理ルーチン」が「タスク」であり、「第2処理ルーチン」が「ISR」であるものと解釈してもよい。
【0073】
まず、例えば、リアルタイムOSにおいて、スタック切り替えは行わず、スタック溢れ検出設定を変更する場合がある。そして、当該スタック溢れ検出設定を特殊レジスタの設定で制御するCPUアーキテクチャ等の任意のCPUアーキテクチャに本願の技術を適用してもよい。そして、この場合、「第1処理」が「スタック溢れ検出設定の変更を行う」処理であることとし、「第2処理」が「スタック溢れ検出設定の変更を行わない」処理であることとしてもよい。このように適用した場合、タスク上でユーザプログラムを実行しているときに設定しているスタック域の上限を、イベント発生時(例えば、割込み発生時等)に引き上げることが可能となる。そして、ユーザプログラムによるタスクスタック溢れ検出と、イベント発生時のOSコード実行を確実に行える状態に保つことの2つを両立させることが可能となる。
【0074】
また、例えば、割り込みレベルの自動設定を行わないCPUアーキテクチャ(もしくは、サポートが弱いアーキテクチャ)等の任意のCPUアーキテクチャに適用してもよい。具体的には、割り込みイベントの発生時に、ソフトウェア(リアルタイムOS等のOS)で制御することが想定されるが、この場合に本願の技術を適用してもよい。そして、この場合、「第1処理」が「割り込みレベル無しの状態から、発生した割り込みに対応する割り込みレベル設定に状態を変更し、この後、ISR(割り込み)終了時は割り込みレベルなしの状態に戻す」処理であることとし、「第2処理」が「割り込まれたISRの割り込みレベルを保存し、次に動作する割り込んだISR用の割り込みレベルを設定し、この後、ISR終了時には、保存しておいた割り込みレベルに戻す」処理であることとしてもよい。
【0075】
また、例えば、浮動小数点演算機能を割り込みコンテキストから利用することが非常に困難なCPUアーキテクチャ等の任意のCPUアーキテクチャに適用してもよい。そして、リアルタイムOSにおいて、浮動小数点演算機能を制御するも想定されるが、この場合に本願の技術を適用してもよい。そして、この場合、「第1処理」が「浮動小数点演算機能をOFFにする」処理であることとし、「第2処理」が「浮動小数点演算機能について何らの制御を行わない」処理であることとしてもよい。このように適用した場合、ISRコンテキストからは浮動小数点演算を行なえないように制御することが可能となる。
【0076】
また、例えば、CPUモードの切り替えでなく処理内容の切り替えを行うことが想定されるが、この場合に本願の技術を適用してもよい。そして、この場合、「イベント」が、「システムコールを用いてタスクを起動すること」であり、「第1処理」が「タスクスケジューラ呼び出しを行う」処理であることとし、「第2処理」が「タスクスケジューラ呼び出しを行わない」処理であることとしてもよい。また、この場合、「イベント」が「ISR終了」であり、「第1処理ルーチン」が「最初のISR」であり、「第2処理ルーチン」が「ネストしたISR」であり、「第1処理」が「タスクスケジューラを呼び出さない」処理であることとし、「第2処理」が「タスクスケジューラを呼び出す」処理であることとしてもよい。
【0077】
なお、上述の第1及び第2処理は単なる例示であり、上述で例示した各処理を相互に入れ替えて定義してもよいし、あるいは、その他の任意の処理を用いて定義してもよい。
【0078】
(適用について)
また、上記実施の形態の技術を、任意の分野に適用してもよく、例えば、マイクロコンピュータ100を車載装置の分野、あるいは、当該車載装置の分野以外の任意の分野に適用してもよい。
【0079】
(付記)
付記1の処理プログラムは、第1処理ルーチンにてイベントが発生した時に実行されるべき第1処理、又は第2処理ルーチンにてイベントが発生した時に実行されるべき第2処理を実行する処理プログラムであって、コンピュータを、前記第1処理ルーチン中には、実行されるべき処理として前記第1処理を特定する第1情報を格納し、前記第2処理ルーチン中には、実行されるべき処理として前記第2処理を特定する第2情報を格納する格納制御手段と、前記格納制御手段の格納結果に基づいて、前記第1処理又は前記第2処理を実行する実行手段と、として機能させる。
【0080】
付記2の処理プログラムは、付記1に記載の処理プログラムにおいて、前記格納制御手段は、前記第1処理を実行する命令を特定する第1基準アドレスを前記第1情報として格納し、前記第2処理を実行する命令を特定する第2基準アドレスを前記第2情報として格納する。
【0081】
付記3の処理プログラムは、付記2に記載の処理プログラムにおいて、前記処理プログラムは、リアルタイムオペレーティングシステムのプログラムであり、前記第1処理ルーチンは、タスクであり、前記第2処理ルーチンは、割込みハンドラであり、前記第1処理及び前記第2処理は、前記リアルタイムオペレーティングシステムの実行に関する相互に異なる処理である。
【0082】
付記4の処理プログラムは、付記3に記載の処理プログラムにおいて、前記第1処理は、前記処理プログラムで用いられるスタック領域を切り替える処理である切替処理を含む処理であり、前記第2処理は、前記切替処理を含まない処理である。
【0083】
付記5の処理プログラムは、付記3に記載の処理プログラムにおいて、前記第1処理及び前記第2処理は、システムコールが実行された場合に実行される相互に異なる処理である。
【0084】
付記6の処理システムは、第1処理ルーチンにてイベントが発生した時に実行されるべき第1処理、又は第2処理ルーチンにてイベントが発生した時に実行されるべき第2処理を実行する処理システムであって、前記第1処理ルーチン中には、実行されるべき処理として前記第1処理を特定する第1情報を格納し、前記第2処理ルーチン中には、実行されるべき処理として前記第2処理を格納する格納制御手段と、前記格納制御手段の格納結果に基づいて、前記第1処理又は前記第2処理を実行する実行手段と、を備える。
【0085】
(付記の効果)
付記1に記載の処理プログラムによれば、格納制御手段の格納結果に基づいて第1処理又は第2処理を実行することにより、例えば、第1処理ルーチンにて呼び出されたか、あるいは、第2処理ルーチンにて呼び出されたかを判定する必要がないので、処理時間を短縮することが可能となる。
【0086】
付記2に記載の処理プログラムによれば、第1基準アドレス又は第2基準アドレスを格納することにより、例えば、第1処理又は第2処理を実行するためのプログラムに迅速にアクセスすることができるので、処理時間を確実に短縮することが可能となる。
【0087】
付記3に記載の処理プログラムによれば、第1処理及び第2処理は、リアルタイムオペレーティングシステムの実行に関する相互に異なる処理であることにより、例えば、様々なCPUアーキテクチャを利用してユーザの多様なニーズにこたえることができ、利便性を向上させることが可能となる。
【0088】
付記4に記載の処理プログラムによれば、第1処理が切替処理を含む処理であり、第2処理が切替処理を含まない処理であることにより、例えば、スタック領域を適切に切り替えて処理することができるので、スタック領域を効率的に利用することが可能となる。
【0089】
付記5に記載の処理プログラムによれば、第1処理及び第2処理がシステムコールが実行された場合に実行される相互に異なる処理であることにより、例えば、タスク実行中にシステムコールを実行した場合の処理と、ISR実行中にシステムコールを実行した場合の処理とを相互に異ならせることができるので、ユーザの多様なニーズにこたえることができ、利便性を向上させることが可能となる。
【0090】
付記6に記載の処理システムによれば、格納制御手段の格納結果に基づいて第1処理又は第2処理を実行することにより、例えば、第1処理ルーチンにて呼び出されたか、あるいは、第2処理ルーチンにて呼び出されたかを判定する必要がないので、処理時間を短縮することが可能となる。