JPH04343148A - 組込型マルチタスクオペレーティングシステムの例外処理方法 - Google Patents
組込型マルチタスクオペレーティングシステムの例外処理方法Info
- Publication number
- JPH04343148A JPH04343148A JP3142671A JP14267191A JPH04343148A JP H04343148 A JPH04343148 A JP H04343148A JP 3142671 A JP3142671 A JP 3142671A JP 14267191 A JP14267191 A JP 14267191A JP H04343148 A JPH04343148 A JP H04343148A
- Authority
- JP
- Japan
- Prior art keywords
- task
- operating system
- user task
- identification number
- multitasking operating
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Debugging And Monitoring (AREA)
- Control By Computers (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【0001】
【産業上の利用分野】本発明は、複数のユーザタスクを
並列して処理可能な組込型マルチタスクオペレーティン
グシステムの例外処理方法に関する。
並列して処理可能な組込型マルチタスクオペレーティン
グシステムの例外処理方法に関する。
【0002】
【従来の技術】例えば、ファクシミリ装置など、マイク
ロコンピュータシステムを利用して動作制御を行なって
いる装置で、複数のタスク(処理単位)を並列的に実行
する必要がある場合、その制御システムとして、マルチ
タスクオペレーティングシステムを使用している。
ロコンピュータシステムを利用して動作制御を行なって
いる装置で、複数のタスク(処理単位)を並列的に実行
する必要がある場合、その制御システムとして、マルチ
タスクオペレーティングシステムを使用している。
【0003】このようなマルチタスクオペレーティング
システムでは、装置の制御ソフトウェアが完成するまで
、何度か制御ソフトウェアの機能検査、いわゆる、デバ
ッグ作業を行なう必要があり、その便宜のための種々の
機能を備えている。
システムでは、装置の制御ソフトウェアが完成するまで
、何度か制御ソフトウェアの機能検査、いわゆる、デバ
ッグ作業を行なう必要があり、その便宜のための種々の
機能を備えている。
【0004】例えば、ユーザタスクプログラム(以下、
単にプログラムという)の実行状況を1ステップずつ検
査できるトレース機能、プログラムを任意の時点で停止
できるブレーク機能、および、プログラムの不都合(以
下、バグという)によりシステムが暴走したときにハー
ド的にシステムを停止するウォッチドッグタイマ機能な
どである。
単にプログラムという)の実行状況を1ステップずつ検
査できるトレース機能、プログラムを任意の時点で停止
できるブレーク機能、および、プログラムの不都合(以
下、バグという)によりシステムが暴走したときにハー
ド的にシステムを停止するウォッチドッグタイマ機能な
どである。
【0005】
【発明が解決しようとする課題】しかしながら、このよ
うな従来装置では、デバッグ中にシステムが暴走したと
き、暴走を引き起こしたタスクのみならず、他のタスク
の実行状態を変化させることが有り、このような場合、
どのタスクがバグをもっているかオペレータが判断でき
ないという不都合を生じていた。
うな従来装置では、デバッグ中にシステムが暴走したと
き、暴走を引き起こしたタスクのみならず、他のタスク
の実行状態を変化させることが有り、このような場合、
どのタスクがバグをもっているかオペレータが判断でき
ないという不都合を生じていた。
【0006】また、完成した制御ソフトウェアを組込ん
だ装置を稼働中、その装置の動作環境によっては、シス
テム内部のバスにノイズが混入してバス上のデータが破
壊され、システムが暴走して制御不可能な状態になった
り、装置に組込まれている機器などを破壊するという不
都合を生じていた。
だ装置を稼働中、その装置の動作環境によっては、シス
テム内部のバスにノイズが混入してバス上のデータが破
壊され、システムが暴走して制御不可能な状態になった
り、装置に組込まれている機器などを破壊するという不
都合を生じていた。
【0007】また、システム暴走のためのウォッチドッ
グタイマなどのハード要素を設ける必要があるために、
コストが大きくなるという不都合を生じていた。
グタイマなどのハード要素を設ける必要があるために、
コストが大きくなるという不都合を生じていた。
【0008】本発明は、このような実情に鑑みてなされ
たものであり、デバッグ作業を効率よく行なえるととも
に、システム暴走時の影響を抑制でき、また、システム
暴走をソフト的に検出できるようにした組込型マルチタ
スクオペレーティングシステムの例外処理方法を提供す
ることを目的としている。
たものであり、デバッグ作業を効率よく行なえるととも
に、システム暴走時の影響を抑制でき、また、システム
暴走をソフト的に検出できるようにした組込型マルチタ
スクオペレーティングシステムの例外処理方法を提供す
ることを目的としている。
【0009】
【課題を解決するための手段】本発明は、複数のユーザ
タスクを並列して処理可能な組込型マルチタスクオペレ
ーティングシステムの例外処理方法において、不当な命
令がフェッチされたことを検出可能なマイクロプロセッ
サを用いる一方、装置機能検査時、同一ユーザタスクか
ら所定回数連続して不当命令フェッチを検出すると、そ
のユーザタスクを強制待ち状態に遷移させるとともに、
他のユーザタスクを実行するようにしたものである。
タスクを並列して処理可能な組込型マルチタスクオペレ
ーティングシステムの例外処理方法において、不当な命
令がフェッチされたことを検出可能なマイクロプロセッ
サを用いる一方、装置機能検査時、同一ユーザタスクか
ら所定回数連続して不当命令フェッチを検出すると、そ
のユーザタスクを強制待ち状態に遷移させるとともに、
他のユーザタスクを実行するようにしたものである。
【0010】また、複数のユーザタスクを並列して処理
可能な組込型マルチタスクオペレーティングシステムの
例外処理方法において、不当な命令がフェッチされたこ
とを検出可能なマイクロプロセッサを用いる一方、装置
稼働時、同一ユーザタスクから所定回数連続して不当命
令フェッチを検出すると、そのユーザタスクを強制的に
終了させるとともに、他のユーザタスクを実行するよう
にしたものである。
可能な組込型マルチタスクオペレーティングシステムの
例外処理方法において、不当な命令がフェッチされたこ
とを検出可能なマイクロプロセッサを用いる一方、装置
稼働時、同一ユーザタスクから所定回数連続して不当命
令フェッチを検出すると、そのユーザタスクを強制的に
終了させるとともに、他のユーザタスクを実行するよう
にしたものである。
【0011】また、複数のユーザタスクを並列して処理
可能な組込型マルチタスクオペレーティングシステムの
例外処理方法において、複数のユーザタスクで使用され
る1つ以上の汎用プログラムモジュールに固有の識別番
号を設定する一方、ユーザタスクは、汎用プログラムモ
ジュールをサブルーチンコールするとき、その汎用プロ
グラムモジュールに対応した識別番号を共通ワークエリ
アの所定アドレスに保存し、汎用プログラムモジュール
は、サブルーチンコールされたユーザタスクにリターン
するとき、所定アドレスに保存されている識別番号を読
み出して、その識別番号が設定されている識別番号に一
致しているかどうかを判定し、識別番号の不一致が検出
されたときには、異常発生状態と判定するようにしたも
のである。
可能な組込型マルチタスクオペレーティングシステムの
例外処理方法において、複数のユーザタスクで使用され
る1つ以上の汎用プログラムモジュールに固有の識別番
号を設定する一方、ユーザタスクは、汎用プログラムモ
ジュールをサブルーチンコールするとき、その汎用プロ
グラムモジュールに対応した識別番号を共通ワークエリ
アの所定アドレスに保存し、汎用プログラムモジュール
は、サブルーチンコールされたユーザタスクにリターン
するとき、所定アドレスに保存されている識別番号を読
み出して、その識別番号が設定されている識別番号に一
致しているかどうかを判定し、識別番号の不一致が検出
されたときには、異常発生状態と判定するようにしたも
のである。
【0012】
【作用】したがって、装置機能検査時、システム暴走し
たときの原因となったユーザタスクが強制待ち状態に遷
移させるので、そのシステム暴走の影響が他のユーザタ
スクに影響を及ぼすことが防止され、装置機能検査を効
率よく行なうことができる。また、装置稼働時、システ
ム暴走したときの原因となったユーザタスクが強制終了
されるので、そのシステム暴走の影響が他のユーザタス
クに影響を及ぼすことが防止される。また、システム異
常発生状態をソフト的に判定することができるので、シ
ステム暴走を監視するためのウォッチドッグタイマなど
のハード要素を設ける必要がなくなり、システムコスト
を低減することができる。
たときの原因となったユーザタスクが強制待ち状態に遷
移させるので、そのシステム暴走の影響が他のユーザタ
スクに影響を及ぼすことが防止され、装置機能検査を効
率よく行なうことができる。また、装置稼働時、システ
ム暴走したときの原因となったユーザタスクが強制終了
されるので、そのシステム暴走の影響が他のユーザタス
クに影響を及ぼすことが防止される。また、システム異
常発生状態をソフト的に判定することができるので、シ
ステム暴走を監視するためのウォッチドッグタイマなど
のハード要素を設ける必要がなくなり、システムコスト
を低減することができる。
【0013】
【実施例】以下、添付図面を参照しながら、本発明の実
施例を詳細に説明する。
施例を詳細に説明する。
【0014】図1は、本発明の一実施例にかかる装置モ
デルを示している。
デルを示している。
【0015】同図において、CPU(中央処理装置)1
は、この装置の動作制御を行なうものであり、ROM(
リード・オンリ・メモリ)2は、CPU1が実行する処
理プログラムおよびその処理プログラムを実行するため
に必要な種々のデータを記憶するものであり、RAM(
ランダム・アクセス・メモリ)3は、CPU1が実行す
る処理プログラムのワークエリアなどをなすものである
。また、CPU1は、不当な命令がフェッチされたこと
を検出する不当命令検出機能を備えている。
は、この装置の動作制御を行なうものであり、ROM(
リード・オンリ・メモリ)2は、CPU1が実行する処
理プログラムおよびその処理プログラムを実行するため
に必要な種々のデータを記憶するものであり、RAM(
ランダム・アクセス・メモリ)3は、CPU1が実行す
る処理プログラムのワークエリアなどをなすものである
。また、CPU1は、不当な命令がフェッチされたこと
を検出する不当命令検出機能を備えている。
【0016】I/Oポート4は、周辺装置5,6とCP
U1を接続するためのものであり、周辺装置5,6は、
それぞれこの装置の機能を実現するためのものである。 例えば、ファクシミリ装置の場合、画像を読み取るため
のスキャナおよび画像を記録出力するためのプロッタな
どがこの周辺装置5,6に相当する。
U1を接続するためのものであり、周辺装置5,6は、
それぞれこの装置の機能を実現するためのものである。 例えば、ファクシミリ装置の場合、画像を読み取るため
のスキャナおよび画像を記録出力するためのプロッタな
どがこの周辺装置5,6に相当する。
【0017】これらのCPU1、ROM2、RAM3、
I/Oポート4は、内部バス7に接続されており、これ
らの各要素間のデータのやりとりは、この内部バス7を
介して行われる。
I/Oポート4は、内部バス7に接続されており、これ
らの各要素間のデータのやりとりは、この内部バス7を
介して行われる。
【0018】この装置モデルでは、図2に示すように、
システムが階層化されている。
システムが階層化されている。
【0019】同図において、システム資源は、CPU1
、RAM3のワークエリア、および、周辺装置5,6な
どをあらわし、ユーザタスクは、この装置の処理機能を
実現するソフトウェアの処理単位をあらわし、マルチタ
スクオペレーティングシステム(以下、M_OSという
)は、ユーザタスクの実行を効率よく処理するためのシ
ステムソフトウェアをあらわす。
、RAM3のワークエリア、および、周辺装置5,6な
どをあらわし、ユーザタスクは、この装置の処理機能を
実現するソフトウェアの処理単位をあらわし、マルチタ
スクオペレーティングシステム(以下、M_OSという
)は、ユーザタスクの実行を効率よく処理するためのシ
ステムソフトウェアをあらわす。
【0020】このM_OSは、複数のユーザタスクを並
列的に実行する機能を備えており、本実施例では、ユー
ザタスクからの処理の実行要求は、システムコールとい
う所定の形式のデータを発行するという形態で行なわれ
る。また、このシステムコールの発行は、所定のレジス
タに実行要求する処理機能をあらわす機能コードをセッ
トした状態で、ソフトウェア割り込みを発行することで
行なわれる。また、処理機能には、複数のユーザタスク
で共通に使用される汎用サブルーチンモジュールを含む
。
列的に実行する機能を備えており、本実施例では、ユー
ザタスクからの処理の実行要求は、システムコールとい
う所定の形式のデータを発行するという形態で行なわれ
る。また、このシステムコールの発行は、所定のレジス
タに実行要求する処理機能をあらわす機能コードをセッ
トした状態で、ソフトウェア割り込みを発行することで
行なわれる。また、処理機能には、複数のユーザタスク
で共通に使用される汎用サブルーチンモジュールを含む
。
【0021】また、この装置モデルでは、図3(a)に
示すように、M_OSのプログラムが配置されるM_O
S領域、ユーザタスクのプログラムが配置されるユーザ
タスク領域、ワーク領域、および、データテーブル領域
に、CPU1のメモリ空間が分割されている。
示すように、M_OSのプログラムが配置されるM_O
S領域、ユーザタスクのプログラムが配置されるユーザ
タスク領域、ワーク領域、および、データテーブル領域
に、CPU1のメモリ空間が分割されている。
【0022】ここで、ユーザタスク領域には、同図(b
)に示すように、複数のタスクが記憶されている。
)に示すように、複数のタスクが記憶されている。
【0023】さて、通常、CPU1が実行するプログラ
ムコードの1ステップは、命令コードと、この命令コー
ドの実行対象となる資源(メモリあるいはレジスタなど
)を指定するオペランドコードから構成されており、な
んらかの理由でCPU1が暴走状態になったとき、オペ
ランドコードを命令コードと間違えてフェッチしたり、
あるいは、次のステップの命令コードをオペランドコー
ドとして間違えてフェッチするような事態を生じる。
ムコードの1ステップは、命令コードと、この命令コー
ドの実行対象となる資源(メモリあるいはレジスタなど
)を指定するオペランドコードから構成されており、な
んらかの理由でCPU1が暴走状態になったとき、オペ
ランドコードを命令コードと間違えてフェッチしたり、
あるいは、次のステップの命令コードをオペランドコー
ドとして間違えてフェッチするような事態を生じる。
【0024】このような事態、すなわち、不当命令フェ
ッチ現象が発生すると、CPU1は不当命令割込状態と
なり、所定の処理を実行する。
ッチ現象が発生すると、CPU1は不当命令割込状態と
なり、所定の処理を実行する。
【0025】図4は、この装置モデルのソフトウェアを
デバッグするときに、CPU1が実行する不当命令割込
処理の一例を示している。この不当命令割込処理は、M
_OSが実行する処理の1つである。
デバッグするときに、CPU1が実行する不当命令割込
処理の一例を示している。この不当命令割込処理は、M
_OSが実行する処理の1つである。
【0026】まず、不当命令割込状態になると、M_O
Sは、その時点で実行中のタスクを待機状態(WAIT
状態)に遷移させるとともにそのときのCPU1のレジ
スタの内容を所定の領域に退避し(処理101)、不当
命令割込状態を検出したタスクを記憶するための変数T
_TCBが、そのときに実行しているタスクの識別情報
C_TCBに等しいかどうかを調べる(判断102)。
Sは、その時点で実行中のタスクを待機状態(WAIT
状態)に遷移させるとともにそのときのCPU1のレジ
スタの内容を所定の領域に退避し(処理101)、不当
命令割込状態を検出したタスクを記憶するための変数T
_TCBが、そのときに実行しているタスクの識別情報
C_TCBに等しいかどうかを調べる(判断102)。
【0027】判断102の結果がYESになるときには
、同一タスクについて不当命令割込状態を連続して検出
した回数を記憶するためのカウンタT_CNTをデクリ
メントし(処理103)、カウンタT_CNTの値が0
に等しいかどうかを調べる(判断104)。
、同一タスクについて不当命令割込状態を連続して検出
した回数を記憶するためのカウンタT_CNTをデクリ
メントし(処理103)、カウンタT_CNTの値が0
に等しいかどうかを調べる(判断104)。
【0028】判断104の結果がYESになるときには
、同一タスクが不正なシステムコールをN(所定値)回
連続して発行した場合であり、そのタスクが異常な状態
なので、所定の例外処理ルーチン(図示略)を実行し(
処理105)、実行中のタスクを強制待ち状態(SUS
PEND状態)に遷移させて(処理106)、変数T_
TCBに所定値NULLをセットするとともに、カウン
タT_CNTに所定値Nをセットする(処理107)。
、同一タスクが不正なシステムコールをN(所定値)回
連続して発行した場合であり、そのタスクが異常な状態
なので、所定の例外処理ルーチン(図示略)を実行し(
処理105)、実行中のタスクを強制待ち状態(SUS
PEND状態)に遷移させて(処理106)、変数T_
TCBに所定値NULLをセットするとともに、カウン
タT_CNTに所定値Nをセットする(処理107)。
【0029】次いで、実行可能な状態(READY状態
)に登録されている複数のタスクの中から、所定の実行
スケジュールにしたがって次に実行するタスクを選択し
(処理108)、その選択したタスクを実行するために
レジスタの内容を選択タスクに対応した内容に更新して
(処理109)、そのタスクを実行する状態に遷移する
。
)に登録されている複数のタスクの中から、所定の実行
スケジュールにしたがって次に実行するタスクを選択し
(処理108)、その選択したタスクを実行するために
レジスタの内容を選択タスクに対応した内容に更新して
(処理109)、そのタスクを実行する状態に遷移する
。
【0030】また、判断104の結果がNOになるとき
には、処理108に移行し、次に実行すべきタスクの実
行状態に移行する。
には、処理108に移行し、次に実行すべきタスクの実
行状態に移行する。
【0031】また、判断102の結果がNOになるとき
には、変数T_TCBに識別情報C_TCBの内容をセ
ットし(処理110)、カウンタT_CNTに所定値N
をセットして(処理111)、この所定値Nが0に等し
いかどうかを判断する(判断112)。
には、変数T_TCBに識別情報C_TCBの内容をセ
ットし(処理110)、カウンタT_CNTに所定値N
をセットして(処理111)、この所定値Nが0に等し
いかどうかを判断する(判断112)。
【0032】判断112の結果がYESになるときには
、処理105に移行して、例外処理状態に移行し、また
、判断112の結果がNOになるときには、処理108
に移行して、次に実行すべきタスクの実行状態に移行す
る。
、処理105に移行して、例外処理状態に移行し、また
、判断112の結果がNOになるときには、処理108
に移行して、次に実行すべきタスクの実行状態に移行す
る。
【0033】このようにして、本実施例では、デバッグ
作業時に同一タスクを実行中に、不当命令割込状態が連
続してN回検出されたとき、その実行中のタスクが異常
であると判定し、そのタスクを異常状態のままSUSP
END状態に遷移させているので、このタスクの異常が
原因となって他のタスクの実行状態まで異常になるよう
な事態を防止できる。
作業時に同一タスクを実行中に、不当命令割込状態が連
続してN回検出されたとき、その実行中のタスクが異常
であると判定し、そのタスクを異常状態のままSUSP
END状態に遷移させているので、このタスクの異常が
原因となって他のタスクの実行状態まで異常になるよう
な事態を防止できる。
【0034】また、適当なタイミングでブレークさせる
と、その異常状態のままSUSPEND状態に遷移させ
たタスクを適切にトレースすることができ、したがって
、効率的なデバッグ作業を行なうことができる。
と、その異常状態のままSUSPEND状態に遷移させ
たタスクを適切にトレースすることができ、したがって
、効率的なデバッグ作業を行なうことができる。
【0035】また、この装置モデルのソフトウェアのデ
バッグが完了して、この装置モデルを実際に稼働すると
きに、CPU1が実行する不当命令割込処理の一例を図
5に示す。この不当命令割込処理は、M_OSが実行す
る処理の1つである。
バッグが完了して、この装置モデルを実際に稼働すると
きに、CPU1が実行する不当命令割込処理の一例を図
5に示す。この不当命令割込処理は、M_OSが実行す
る処理の1つである。
【0036】まず、不当命令割込状態になると、M_O
Sは、その時点で実行中のタスクを待機状態(WAIT
状態)に遷移させるとともにそのときのCPU1のレジ
スタの内容を所定の領域に退避し(処理201)、不当
命令割込状態を検出したタスクを記憶するための変数T
_TCBが、そのときに実行しているタスクの識別情報
C_TCBに等しいかどうかを調べる(判断202)。
Sは、その時点で実行中のタスクを待機状態(WAIT
状態)に遷移させるとともにそのときのCPU1のレジ
スタの内容を所定の領域に退避し(処理201)、不当
命令割込状態を検出したタスクを記憶するための変数T
_TCBが、そのときに実行しているタスクの識別情報
C_TCBに等しいかどうかを調べる(判断202)。
【0037】判断202の結果がYESになるときには
、同一タスクについて不当命令割込状態を連続して検出
した回数を記憶するためのカウンタT_CNTをデクリ
メントし(処理203)、カウンタT_CNTの値が0
に等しいかどうかを調べる(判断204)。
、同一タスクについて不当命令割込状態を連続して検出
した回数を記憶するためのカウンタT_CNTをデクリ
メントし(処理203)、カウンタT_CNTの値が0
に等しいかどうかを調べる(判断204)。
【0038】判断204の結果がYESになるときには
、同一タスクが不正なシステムコールをN(所定値)回
連続して発行した場合であり、そのタスクが異常な状態
なので、所定の例外処理ルーチン(図示略)を実行し(
処理205)、実行中のタスクに対応した終了ルーチン
を実行してそのタスクが使用しているシステム資源を全
て解放させ(処理206)、変数T_TCBに所定値N
ULLをセットするとともに、カウンタT_CNTに所
定値Nをセットする(処理207)。
、同一タスクが不正なシステムコールをN(所定値)回
連続して発行した場合であり、そのタスクが異常な状態
なので、所定の例外処理ルーチン(図示略)を実行し(
処理205)、実行中のタスクに対応した終了ルーチン
を実行してそのタスクが使用しているシステム資源を全
て解放させ(処理206)、変数T_TCBに所定値N
ULLをセットするとともに、カウンタT_CNTに所
定値Nをセットする(処理207)。
【0039】次いで、実行可能な状態(READY状態
)に登録されている複数のタスクの中から、所定の実行
スケジュールにしたがって次に実行するタスクを選択し
(処理208)、その選択したタスクを実行するために
レジスタの内容を選択タスクに対応した内容に更新して
(処理209)、そのタスクを実行する状態に遷移する
。
)に登録されている複数のタスクの中から、所定の実行
スケジュールにしたがって次に実行するタスクを選択し
(処理208)、その選択したタスクを実行するために
レジスタの内容を選択タスクに対応した内容に更新して
(処理209)、そのタスクを実行する状態に遷移する
。
【0040】また、判断204の結果がNOになるとき
には、処理208に移行し、次に実行すべきタスクの実
行状態に移行する。
には、処理208に移行し、次に実行すべきタスクの実
行状態に移行する。
【0041】また、判断202の結果がNOになるとき
には、変数T_TCBに識別情報C_TCBの内容をセ
ットし(処理210)、カウンタT_CNTに所定値N
をセットして(処理211)、この所定値Nが0に等し
いかどうかを判断する(判断212)。
には、変数T_TCBに識別情報C_TCBの内容をセ
ットし(処理210)、カウンタT_CNTに所定値N
をセットして(処理211)、この所定値Nが0に等し
いかどうかを判断する(判断212)。
【0042】判断212の結果がYESになるときには
、処理205に移行して、例外処理状態に移行し、また
、判断212の結果がNOになるときには、処理208
に移行して、次に実行すべきタスクの実行状態に移行す
る。
、処理205に移行して、例外処理状態に移行し、また
、判断212の結果がNOになるときには、処理208
に移行して、次に実行すべきタスクの実行状態に移行す
る。
【0043】このようにして、本実施例では、装置稼働
時に同一タスクを実行中に、不当命令割込状態が連続し
てN回検出されたとき、その実行中のタスクが異常であ
ると判定し、そのタスクを強制的に終了させているので
、このユーザタスクの異常が原因となって他のタスクの
実行状態まで異常になるような事態を防止できる。
時に同一タスクを実行中に、不当命令割込状態が連続し
てN回検出されたとき、その実行中のタスクが異常であ
ると判定し、そのタスクを強制的に終了させているので
、このユーザタスクの異常が原因となって他のタスクの
実行状態まで異常になるような事態を防止できる。
【0044】また、そのときに、異常なタスクに対応し
た終了ルーチンを実行させて、そのタスクが使用してい
たシステム資源を解放するとともに、そのタスクが他の
タスク(以下、子タスクという)を起床したり、生成し
た場合には、その子タスクを消滅させて、ワークエリア
を解放させるようにしている。
た終了ルーチンを実行させて、そのタスクが使用してい
たシステム資源を解放するとともに、そのタスクが他の
タスク(以下、子タスクという)を起床したり、生成し
た場合には、その子タスクを消滅させて、ワークエリア
を解放させるようにしている。
【0045】ところで、CPU1の動作が暴走状態にな
ったことをソフト的に検出するには、例えば、次のよう
にすればよい。なお、この動作は、M_OSにより実行
されるものであり、この場合、ユーザタスクが汎用のサ
ブルーチンモジュールを呼び出す、いわゆる、サブルー
チンコールを行なう前後で、CPU1の暴走状態を検出
している。
ったことをソフト的に検出するには、例えば、次のよう
にすればよい。なお、この動作は、M_OSにより実行
されるものであり、この場合、ユーザタスクが汎用のサ
ブルーチンモジュールを呼び出す、いわゆる、サブルー
チンコールを行なう前後で、CPU1の暴走状態を検出
している。
【0046】まず、ユーザタスクがサブルーチンコール
を行なう場合、呼び出すサブルーチンモジュールにそれ
ぞれ割り当てられている識別番号、例えば、01H(H
は16進数をあらわす;以下同じ)を共通スタックにプ
ッシュする(図6(a),(b)参照)。
を行なう場合、呼び出すサブルーチンモジュールにそれ
ぞれ割り当てられている識別番号、例えば、01H(H
は16進数をあらわす;以下同じ)を共通スタックにプ
ッシュする(図6(a),(b)参照)。
【0047】そして、M_OSは、サブルーチンモジュ
ールが終了したあとにサブルーチンコールを発行したユ
ーザタスクに戻るための戻りアドレス(この場合、2バ
イト)を共通スタックにプッシュ(保存)して(図6(
c)参照)、実行要求されたサブルーチンモジュールを
実行する。この実行中の状態では、サブルーチンモジュ
ールに必要なワークエリアが共通スタックに確保される
(図6(d)参照)。
ールが終了したあとにサブルーチンコールを発行したユ
ーザタスクに戻るための戻りアドレス(この場合、2バ
イト)を共通スタックにプッシュ(保存)して(図6(
c)参照)、実行要求されたサブルーチンモジュールを
実行する。この実行中の状態では、サブルーチンモジュ
ールに必要なワークエリアが共通スタックに確保される
(図6(d)参照)。
【0048】サブルーチンモジュールの実行が終了する
と、M_OSは、そのときのスタックポインタSPに2
を加えた共通スタックのスタックアドレス領域位置に記
憶されている識別番号(この場合は、01H)を取り出
して、そのときに実行終了したサブルーチンモジュール
に設定されている識別番号の値と比較する(図6(e)
参照)。
と、M_OSは、そのときのスタックポインタSPに2
を加えた共通スタックのスタックアドレス領域位置に記
憶されている識別番号(この場合は、01H)を取り出
して、そのときに実行終了したサブルーチンモジュール
に設定されている識別番号の値と比較する(図6(e)
参照)。
【0049】このとき、両者が等しければ、このサブル
ーチンモジュールの実行中にシステムが暴走状態になっ
ていないと判定することができ、その場合には、再度、
サブルーチンコールが発行されたときに対処できるよう
に、識別番号を記憶した共通スタック領域にデータ0を
セットする(図6(f)参照)。
ーチンモジュールの実行中にシステムが暴走状態になっ
ていないと判定することができ、その場合には、再度、
サブルーチンコールが発行されたときに対処できるよう
に、識別番号を記憶した共通スタック領域にデータ0を
セットする(図6(f)参照)。
【0050】また、共通スタック領域に記憶されている
識別番号の値と、サブルーチンモジュールに設定されて
いる識別番号が不一致の場合には、システムが暴走状態
になっていると判定することができ、所定の例外処理、
例えば、システムリセット処理などを実行する。
識別番号の値と、サブルーチンモジュールに設定されて
いる識別番号が不一致の場合には、システムが暴走状態
になっていると判定することができ、所定の例外処理、
例えば、システムリセット処理などを実行する。
【0051】このようにして、ユーザタスクがサブルー
チンコールを行なうたびに、システムが暴走状態である
か否かの判定動作が行われるので、システム暴走を検出
するためのウォッチドッグタイマなどの特別なハード的
機構が不要となる。
チンコールを行なうたびに、システムが暴走状態である
か否かの判定動作が行われるので、システム暴走を検出
するためのウォッチドッグタイマなどの特別なハード的
機構が不要となる。
【0052】通常、システム暴走状態になったときには
、暴走してから最初に検出したサブルーチンからのリタ
ーン命令により、そのサブルーチンコールを発行したタ
スクとは全く関係のないタスクを起動したり、あるいは
、内部バス7に乗ったノイズにより、サブルーチンの実
行状態に制御が移行した場合などの事態が生じる。
、暴走してから最初に検出したサブルーチンからのリタ
ーン命令により、そのサブルーチンコールを発行したタ
スクとは全く関係のないタスクを起動したり、あるいは
、内部バス7に乗ったノイズにより、サブルーチンの実
行状態に制御が移行した場合などの事態が生じる。
【0053】したがって、上述したように、サブルーチ
ンコールの前後でそのサブルーチンに対応した識別番号
の検査処理を行なうようにすることで、システム暴走状
態を適切に検出することができる。
ンコールの前後でそのサブルーチンに対応した識別番号
の検査処理を行なうようにすることで、システム暴走状
態を適切に検出することができる。
【0054】図6は、ユーザタスクからサブルーチンコ
ールが発行されたときの処理例を示している。
ールが発行されたときの処理例を示している。
【0055】まず、発行されたサブルーチンコールによ
り実行要求されたサブルーチンモジュールに設定されて
いる識別番号を、共通スタックにプッシュし(処理30
1)、その実行要求されたサブルーチンモジュールを実
行する(処理302)。
り実行要求されたサブルーチンモジュールに設定されて
いる識別番号を、共通スタックにプッシュし(処理30
1)、その実行要求されたサブルーチンモジュールを実
行する(処理302)。
【0056】このサブルーチンモジュールの実行を終了
すると、共通スタックの先頭領域を示しているスタック
ポインタSPの値を1つ増やすことで、共通スタックに
プッシュした識別番号の次の領域にスタックポインタS
Pの値を移動し(処理303)、次の処理に移行する。
すると、共通スタックの先頭領域を示しているスタック
ポインタSPの値を1つ増やすことで、共通スタックに
プッシュした識別番号の次の領域にスタックポインタS
Pの値を移動し(処理303)、次の処理に移行する。
【0057】図7は、サブルーチンコール時の処理例を
示している。
示している。
【0058】まず、実行要求されたサブルーチンモジュ
ールを実行し(処理401)、その処理を終了すると、
そのときのスタックポインタSPの値は、戻りアドレス
の先頭のスタックアドレスを示しているので、スタック
ポインタSPの値に2を加えたスタックアドレスに記憶
されている識別番号を取り出す(処理402)。
ールを実行し(処理401)、その処理を終了すると、
そのときのスタックポインタSPの値は、戻りアドレス
の先頭のスタックアドレスを示しているので、スタック
ポインタSPの値に2を加えたスタックアドレスに記憶
されている識別番号を取り出す(処理402)。
【0059】そして、そのときに実行終了したサブルー
チンモジュールに設定されている識別番号と、その取り
出した識別番号が一致するかどうかを調べ(判断403
)、判断403の結果がYESになるときには、その識
別番号を記憶していたスタック領域にデータ0をセット
して(処理404)、サブルーチンコールしたユーザタ
スクにリターンする。
チンモジュールに設定されている識別番号と、その取り
出した識別番号が一致するかどうかを調べ(判断403
)、判断403の結果がYESになるときには、その識
別番号を記憶していたスタック領域にデータ0をセット
して(処理404)、サブルーチンコールしたユーザタ
スクにリターンする。
【0060】また、判断403の結果がNOになるとき
には、システム暴走状態が発生したと判定し、所定の例
外処理を実行し(処理405)、エラー終了する。
には、システム暴走状態が発生したと判定し、所定の例
外処理を実行し(処理405)、エラー終了する。
【0061】なお、上述した実施例では、サブルーチン
コールを発行したときに、そのサブルーチンに対応する
識別番号をスタック領域に直接記録するようにしている
が、この識別番号の記録は、レジスタを介して行なうこ
ともできる。
コールを発行したときに、そのサブルーチンに対応する
識別番号をスタック領域に直接記録するようにしている
が、この識別番号の記録は、レジスタを介して行なうこ
ともできる。
【0062】
【発明の効果】以上説明したように、本発明によれば、
装置機能検査時、システム暴走したときの原因となった
ユーザタスクが強制待ち状態に遷移させるので、そのシ
ステム暴走の影響が他のユーザタスクに影響を及ぼすこ
とが防止され、装置機能検査を効率よく行なうことがで
きる。また、装置稼働時、システム暴走したときの原因
となったユーザタスクが強制終了されるので、そのシス
テム暴走の影響が他のユーザタスクに影響を及ぼすこと
が防止される。また、システム暴走をソフト的に検出で
きるので、かかる事態を検出するためのハード的要素が
不要となり、システムコストを低減することができると
いう効果を得る。
装置機能検査時、システム暴走したときの原因となった
ユーザタスクが強制待ち状態に遷移させるので、そのシ
ステム暴走の影響が他のユーザタスクに影響を及ぼすこ
とが防止され、装置機能検査を効率よく行なうことがで
きる。また、装置稼働時、システム暴走したときの原因
となったユーザタスクが強制終了されるので、そのシス
テム暴走の影響が他のユーザタスクに影響を及ぼすこと
が防止される。また、システム暴走をソフト的に検出で
きるので、かかる事態を検出するためのハード的要素が
不要となり、システムコストを低減することができると
いう効果を得る。
【図1】本発明の一実施例にかかる装置モデルを示すブ
ロック図。
ロック図。
【図2】図1の装置モデルのシステム構成の概略を示す
概略図。
概略図。
【図3】図1の装置モデルのメモリ空間の分割態様を例
示した概略図。
示した概略図。
【図4】図1の装置モデルのソフトウェアをデバッグす
るときに不当命令割込状態が検出されたときときにM_
OSが実行する処理例を示すフローチャート。
るときに不当命令割込状態が検出されたときときにM_
OSが実行する処理例を示すフローチャート。
【図5】図1の装置モデルの稼働時に不当命令割込状態
が検出されたときにM_OSが実行する処理例を示すフ
ローチャート。
が検出されたときにM_OSが実行する処理例を示すフ
ローチャート。
【図6】ソフト的にシステム暴走を検出する動作を説明
するための概略図。
するための概略図。
【図7】図6の動作を実現するための処理例を示すフロ
ーチャート。
ーチャート。
【図8】図6の動作を実現するための他の処理例を示す
フローチャート。
フローチャート。
1 CPU(中央処理装置)
Claims (3)
- 【請求項1】 複数のユーザタスクを並列して処理可
能な組込型マルチタスクオペレーティングシステムの例
外処理方法において、不当な命令がフェッチされたこと
を検出可能なマイクロプロセッサを用いる一方、装置機
能検査時、同一ユーザタスクから所定回数連続して不当
命令フェッチを検出すると、そのユーザタスクを強制待
ち状態に遷移させるとともに、他のユーザタスクを実行
することを特徴とする組込型マルチタスクオペレーティ
ングシステムの例外処理方法。 - 【請求項2】 複数のユーザタスクを並列して処理可
能な組込型マルチタスクオペレーティングシステムの例
外処理方法において、不当な命令がフェッチされたこと
を検出可能なマイクロプロセッサを用いる一方、装置稼
働時、同一ユーザタスクから所定回数連続して不当命令
フェッチを検出すると、そのユーザタスクを強制的に終
了させるとともに、他のユーザタスクを実行することを
特徴とする組込型マルチタスクオペレーティングシステ
ムの例外処理方法。 - 【請求項3】 複数のユーザタスクを並列して処理可
能な組込型マルチタスクオペレーティングシステムの例
外処理方法において、複数のユーザタスクで使用される
1つ以上の汎用プログラムモジュールに固有の識別番号
を設定する一方、ユーザタスクは、汎用プログラムモジ
ュールをサブルーチンコールするとき、その汎用プログ
ラムモジュールに対応した識別番号を共通ワークエリア
の所定アドレスに保存し、汎用プログラムモジュールは
、サブルーチンコールされたユーザタスクにリターンす
るとき、上記所定アドレスに保存されている識別番号を
読み出して、その識別番号が設定されている識別番号に
一致しているかどうかを判定し、識別番号の不一致が検
出されたときには、異常発生状態と判定することを特徴
とする組込型マルチタスクオペレーティングシステムの
例外処理方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP03142671A JP3124788B2 (ja) | 1991-05-20 | 1991-05-20 | 組込型マルチタスクオペレーティングシステムの例外処理方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP03142671A JP3124788B2 (ja) | 1991-05-20 | 1991-05-20 | 組込型マルチタスクオペレーティングシステムの例外処理方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH04343148A true JPH04343148A (ja) | 1992-11-30 |
| JP3124788B2 JP3124788B2 (ja) | 2001-01-15 |
Family
ID=15320798
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP03142671A Expired - Fee Related JP3124788B2 (ja) | 1991-05-20 | 1991-05-20 | 組込型マルチタスクオペレーティングシステムの例外処理方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP3124788B2 (ja) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2014035741A (ja) * | 2012-08-10 | 2014-02-24 | Denso Corp | 電子制御装置 |
| WO2025262808A1 (ja) * | 2024-06-18 | 2025-12-26 | Ntt株式会社 | 異常検知装置およびプログラム |
-
1991
- 1991-05-20 JP JP03142671A patent/JP3124788B2/ja not_active Expired - Fee Related
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2014035741A (ja) * | 2012-08-10 | 2014-02-24 | Denso Corp | 電子制御装置 |
| WO2025262808A1 (ja) * | 2024-06-18 | 2025-12-26 | Ntt株式会社 | 異常検知装置およびプログラム |
Also Published As
| Publication number | Publication date |
|---|---|
| JP3124788B2 (ja) | 2001-01-15 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| EP2645254A1 (en) | Processor, electronic control device, creation program | |
| US20190034259A1 (en) | Systems and Methods for Implementing a Thread Trace Log | |
| EP1125199B1 (en) | Method of debugging a program thread | |
| EP1967950A2 (en) | Multiprocessor system for continuing program execution upon detection of abnormality | |
| EP0644488A2 (en) | Detection of spurious interrupts in a data processing system | |
| JPH04343148A (ja) | 組込型マルチタスクオペレーティングシステムの例外処理方法 | |
| CN117591322A (zh) | 一种异常处理方法、装置、电子设备及存储介质 | |
| JPH04266141A (ja) | スタックオーバーフロー検出方式 | |
| CN113535249A (zh) | 数据处理方法、装置、设备、存储介质及程序产品 | |
| JPH04229331A (ja) | 組込型マルチタスクオペレーティングシステムの例外処理方法 | |
| JP2967741B2 (ja) | Cpu互換性テスト装置 | |
| JP2735523B2 (ja) | プロシージャ・ステップ処理方法 | |
| JP2880658B2 (ja) | マルチタスクプログラムの暴走検出装置 | |
| JPS6118045A (ja) | プログラムの暴走検出方式 | |
| JPH03218539A (ja) | 並列計算機システムにおけるデバッグ方法 | |
| JP2002251299A (ja) | プログラムトレース装置 | |
| JPH0665941U (ja) | プログラム動作装置 | |
| JPH07210421A (ja) | スレッド環境におけるデバッグ方法 | |
| JPH0477826A (ja) | マイクロプロセツサ | |
| JPH0149975B2 (ja) | ||
| JPH0454648A (ja) | ソフトウエア開発装置 | |
| JPH0333939A (ja) | マイクロプロセッサ | |
| JPH01175052A (ja) | マイクロアドレスレジスタ機構 | |
| JPH0635760A (ja) | トレース機能付バッファ装置 | |
| JPH05143388A (ja) | 並列処理プログラムのサスペンド方式 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| LAPS | Cancellation because of no payment of annual fees |