(57)【要約】【課題】処理時間を短縮することが可能となる処理プログラム、及び処理システムを提供すること。【解決手段】  第１処理ルーチンにてイベントが発生した時に実行されるべき第１処理、又は第２処理ルーチンにてイベントが発生した時に実行されるべき第２処理を実行する処理プログラムであって、マイクロコンピュータ１００を、第１処理ルーチン中には、実行されるべき処理として第１処理を特定する第１情報を格納し、第２処理ルーチン中には、実行されるべき処理として第２処理を特定する第２情報を格納する格納制御手段と、前記格納制御手段の格納結果に基づいて、第１処理又は前記第２処理を実行する実行手段と、として機能させる。【選択図】図１
2020060908.tif 000002
【特許請求の範囲】
【請求項１】
第１処理ルーチンにてイベントが発生した時に実行されるべき第１処理、又は第２処理ルーチンにてイベントが発生した時に実行されるべき第２処理を実行する処理プログラムであって、
コンピュータを、
前記第１処理ルーチン中には、実行されるべき処理として前記第１処理を特定する第１情報を格納し、前記第２処理ルーチン中には、実行されるべき処理として前記第２処理を特定する第２情報を格納する格納制御手段と、
前記格納制御手段の格納結果に基づいて、前記第１処理又は前記第２処理を実行する実行手段と、
として機能させる処理プログラム。
【請求項２】
前記格納制御手段は、前記第１処理を実行する命令を特定する第１基準アドレスを前記第１情報として格納し、前記第２処理を実行する命令を特定する第２基準アドレスを前記第２情報として格納する、
請求項１に記載の処理プログラム。
【請求項３】
前記処理プログラムは、リアルタイムオペレーティングシステムのプログラムであり、
前記第１処理ルーチンは、タスクであり、
前記第２処理ルーチンは、割込みハンドラであり、
前記第１処理及び前記第２処理は、前記リアルタイムオペレーティングシステムの実行に関する相互に異なる処理である、
請求項２に記載の処理プログラム。
【請求項４】
前記第１処理は、前記処理プログラムで用いられるスタック領域を切り替える処理である切替処理を含む処理であり、
前記第２処理は、前記切替処理を含まない処理である、
請求項３に記載の処理プログラム。
【請求項５】
前記第１処理及び前記第２処理は、システムコールが実行された場合に実行される相互に異なる処理である、
請求項３に記載の処理プログラム。
【請求項６】
第１処理ルーチンにてイベントが発生した時に実行されるべき第１処理、又は第２処理ルーチンにてイベントが発生した時に実行されるべき第２処理を実行する処理システムであって、
前記第１処理ルーチン中には、実行されるべき処理として前記第１処理を特定する第１情報を格納し、前記第２処理ルーチン中には、実行されるべき処理として前記第２処理を格納する格納制御手段と、
前記格納制御手段の格納結果に基づいて、前記第１処理又は前記第２処理を実行する実行手段と、
を備える処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理プログラム、及び処理システムに関する。
【背景技術】
【０００２】
従来、組み込みシステムとして用いられるマイクロコンピュータが知られていた（例えば、特許文献１）。この特許文献１のマイクロコンピュータを含めて、一般的なマイクロコンピュータでは、ユーザの利便性向上等の観点から、基本ソフトウェアであるリアルタイムオペレーティングシステム（つまり、リアルタイムＯＳ）を実装して用いられていた。そして、このようなリアルタイムＯＳにおいては、割込みが発生した場合に実行される処理等が実現されていた。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１１−２１９２９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、本願発明者は、タスク実行時に割込みが発生した場合と、割込みハンドラであるＩＳＲ実行時に割り込みが発生した場合（つまり、いわゆる多重割込みが発生した場合）とで相互に異なる処理を行う機能を、リアルタイムＯＳに実装することに想到した。すなわち、タスクに対して割込みが発生したか、あるいは、ＩＳＲに対して割込みが発生したかを、割込みが発生する毎に判定し、判定結果に応じて処理内容を異ならせる技術に想到した。
【０００５】
しかしながら、このような技術においては、割込みが発生する毎に判定を行う必要があり、当該判定の処理を行う分だけ処理時間が増大する可能性があった。特に、割込みが頻繁に発生する場合、処理時間の増大幅が顕著となる可能性があった。
【０００６】
本発明は、上記に鑑みてなされたものであって、処理時間を短縮することが可能となる処理プログラム、及び処理システムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、請求項１に記載の処理プログラムは、第１処理ルーチンにてイベントが発生した時に実行されるべき第１処理、又は第２処理ルーチンにてイベントが発生した時に実行されるべき第２処理を実行する処理プログラムであって、コンピュータを、前記第１処理ルーチン中には、実行されるべき処理として前記第１処理を特定する第１情報を格納し、前記第２処理ルーチン中には、実行されるべき処理として前記第２処理を特定する第２情報を格納する格納制御手段と、前記格納制御手段の格納結果に基づいて、前記第１処理又は前記第２処理を実行する実行手段として機能させる。
【０００８】
請求項２に記載の処理プログラムは、請求項１に記載の処理プログラムにおいて、前記格納制御手段は、前記第１処理を実行する命令を特定する第１基準アドレスを前記第１情報として格納し、前記第２処理を実行する命令を特定する第２基準アドレスを前記第２情報として格納する。
【０００９】
請求項３に記載の処理プログラムは、請求項２に記載の処理プログラムにおいて、前記処理プログラムは、リアルタイムオペレーティングシステムのプログラムであり、前記第１処理ルーチンは、タスクであり、前記第２処理ルーチンは、割込みハンドラであり、前記第１処理及び前記第２処理は、前記リアルタイムオペレーティングシステムの実行に関する相互に異なる処理である。
【００１０】
請求項４に記載の処理プログラムは、請求項３に記載の処理プログラムにおいて、前記第１処理は、前記処理プログラムで用いられるスタック領域を切り替える処理である切替処理を含む処理であり、前記第２処理は、前記切替処理を含まない処理である。
【００１１】
請求項５に記載の処理プログラムは、請求項３に記載の処理プログラムにおいて、前記第１処理及び前記第２処理は、システムコールが実行された場合に実行される相互に異なる処理である。
【００１２】
請求項６に記載の処理システムは、第１処理ルーチンにてイベントが発生した時に実行されるべき第１処理、又は第２処理ルーチンにてイベントが発生した時に実行されるべき第２処理を実行する処理システムであって、前記第１処理ルーチン中には、実行されるべき処理として前記第１処理を特定する第１情報を格納し、前記第２処理ルーチン中には、実行されるべき処理として前記第２処理を格納する格納制御手段と、前記格納制御手段の格納結果に基づいて、前記第１処理又は前記第２処理を実行する実行手段と、を備える。
【発明の効果】
【００１３】
請求項１に記載の処理プログラムによれば、格納制御手段の格納結果に基づいて第１処理又は第２処理を実行することにより、例えば、第１処理ルーチンにて呼び出されたか、あるいは、第２処理ルーチンにて呼び出されたかを判定する必要がないので、処理時間を短縮することが可能となる。
【００１４】
請求項２に記載の処理プログラムによれば、第１基準アドレス又は第２基準アドレスを格納することにより、例えば、第１処理又は第２処理を実行するためのプログラムに迅速にアクセスすることができるので、処理時間を確実に短縮することが可能となる。
【００１５】
請求項３に記載の処理プログラムによれば、第１処理及び第２処理は、リアルタイムオペレーティングシステムの実行に関する相互に異なる処理であることにより、例えば、様々なＣＰＵアーキテクチャを利用してユーザの多様なニーズにこたえることができ、利便性を向上させることが可能となる。
【００１６】
請求項４に記載の処理プログラムによれば、第１処理が切替処理を含む処理であり、第２処理が切替処理を含まない処理であることにより、例えば、スタック領域を適切に切り替えて処理することができるので、スタック領域を効率的に利用することが可能となる。
【００１７】
請求項５に記載の処理プログラムによれば、第１処理及び第２処理がシステムコールが実行された場合に実行される相互に異なる処理であることにより、例えば、タスク実行中にシステムコールを実行した場合の処理と、ＩＳＲ実行中にシステムコールを実行した場合の処理とを相互に異ならせることができるので、ユーザの多様なニーズにこたえることができ、利便性を向上させることが可能となる。
【００１８】
請求項６に記載の処理システムによれば、格納制御手段の格納結果に基づいて第１処理又は第２処理を実行することにより、例えば、第１処理ルーチンにて呼び出されたか、あるいは、第２処理ルーチンにて呼び出されたかを判定する必要がないので、処理時間を短縮することが可能となる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施の形態に係るマイクロコンピュータを例示するブロック図である。
【図２】ＲＡＭが備えるスタック領域を例示した図である。
【図３】第１割込み処理のフローチャートである。
【図４】第２割込み処理のフローチャートである。
【図５】タスク及びＩＳＲを示すタイミングチャートである。
【発明を実施するための形態】
【００２０】
以下、本発明に係る処理プログラム、及び処理システムの実施の形態について図面を参照しつつ詳細に説明する。ただし、実施の形態によって本発明が限定されるものではない。
【００２１】
本発明に係る処理プログラムは、第１処理ルーチンにてイベントが発生した時に実行されるべき第１処理、又は第２処理ルーチンにてイベントが発生した時に実行されるべき第２処理を実行するプログラムであり、例えば、第１処理又は第２処理を実行するための専用プログラム、あるいは、汎用的に用いられるプログラム（一例としては、汎用コンピュータ等で用いられる基本ソフトであるオペレーティングシステム（ＯＳ）、あるいは、マイクロコンピュータの如き組み込みシステムで用いられるリアルタイムオペレーティングシステム（リアルタイムＯＳ））の一部として実現されるプログラム等を含む概念である。また、この処理プログラムは、コンピュータ（例えば、マイクロコンピュータの如き組み込みシステム、あるいは、当該組み込みシステムの一部の要素（一例としては、中央演算処理装置であるＣＰＵ等）等）を、格納制御手段、及び実行手段として機能させるものである。
【００２２】
また、処理システムとは、第１処理ルーチンにてイベントが発生した時に実行されるべき第１処理、又は第２処理ルーチンにてイベントが発生した時に実行されるべき第２処理を実行するシステムであり、第１処理又は第２処理を実行するための専用システム、あるいは、汎用的に用いられるシステム（一例としては、汎用コンピュータ、マイクロコンピュータの如き組み込みシステム、あるいは、当該組み込みシステムの一部の要素（一例としては、中央演算処理装置であるＣＰＵ等）等）に対して、第１処理又は第２処理を実行するための機能を実装することにより実現されるシステム等を含む概念である。また、処理システムは、例えば、格納制御手段、及び実行手段を備える。
【００２３】
ここで、「第１処理ルーチン」及び「第２処理ルーチン」は、コンピュータで実行される処理群であり、具体的には、相互に異なる処理群であり、例えば、リアルタイムＯＳにおけるタスクに対応する処理群（以下、単に「タスク」とも称する）、及び当該リアルタイムＯＳにおける割込み処理（つまり、割込みハンドラであるＩＳＲ（Ｉｎｔｅｒｒｕｐｔ  Ｓｅｒｖｉｃｅ  Ｒｏｕｔｉｎｅ））に対応する処理群（以下、単に「ＩＳＲ」とも称する）等を含む概念である。なお、このＩＳＲについては、公知の処理を含む任意の処理を行うが、特に、タスクに対して割り込んで処理を行ったり、あるいは、他のＩＳＲに対して割り込んで処理を行ったりすることが可能となっているものである。そして、以下の実施の形態では、「第１処理ルーチン」がタスクに対応する処理群であり、また、「第２処理ルーチン」がＩＳＲに対応する処理群であることとして説明する。また、「イベント」とは、発生する出来事であり、例えば、割込み等を含む概念である。
【００２４】
また、「第１処理」とは、第１処理ルーチンにてイベントが発生した時に実行されるべき処理であり、例えば、リアルタイムＯＳにおいて、第１処理ルーチンが実行されている場合において割り込みが発生した場合に実行されるべき処理であり、あるいは、第１処理ルーチンが実行されている場合においてシステムコールが実行された場合に実行されるべき処理であり、１つ又は複数のコマンドを含む処理であり、また、リアルタイムＯＳの実行に関する処理であり、一例としては、限定されるものではないが、スタック領域を切り替える処理である切替処理を含む処理、任意のシステムコールに対応する処理、及びＣＰＵの所定のレジスタが特定するアドレス（つまり、ＲＡＭ又はＲＯＭの如き記録部のアドレス）を基準に実行される処理等を含む概念である。
【００２５】
また、「第２処理」とは、第２処理ルーチンにてイベントが発生した時に実行されるべき処理であり、例えば、リアルタイムＯＳにおいて、第２処理ルーチンが実行されている場合において割り込みが発生した場合に実行されるべき処理であり、あるいは、第２処理ルーチンが実行されている場合においてシステムコールが実行された場合に実行されるべき処理であり、１つ又は複数のコマンドを含む処理であり、また、リアルタイムＯＳの実行に関する処理（特に、第１処理とは異なる処理）であり、一例としては、限定されるものではないが、スタック領域を切り替えるための処理である切替処理を含んでいない処理、任意のシステムコールに対応する処理、第１処理と同様にして、ＣＰＵの所定のレジスタが特定するアドレス（つまり、ＲＡＭ又はＲＯＭの如き記録部のアドレス）を基準に実行される処理等を含む概念である。
【００２６】
また、「格納制御手段」とは、第１処理ルーチン中には、実行されるべき処理として第１処理を特定する第１情報を格納し、第２処理ルーチン中には、実行されるべき処理として第２処理を特定する第２情報を格納する手段であり、例えば、第１処理を実行する命令を特定する第１基準アドレスを第１情報として格納し、第２処理を実行する命令を特定する第２基準アドレスを第２情報として格納する処理である。また、「実行手段」とは、納制御手段の格納結果に基づいて、第１処理又は第２処理を実行する手段である。
【００２７】
また、「第１情報」とは、第１処理を実行する基準となる情報であり、具体的には、所定のレジスタに格納される情報であり、例えば、特殊レジスタに格納される情報であり、また、第１処理を実行する命令を特定する第１基準アドレスに対応する情報である。また、「第２情報」とは、第２処理を実行する基準となる情報であり、具体的には、所定のレジスタに前述の第１情報とは択一的に格納される情報であり、例えば、特殊レジスタに格納される情報であり、また、第２処理を実行する命令を特定する第２基準アドレスに対応する情報である。
【００２８】
また、前述の「第１処理」として例示した「第１処理ルーチンが実行されている場合において割り込みが発生した場合に実行されるべき処理」、及び「第１処理ルーチンが実行されている場合においてシステムコールが実行された場合に実行されるべき処理」については、例えば、実装するハードウェアの仕様に応じて構成することができ、一例としては、１つの第１情報を基準に実行するように構成する（つまり、１つのベクタ又はベクタテーブルにて実現する）こともできるし、あるいは、２つの相互に異なる第１情報を基準に実行するように構成する（つまり、２つのベクタ又はベクタテーブルにて実現する）こともできるが、以下に示す実施の形態では、前者の場合を例示して説明する。すなわち、ＣＰＵアーキテクチャが単数のベクタテーブルを持つ場合であっても、複数のベクタテーブルを持つ場合であっても適用できるが、前者に適用する場合を例示して説明する。
【００２９】
また、前述の「第２処理」として例示した「第２処理ルーチンが実行されている場合において割り込みが発生した場合に実行されるべき処理」、及び「第２処理ルーチンが実行されている場合においてシステムコールが実行された場合に実行されるべき処理」についても、第１処理の場合と同様に、例えば、実装するハードウェアの仕様に応じて構成することができ、一例としては、１つの第２情報を基準に実行するように構成する（つまり、１つのベクタ又はベクタテーブルにて実現する）こともできるし、あるいは、２つの相互に異なる第２情報を基準に実行するように構成する（つまり、２つのベクタ又はベクタテーブルにて実現する）こともできるが、以下に示す実施の形態では、前者の場合を例示して説明する。すなわち、ＣＰＵアーキテクチャが単数のベクタテーブルを持つ場合であっても、複数のベクタテーブルを持つ場合であっても適用できるが、前者に適用する場合を例示して説明する。
【００３０】
そして、以下に示す実施の形態では、「処理システム」又は「コンピュータ」が、マイクロコンピュータであり、「処理プログラム」がマイクロコンピュータのリアルタイムＯＳであり、「格納制御手段」及び「実行手段」がマイクロコンピュータの要素によって実現されており、また、当該マイクロコンピュータがリアルタイムＯＳを実行する場合を例示して、以下説明する。
【００３１】
（構成）
まず、本実施の形態に係るマイクロコンピュータについて説明する。図１は、本発明の実施の形態に係るマイクロコンピュータを例示するブロック図である。なお、実際には、マイクロコンピュータ１００には、図示されている要素以外にも、クロック発振器、タイマー、ＡＤ変換器、ＤＡ変換器、又は割込みコントローラ等の公知の要素も含まれ得るが、ここでは、主な要素のみ図示し、図示した要素以外の要素については、必要に応じて適宜説明する。また、図示されている各要素については、本願に特徴的な内容以外については、公知の内容を適用することができるので、本願に特徴的な内容のみについて説明する。
【００３２】
マイクロコンピュータ１００は、処理システム又はコンピュータであり、例えば、ＲＯＭ１、ＲＡＭ２、及びＣＰＵ３を備える。
【００３３】
（構成−ＲＯＭ）
ＲＯＭ１は、マイクロコンピュータ１００の動作に必要なプログラム及び各種のデータを記録する記録手段であり、例えば、外部記録装置としてのフラッシュメモリ（図示省略）等を用いて構成されている。
【００３４】
（構成−ＲＡＭ）
ＲＡＭ２は、マイクロコンピュータ１００の動作に必要なプログラム及び各種のデータを一時的に記録する記録手段であり、例えば、外部記録装置としてのＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等を用いて構成されている。図２は、ＲＡＭが備えるスタック領域を例示した図である。なお、この図２の「ＳＰ：Ａｄ２１１」については、スタックポインタである「ＳＰ」が指し示しているアドレスが「Ａｄ２１１」であることを特定しており、「ＳＰ：Ａｄ２１２」、「ＳＰ：Ａｄ２２１」についても、同様な概念を特定している。図１のＲＡＭ２は、例えば、図２の第１スタック領域２１、及び第２スタック領域２２を備える。なお、図２においては、データが図面上側から下側に向かって蓄積されるものとして、各スタック領域を図示している。「第１スタック領域」２１は、第１処理ルーチンであるタスクで用いられる記録領域であり、「第２スタック領域」２２は、第２処理ルーチンであるＩＳＲにて用いられる記録領域である。
【００３５】
（構成−ＣＰＵ）
ＣＰＵ３は、ＲＯＭ１又はＲＡＭ２に適宜アクセスして、マイクロコンピュータ１００を制御する制御手段であり、例えば、第１処理ルーチン中には、実行されるべき処理として第１処理を特定する第１情報を格納し、第２処理ルーチン中には、実行されるべき処理として第２処理を特定する第２情報を格納する格納制御手段であり、また、格納制御手段の格納結果に基づいて、第１処理又は第２処理を実行する実行手段である。また、ＣＰＵ３は、例えば、ベクタ関連特殊レジスタ３１を備える。
【００３６】
（構成−ＣＰＵ−ベクタ関連特殊レジスタ）
「ベクタ関連特殊レジスタ」３１とは、第１情報又は第２情報を格納する格納手段であり、具体的には、第１割込み処理又は第１システム処理を実行するための情報、あるいは、第２割込み処理又は第２システム処理を実行するための情報を択一的に格納する手段であり、例えば、ＩＳＲ用又はシステムコール用の特殊レジスタであり、一例としては、第１割込み処理又は第１システム処理を実行する命令群であるプログラムを特定するＲＡＭ２におけるベースアドレス（第１基準アドレス）、あるいは、第２割込み処理又は第２システム処理を実行する命令群であるプログラムを特定するＲＡＭ２におけるベースアドレス（第２基準アドレス）を格納する手段である。そして、例えば、ベクタ関連特殊レジスタ３１は、第１割込み処理又は第１システム処理に対応する第１基準アドレスとしての「Ａｄ＿ｖｅｃｔ１」、あるいは、第２割込み処理又は第２システム処理に対応する第２基準アドレスとしての「Ａｄ＿ｖｅｃｔ２」が択一的に記録されることとして、説明する。なお、「Ａｄ＿ｖｅｃｔ１」及び「Ａｄ＿ｖｅｃｔ２」については、説明の便宜上の標記であり、アドレス値を示していることとする（なお、他のアドレスに関する標記についても同様とする）。
【００３７】
なお、「第１割込み処理」とは、前述の第１処理であり、例えば、タスクが実行されている場合において割り込みが発生した場合に実行されるべき処理であり、また、「第２割込み処理」とは、前述の第２処理であり、例えば、ＩＳＲが実行されている場合において割り込みが発生した場合に実行されるべき処理である。なお、これらの各割込み処理については、後述する。
【００３８】
また、「第１システム処理」とは、前述の第１処理であり、例えば、タスクが実行されている場合に実行されるべきシステムコールに対応する処理であり、公知の処理を含む任意の処理であり、また、「第２システム処理」とは、前述の第２処理であり、例えば、ＩＳＲが実行されている場合に実行されるべきシステムコールに対応する処理であり、公知の処理を含む任意の処理である。なお、これらの第１及び第２システム処理は、相互に異なる処理であってもよく、あるいは、相互に同じ処理であってもよいが、ここでは、例えば、相互に異なる処理であることとして説明する。
【００３９】
（処理）
次に、このように構成されるマイクロコンピュータ１００によって実行される第１割込み処理、第２割込み処理、第１システム処理、及び第２システム処理について説明する。図３は、第１割込み処理のフローチャートであり（以下の各処理の説明ではステップを「Ｓ」と略記する）、図４は、第２割込み処理のフローチャートであり、図５は、タスク及びＩＳＲを示すタイミングチャートである。なお、図５においては、時刻Ｔ１においてタスクに対して第１のＩＳＲの割込みが発生し、時刻Ｔ２において第１のＩＳＲに対して第２のＩＳＲの割込みが発生し、時刻Ｔ３において第２のＩＳＲの処理が終了し、時刻Ｔ４において第１のＩＳＲの処理が終了した場合の各処理の実行状態が図示されている。また、各タイミングでの、ベクタ関連特殊レジスタ３１に格納されている情報も図示されている。なお、ここでのＩＳＲに付されている「第１の」及び「第２の」については、説明の便宜上の記載である。
【００４０】
そして、以下の説明では、マイクロコンピュータ１００の電源をオンした場合に、ベクタ関連特殊レジスタ３１に初期値としてＣＰＵ３によって「Ａｄ＿ｖｅｃｔ１」が格納されることとする。
【００４１】
（処理−第１割込み処理）
まず、第１割込み処理について説明する。この第１割込み処理については、例えば、ベクタ関連特殊レジスタ３１に「Ａｄ＿ｖｅｃｔ１」が格納されている場合において、割込みが発生した場合に処理が起動されるものであり、処理が起動したところから、説明する。ここでは、例えば、前述したように、ベクタ関連特殊レジスタ３１に初期値として「Ａｄ＿ｖｅｃｔ１」が格納されているので、図５の時刻Ｔ１においてタスクに対して第１のＩＳＲの割込みが発生した場合に、第１割込み処理が起動されるが、この場合を適宜例示して説明する。また、時刻Ｔ１の時点で、スタックポインタが図２の第１スタック領域２１における「Ａｄ２１１」を指していたこととして説明する。
【００４２】
図３のＳＡ１においてＣＰＵ３は、復帰用情報を保存する。「復帰用情報」とは、割込みが発生する前の状態に復帰する場合に利用される情報であり、例えば、プログラムカウンタ値、プログラムステータスワード（つまり、ＰＳＷ）、及び汎用レジスタ値等含む概念である。具体的には任意であるが、例えば、復帰用情報を所定のレジスタから取得して、取得した情報を、図２の第１スタック領域２１にプッシュして保存する。この場合、スタックポインタが「Ａｄ２１２」となる。
【００４３】
図３のＳＡ２においてＣＰＵ３は、レジスタ値を変更する。具体的には任意であるが、例えば、ベクタ関連特殊レジスタ３１の情報を「Ａｄ＿ｖｅｃｔ１」から「Ａｄ＿ｖｅｃｔ２」に変更する。
【００４４】
図３のＳＡ３においてＣＰＵ３は、スタックポインタを保存する。具体的には任意であるが、例えば、現在のスタックポインタの値を任意の格納場所（一例としては、所定のレジスタやＲＡＭ２の任意の領域等）に格納する。ここでは、例えば、図２の「Ａｄ２１２」を格納する。
【００４５】
図３のＳＡ４においてＣＰＵ３は、スタックを切り替える。具体的には任意であるが、例えば、切替先のスタックのアドレスを任意の格納場所（一例としては、所定のレジスタやＲＡＭ２の任意の領域等）に予め記録しておき、この記録されているアドレスを取得し、取得したアドレスをスタックポインタに設定することにより、切り替える。ここでは、例えば、スタックポインタに図２の「Ａｄｒ２２１」を設定することにより、利用するスタック領域を、第１スタック領域２１から第２スタック領域２２に切り替える。
【００４６】
図３のＳＡ５においてＣＰＵ３は、割込み処理を実行する。具体的には任意であるが、例えば、割込みが発生した割込み原因に応じて任意の処理を行う。
【００４７】
図３のＳＡ６においてＣＰＵ３は、スタックポインタを復帰する。具体的には任意であるが、例えば、ＳＡ５の割込み処理が終了した後に、ＳＡ３で保存したスタックポインタの値を取得し、取得した値をスタックポインタに設定することにより、復帰する。ここでは、例えば、図２の「Ａｄ２１２」をスタックポインタに設定することにより復帰し、この場合、利用されるスタック領域が、第２スタック領域２２から第１スタック領域２１に切り替えられることになる。
【００４８】
図３のＳＡ７においてＣＰＵ３は、レジスタ値を変更する。具体的には任意であるが、例えば、ベクタ関連特殊レジスタ３１の情報を「Ａｄ＿ｖｅｃｔ２」から「Ａｄ＿ｖｅｃｔ１」に変更する。
【００４９】
図３のＳＡ８においてＣＰＵ３は、復帰する。具体的には任意であるが、図２のスタックポインタが「Ａｄ２１２」に対応する領域から復帰用情報を取得（ポップ処理）し、取得した情報を所定のレジスタに反映することにより、復帰する。これにて、第１割込み処理を終了する。
【００５０】
（処理−第２割込み処理）
次に、第２割込み処理について説明する。この第２割込み処理については、例えば、ベクタ関連特殊レジスタ３１に「Ａｄ＿ｖｅｃｔ２」が格納されている場合において、割込みが発生した場合に処理が起動されるものであり、処理が起動したところから、説明する。ここでは、例えば、前述したように、ベクタ関連特殊レジスタ３１に初期値として「Ａｄ＿ｖｅｃｔ１」が格納されているが、図３のＳＡ２でベクタ関連特殊レジスタ３１の情報が「Ａｄ＿ｖｅｃｔ１」から「Ａｄ＿ｖｅｃｔ２」に変更されるので、このように変更された場合において、ＳＡ５の割込み処理中に他のＩＳＲの割込み（つまり、いわゆる多重割込み）が発生した場合に処理が起動されることになる。
【００５１】
図４のＳＢ１においてＣＰＵ３は、復帰用情報を保存する。具体的には任意であるが、例えば、このＳＢ１を実行するタイミングでは、前述の図３のＳＡ４にて、スタックポインタに図２の「Ａｄｒ２２１」が設定され、利用するスタック領域が、第１スタック領域２１から第２スタック領域２２に切り替えられているので、この第２スタック領域２２に保存することになる。詳細には、図３のＳＡ１と同様にして、復帰用情報を取得して、取得した情報を第２スタック領域２２に保存する。
【００５２】
この後、図４のＳＢ２及びＳＢ３においてＣＰＵ３は、図３のＳＡ５及びＳＡ８と同様な処理を行う。これにて、第２割込み処理を終了する。
【００５３】
（処理−第１システム処理）
次に、第１システム処理について説明する。この第１システム処理については、例えば、ベクタ関連特殊レジスタ３１に「Ａｄ＿ｖｅｃｔ１」が格納されている場合において、システムコールが実行された場合に処理が起動されるものであり、起動された後に、公知の処理を含む任意のシステムコールの処理を行って、終了する。
【００５４】
（処理−第２システム処理）
次に、第２システム処理について説明する。この第２システム処理については、例えば、ベクタ関連特殊レジスタ３１に「Ａｄ＿ｖｅｃｔ２」が格納されている場合において、システムコールが実行された場合に処理が起動されるものであり、起動された後に、公知の処理を含む任意のシステムコールの処理を行って、終了する。
【００５５】
（動作）
次に、マイクロコンピュータ１００の動作について説明する。ここでは、例えば、図５のタイミングチャートを参照して、割込みが発生した場合の動作、及びシステムコールが実行された場合の動作について説明する。
【００５６】
（動作−割込みが発生した場合の動作）
まず、マイクロコンピュータ１００の電源をオンした後のベクタ関連特殊レジスタ３１の情報が「Ａｄ＿ｖｅｃｔ１」であるので、時刻Ｔ１において第１のＩＳＲの割込みが発生した場合、図３の第１割込み処理が実行されることになる。この場合、ＳＡ２にてベクタ関連特殊レジスタ３１の情報が「Ａｄ＿ｖｅｃｔ１」から「Ａｄ＿ｖｅｃｔ２」に変更され、ＳＡ４にて利用されるスタック領域が第１スタック領域２１から第２スタック領域２２に切り替えられる。次に、この図３のＳＡ５の割り込み処理中に、時刻Ｔ２において当該第１のＩＳＲよりも優先度が高い第２のＩＳＲの割込みが発生した場合、図３のＳＡ２にてベクタ関連特殊レジスタ３１の情報が「Ａｄ＿ｖｅｃｔ１」から「Ａｄ＿ｖｅｃｔ２」に変更されているので、図４の第２割込み処理が実行されることになる。この後、時刻Ｔ３にて第２のＩＳＲの実行が終了した場合に第１のＩＳＲに復帰し、この後、時刻Ｔ４において、図３のＳＡ５の割り込み処理終了後に、ＳＡ６にてスタックポインタが復帰されて、利用されるスタック領域が第２スタック領域２２から第１スタック領域２１に切り替えられ、この後、ＳＡ７にてベクタ関連特殊レジスタ３１の情報が「Ａｄ＿ｖｅｃｔ２」から「Ａｄ＿ｖｅｃｔ１」に変更された上で、ＳＡ８にてタスクに復帰することになるが、前述したようにベクタ関連特殊レジスタ３１の情報が「Ａｄ＿ｖｅｃｔ２」から「Ａｄ＿ｖｅｃｔ１」に変更されているので、時刻Ｔ４の後のタスクで再度、ＩＳＲの割込みが発生した場合、第１割込み処理が実行されることになる。
【００５７】
このように、マイクロコンピュータ１００においては、タスク実行中にＩＳＲの割込みが発生した場合と、ＩＳＲ実行中に他のＩＳＲの割込みが発生した場合とで、実行する処理内容を相互に異ならせることができ、特に、従来のようにタスクに対して割込みが発生したか、あるいは、ＩＳＲに対して割込みが発生したかを、割込みが発生する毎に判定する判定処理を行うことなく、実行する処理内容を相互に異ならせることができるので、処理時間を短縮することが可能となる。
【００５８】
（動作−システムコールが実行された場合の動作）
まず、マイクロコンピュータ１００の電源をオンした後のベクタ関連特殊レジスタ３１の情報が「Ａｄ＿ｖｅｃｔ１」であるので、時刻Ｔ１よりも前のタスク中でシステムコールを実行した場合、第１システム処理が実行されることになる。次に、時刻Ｔ１において第１のＩＳＲの割込みが発生した場合、図３の第１割込み処理が実行されることになり、図３のＳＡ２にてベクタ関連特殊レジスタ３１の情報が「Ａｄ＿ｖｅｃｔ１」から「Ａｄ＿ｖｅｃｔ２」に変更されるので、時刻Ｔ１〜時刻Ｔ４の第１のＩＳＲ又は第２のＩＳＲ中でシステムコールを実行した場合、第２システム処理が実行されることになる。次に、時刻Ｔ４において第１のＩＳＲの処理が終了する場合、図３のＳＡ７にてベクタ関連特殊レジスタ３１の情報が「Ａｄ＿ｖｅｃｔ２」から「Ａｄ＿ｖｅｃｔ１」に変更されるので、時刻Ｔ４の後のタスクでシステムコールを実行した場合、第１システム処理が実行されることになる。
【００５９】
このように、マイクロコンピュータ１００においては、タスク実行中にシステムコールを実行した場合と、ＩＳＲ実行中にシステムコールを実行した場合とで、実行する処理内容を相互に異ならせることができ、特に、従来のようにタスクに対して割込みが発生したか、あるいは、ＩＳＲに対して割込みが発生したかを、割込みが発生する毎に判定する判定処理を行うことなく、実行する処理内容を相互に異ならせることができるので、処理時間を短縮することが可能となる。
【００６０】
（実施の形態の効果）
このように本実施の形態によれば、ＣＰＵ３によるベクタ関連特殊レジスタ３１への格納結果に基づいて第１処理又は第２処理を実行することにより、例えば、第１処理ルーチンであるタスクにて呼び出されたか、あるいは、第２処理ルーチンであるＩＳＲ呼び出されたかを判定する必要がないので、処理時間を短縮することが可能となる。
【００６１】
また、第１基準アドレス又は第２基準アドレスを格納することにより、例えば、第１処理又は第２処理を実行するためのプログラムに迅速にアクセスすることができるので、処理時間を確実に短縮することが可能となる。
【００６２】
また、第１処理である第１割込み処理が切替処理を含む処理であり、第２処理である第２割込み処理が切替処理を含まない処理であることにより、例えば、スタック領域を適切に切り替えて処理することができるので、スタック領域を効率的に利用することが可能となる。
【００６３】
また、第１処理及び第２処理がシステムコールが実行された場合に実行される相互に異なる処理であることにより、例えば、タスク実行中にシステムコールを実行した場合の処理と、ＩＳＲ実行中にシステムコールを実行した場合の処理とを相互に異ならせることができるので、ユーザの多様なニーズにこたえることができ、利便性を向上させることが可能となる。
【００６４】
〔実施の形態に対する変形例〕
以上、本発明に係る実施の形態について説明したが、本発明の具体的な構成及び手段は、特許請求の範囲に記載した本発明の技術的思想の範囲内において、任意に改変及び改良することができる。以下、このような変形例について説明する。
【００６５】
（解決しようとする課題や発明の効果について）
まず、発明が解決しようとする課題や発明の効果は、上述の内容に限定されるものではなく、発明の実施環境や構成の細部に応じて異なる可能性があり、上述した課題の一部のみを解決したり、上述した効果の一部のみを奏したりすることがある。
【００６６】
（分散や統合について）
また、上述した各電気的構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散や統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散又は統合して構成できる。また、本出願における「装置」とは、単一の装置によって構成されたものに限定されず、複数の装置によって構成されたものを含む。
【００６７】
（形状、数値、構造、時系列について）
実施の形態や図面において例示した構成要素に関して、形状、数値、又は複数の構成要素の構造若しくは時系列の相互関係については、本発明の技術的思想の範囲内において、任意に改変及び改良することができる。
【００６８】
（第１割込み処理及び第２割込み処理について）
また、上記実施の形態では、第１割込み処理及び第２割込み処理が、スタック領域の切り替えを行うか否かにおいて相互に異なる場合について説明したが、これに限らず、例えば、各処理をスタック領域の切り替え以外の点において相互に異ならせてもよい。
【００６９】
（特殊レジスタについて）
また、上記実施の形態では、ベクタ関連特殊レジスタ３１をＩＳＲ用及びシステムコール用で共通に用いる場合について説明したがこれに限らない。例えば、ＣＰＵアーキテクチャの仕様に応じて任意に変更することができ、例えば、ＣＰＵが複数のベクタテーブルを持つ仕様となっている場合であっても適用することができる。
【００７０】
（第１割込み処理及び第２割込み処理について）
また、上記実施の形態では、図３の第１割込み処理がスタックを切り替える処理を含んでおり、また、図４の第２割り込み処理がスタックを切り替える処理を含んでいない点において相互に異なる場合を例示して説明したが、これに限らず、他の点において相互に異なるように構成してもよい。
【００７１】
（第１及び第２処理ルーチンについて）
また、上述では、「第１処理ルーチン」及び「第２処理ルーチン」として、タスク及びＩＳＲを例示して説明したがこれに限らず、「第１処理ルーチン」及び「第２処理ルーチン」が、それ以外の実行コンテキストであることとしてもよい。具体的には、例えば、「第１処理ルーチン」及び「第２処理ルーチン」が、相互に種類の異なるタスク、あるいは、相互に種類の異なるＩＳＲであってもよく、特に、ユーザモードタスク、特権モードタスク、ユーザモードＩＳＲ、特権モードＩＳＲ、クリティカル割り込み用のＩＳＲ、Ｈｏｏｋと称するＯＳコンテキストの延長で動作するコンテキスト、割り込み禁止状態のコンテキスト等から選択される任意の処理ルーチンであることとしてもよい。
【００７２】
（第１及び第２処理について）
また、上述の「第１処理」及び「第２処理」が以下に示す様々な場合に適用して、様々な処理であることとしてもよい。なお、以下の説明では、特記する場合を除いて、「イベント」が「割込み」であり、「第１処理ルーチン」が「タスク」であり、「第２処理ルーチン」が「ＩＳＲ」であるものと解釈してもよい。
【００７３】
まず、例えば、リアルタイムＯＳにおいて、スタック切り替えは行わず、スタック溢れ検出設定を変更する場合がある。そして、当該スタック溢れ検出設定を特殊レジスタの設定で制御するＣＰＵアーキテクチャ等の任意のＣＰＵアーキテクチャに本願の技術を適用してもよい。そして、この場合、「第１処理」が「スタック溢れ検出設定の変更を行う」処理であることとし、「第２処理」が「スタック溢れ検出設定の変更を行わない」処理であることとしてもよい。このように適用した場合、タスク上でユーザプログラムを実行しているときに設定しているスタック域の上限を、イベント発生時（例えば、割込み発生時等）に引き上げることが可能となる。そして、ユーザプログラムによるタスクスタック溢れ検出と、イベント発生時のＯＳコード実行を確実に行える状態に保つことの２つを両立させることが可能となる。
【００７４】
また、例えば、割り込みレベルの自動設定を行わないＣＰＵアーキテクチャ（もしくは、サポートが弱いアーキテクチャ）等の任意のＣＰＵアーキテクチャに適用してもよい。具体的には、割り込みイベントの発生時に、ソフトウェア（リアルタイムＯＳ等のＯＳ）で制御することが想定されるが、この場合に本願の技術を適用してもよい。そして、この場合、「第１処理」が「割り込みレベル無しの状態から、発生した割り込みに対応する割り込みレベル設定に状態を変更し、この後、ＩＳＲ（割り込み）終了時は割り込みレベルなしの状態に戻す」処理であることとし、「第２処理」が「割り込まれたＩＳＲの割り込みレベルを保存し、次に動作する割り込んだＩＳＲ用の割り込みレベルを設定し、この後、ＩＳＲ終了時には、保存しておいた割り込みレベルに戻す」処理であることとしてもよい。
【００７５】
また、例えば、浮動小数点演算機能を割り込みコンテキストから利用することが非常に困難なＣＰＵアーキテクチャ等の任意のＣＰＵアーキテクチャに適用してもよい。そして、リアルタイムＯＳにおいて、浮動小数点演算機能を制御するも想定されるが、この場合に本願の技術を適用してもよい。そして、この場合、「第１処理」が「浮動小数点演算機能をＯＦＦにする」処理であることとし、「第２処理」が「浮動小数点演算機能について何らの制御を行わない」処理であることとしてもよい。このように適用した場合、ＩＳＲコンテキストからは浮動小数点演算を行なえないように制御することが可能となる。
【００７６】
また、例えば、ＣＰＵモードの切り替えでなく処理内容の切り替えを行うことが想定されるが、この場合に本願の技術を適用してもよい。そして、この場合、「イベント」が、「システムコールを用いてタスクを起動すること」であり、「第１処理」が「タスクスケジューラ呼び出しを行う」処理であることとし、「第２処理」が「タスクスケジューラ呼び出しを行わない」処理であることとしてもよい。また、この場合、「イベント」が「ＩＳＲ終了」であり、「第１処理ルーチン」が「最初のＩＳＲ」であり、「第２処理ルーチン」が「ネストしたＩＳＲ」であり、「第１処理」が「タスクスケジューラを呼び出さない」処理であることとし、「第２処理」が「タスクスケジューラを呼び出す」処理であることとしてもよい。
【００７７】
なお、上述の第１及び第２処理は単なる例示であり、上述で例示した各処理を相互に入れ替えて定義してもよいし、あるいは、その他の任意の処理を用いて定義してもよい。
【００７８】
（適用について）
また、上記実施の形態の技術を、任意の分野に適用してもよく、例えば、マイクロコンピュータ１００を車載装置の分野、あるいは、当該車載装置の分野以外の任意の分野に適用してもよい。
【００７９】
（付記）
付記１の処理プログラムは、第１処理ルーチンにてイベントが発生した時に実行されるべき第１処理、又は第２処理ルーチンにてイベントが発生した時に実行されるべき第２処理を実行する処理プログラムであって、コンピュータを、前記第１処理ルーチン中には、実行されるべき処理として前記第１処理を特定する第１情報を格納し、前記第２処理ルーチン中には、実行されるべき処理として前記第２処理を特定する第２情報を格納する格納制御手段と、前記格納制御手段の格納結果に基づいて、前記第１処理又は前記第２処理を実行する実行手段と、として機能させる。
【００８０】
付記２の処理プログラムは、付記１に記載の処理プログラムにおいて、前記格納制御手段は、前記第１処理を実行する命令を特定する第１基準アドレスを前記第１情報として格納し、前記第２処理を実行する命令を特定する第２基準アドレスを前記第２情報として格納する。
【００８１】
付記３の処理プログラムは、付記２に記載の処理プログラムにおいて、前記処理プログラムは、リアルタイムオペレーティングシステムのプログラムであり、前記第１処理ルーチンは、タスクであり、前記第２処理ルーチンは、割込みハンドラであり、前記第１処理及び前記第２処理は、前記リアルタイムオペレーティングシステムの実行に関する相互に異なる処理である。
【００８２】
付記４の処理プログラムは、付記３に記載の処理プログラムにおいて、前記第１処理は、前記処理プログラムで用いられるスタック領域を切り替える処理である切替処理を含む処理であり、前記第２処理は、前記切替処理を含まない処理である。
【００８３】
付記５の処理プログラムは、付記３に記載の処理プログラムにおいて、前記第１処理及び前記第２処理は、システムコールが実行された場合に実行される相互に異なる処理である。
【００８４】
付記６の処理システムは、第１処理ルーチンにてイベントが発生した時に実行されるべき第１処理、又は第２処理ルーチンにてイベントが発生した時に実行されるべき第２処理を実行する処理システムであって、前記第１処理ルーチン中には、実行されるべき処理として前記第１処理を特定する第１情報を格納し、前記第２処理ルーチン中には、実行されるべき処理として前記第２処理を格納する格納制御手段と、前記格納制御手段の格納結果に基づいて、前記第１処理又は前記第２処理を実行する実行手段と、を備える。
【００８５】
（付記の効果）
付記１に記載の処理プログラムによれば、格納制御手段の格納結果に基づいて第１処理又は第２処理を実行することにより、例えば、第１処理ルーチンにて呼び出されたか、あるいは、第２処理ルーチンにて呼び出されたかを判定する必要がないので、処理時間を短縮することが可能となる。
【００８６】
付記２に記載の処理プログラムによれば、第１基準アドレス又は第２基準アドレスを格納することにより、例えば、第１処理又は第２処理を実行するためのプログラムに迅速にアクセスすることができるので、処理時間を確実に短縮することが可能となる。
【００８７】
付記３に記載の処理プログラムによれば、第１処理及び第２処理は、リアルタイムオペレーティングシステムの実行に関する相互に異なる処理であることにより、例えば、様々なＣＰＵアーキテクチャを利用してユーザの多様なニーズにこたえることができ、利便性を向上させることが可能となる。
【００８８】
付記４に記載の処理プログラムによれば、第１処理が切替処理を含む処理であり、第２処理が切替処理を含まない処理であることにより、例えば、スタック領域を適切に切り替えて処理することができるので、スタック領域を効率的に利用することが可能となる。
【００８９】
付記５に記載の処理プログラムによれば、第１処理及び第２処理がシステムコールが実行された場合に実行される相互に異なる処理であることにより、例えば、タスク実行中にシステムコールを実行した場合の処理と、ＩＳＲ実行中にシステムコールを実行した場合の処理とを相互に異ならせることができるので、ユーザの多様なニーズにこたえることができ、利便性を向上させることが可能となる。
【００９０】
付記６に記載の処理システムによれば、格納制御手段の格納結果に基づいて第１処理又は第２処理を実行することにより、例えば、第１処理ルーチンにて呼び出されたか、あるいは、第２処理ルーチンにて呼び出されたかを判定する必要がないので、処理時間を短縮することが可能となる。
【符号の説明】
【００９１】
１  ＲＯＭ
２  ＲＡＭ
３  ＣＰＵ
２１  第１スタック領域
２２  第２スタック領域
３１  ベクタ関連特殊レジスタ
１００  マイクロコンピュータ
Ｔ１  時刻
Ｔ２  時刻
Ｔ３  時刻
Ｔ４  時刻
【図１】
2020060908.tif 000003
【図２】
2020060908.tif 000004
【図３】
2020060908.tif 000005
【図４】
2020060908.tif 000006
【図５】
2020060908.tif 000007