(57)【特許請求の範囲】
【請求項１】
並行して動作する複数のタスクと、これらのタスクによって出力される処理要求を調停し、処理要求を許可したタスクに対して許可信号を出力する調停制御部とを備え、前記許可信号が与えられたタスクがリソースにアクセスを行うマルチタスクシステムにおいて、
前記複数のタスクは、夫々に設定されているポーリング周期毎に処理要求を出力すると共に、それぞれのポーリング周期が基準周期の整数倍に設定されており、
前記調停制御部に対して処理要求を出力した時点から、前記許可信号が与えられるまでの待機時間を計測する待機時間タイマを備え、
前記待機時間タイマにより前記待機時間が計測されると、次回に自身のポーリング周期を開始させるタイミングを、前記待機時間の分だけ遅延させることを特徴とするマルチタスクシステム。
【請求項２】
並行して動作する複数のタスクと、これらのタスクによって出力される処理要求を調停し、処理要求を許可したタスクに対して許可信号を出力する調停制御部とを備え、前記許可信号が与えられたタスクがリソースにアクセスを行うマルチタスクシステムにおいて、
前記複数のタスクは、夫々に設定されているポーリング周期毎に処理要求を出力し、
前記調停制御部に対して処理要求を出力した時点から、前記許可信号が与えられるまでの待機時間を計測する待機時間タイマを備え、
自身以外のタスクの実行状態がモニタ可能であり、
前記待機時間タイマにより前記待機時間が計測されている間に実行中である他のタスクのポーリング周期が、自身のポーリング周期以下であれば、次回に自身のポーリング周期を開始させるタイミングを、前記待機時間タイマにより計測された待機時間の分だけ遅延させることを特徴とするマルチタスクシステム。
【請求項３】
並行して動作する複数のタスクと、これらのタスクによって出力される処理要求を調停し、処理要求を許可したタスクに対して許可信号を出力する調停制御部とを備え、前記許可信号が与えられたタスクがリソースにアクセスを行うマルチタスクシステムにおいて、
前記複数のタスクは、夫々に設定されているポーリング周期毎に処理要求を出力し、
自身以外のタスクの実行状態がモニタ可能であり、
前記処理要求を出力した時点で、自身よりも長いポーリング周期が設定されている他のタスクが処理を実行中であれば、前記時点における前記他のタスクの実行経過時間を取得して、次回に自身の開始させるタイミングを、前記実行経過時間の分だけ早めることを特徴とするマルチタスクシステム。
【請求項４】
前記複数のタスクは、通信モジュールを備え、通信ネットワークに接続されている他の通信ノードと通信を行うマイクロコンピュータによって実行されることを特徴とする請求項１ないし３の何れかにマルチタスクシステム。
【請求項５】
前記調停制御部は、２つ以上のタスクが実行待機状態にあると、それらの内ポーリング周期が短いものを優先して、次に前記許可信号を与えることを特徴とする請求項１ないし４の何れかに記載のマルチタスクシステム。
【請求項６】
前記複数のタスクは、初期化処理において、自身のポーリング周期のＮ（Ｎは自然数）倍に相当する位相調整時間を経た後、前記リソースへのアクセスを開始することを特徴とする請求項１ないし５の何れかに記載のマルチタスクシステム。
【請求項７】
前記複数のタスクは、初期化処理における自身のポーリング周期を、それぞれ通常処理時よりも一律に短縮して前記位相調整時間を設定することを特徴とする請求項６記載のマルチタスクシステム。
【請求項８】
前記複数のタスクは、前記ポーリング周期を管理するための周期タイマと、前記ポーリング周期の開始位相を制御するための開始位相調整レジスタとを備え、
前記開始位相調整レジスタに、前記許可信号が与えられるタイミングで前記周期タイマのタイマ値をロードし、
前記ポーリング周期毎に、前記開始位相調整レジスタをリセットするように構成したことを特徴とする請求項１又は２記載のマルチタスクシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並行して動作する複数のタスクと、これらのタスクによって出力される処理要求を調停し、処理要求を許可したタスクに対して許可信号を出力する調停制御部とを備えるマルチタスクシステムに関する。
【背景技術】
【０００２】
例えば、通信ネットワークに接続されているノードを構成するマイクロコンピュータが
マルチタスクで動作する場合、各タスクがポーリングを行うことで、通信バスを介して他のノードにある例えばメモリなどのリソースにアクセスし（すなわち、通信を行い）、必要なデータを取得するように構成されることがある。このようなマルチタスクシステムでは、各タスクのポーリング周期の設定によってはリソースにアクセスする処理期間が重なることがあり、その場合、処理を実行中のタスク以外は待機状態となるため、ポーリング周期内に必要なデータを取得できなくなるおそれがある。
【０００３】
例えば特許文献１には、ライト制御部１００が、各ＰＨＹレイヤ機器を指定するためのＰＨＹアドレスを順次出力すると共に、そのＰＨＹアドレスポーリング周期とを組み合わせることでポーリングを効率的に行う技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−５６４１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１の技術は、ライト制御部１００が介在することで、各タスクが予め定められたポーリング周期で繰り返し処理を実行するという単純な制御形態とは異なっており、より複雑な制御を前提としたものである。
【０００６】
本発明は上記事情に鑑みてなされたものであり、その目的は、複数のタスク間におけるポーリング処理の競合を、より簡単な構成で極力排除できるマルチタスクシステムを提供することにある。
【課題を解決するための手段】
【０００７】
請求項１記載のマルチタスクシステムによれば、調停制御部は、複数のタスクによって出力される処理要求を調停し、処理要求を許可したタスクに対して許可信号を出力する。そして、複数のタスクは、夫々に設定されているポーリング周期毎に処理要求を出力すると共に、それぞれのポーリング周期が基準周期の整数倍に設定されている。尚「整数倍」であるから「１」でも良く、各ポーリング周期が同じである場合も含む。また、それぞれが、調停制御部に対して処理要求を出力した時点から許可信号が与えられるまでの待機時間を計測する待機時間タイマを備えており、待機時間タイマにより待機時間が計測されると、次回に自身のポーリング周期を開始させるタイミングを前記待機時間の分だけ遅延させる。このように構成すれば、次回以降のポーリングにおいて各タスクによるリソースへのアクセスが競合することを回避できる。
【０００８】
請求項２記載のマルチタスクシステムによれば、請求項１と同様に調停制御部を備え、複数のタスクは、夫々に設定されているポーリング周期毎に処理要求を出力し、請求項１と同様の待機時間タイマを備える。また、複数のタスクは、自身以外のタスクの実行状態がモニタ可能であり、待機時間タイマにより待機時間が計測されている間に実行中である他のタスクのポーリング周期が自身のポーリング周期以下であれば、次回に自身のポーリング周期を開始させるタイミングを待機時間タイマにより計測された待機時間の分だけ遅延させる。したがって、複数のタスクのポーリング周期が請求項１のように互いに整数倍となる関係にない場合でも、次回以降のポーリングにおいて各タスクによるリソースへのアクセスが競合することを回避できる。
【０００９】
請求項３記載のマルチタスクシステムによれば、請求項１と同様に調停制御部を備え、複数のタスクは、夫々に設定されているポーリング周期毎に処理要求を出力し、請求項１と同様の待機時間タイマを備える。また、複数のタスクは、自身以外のタスクの実行状態がモニタ可能であり、処理要求を出力した時点で自身よりも長いポーリング周期が設定されている他のタスクが処理を実行中であれば、前記時点における前記他のタスクの実行経過時間を取得して、次回に自身のポーリング周期を開始させるタイミングを、前記実行経過時間の分だけ早める。したがって、複数のタスクのポーリング周期が請求項１のように互いに整数倍となる関係にない場合でも、次回以降のポーリングにおいて各タスクによるリソースへのアクセスが競合することを回避できる。
【００１０】
請求項４記載のマルチタスクシステムによれば、複数のタスクは、通信モジュールを備え、通信ネットワークに接続されている他の通信ノードと通信を行うマイクロコンピュータによって実行される。すなわち、通信ノードを構成するマイクロコンピュータ（マイコン）においては、マイコンのソフトウェアによる複数のタスクがそれぞれポーリングを行うことで、通信ネットワークに接続されている他の通信ノード上のリソースにアクセス（通信）して必要な情報を取得することが行われる。したがって、上記のようなマイコンに適用することで、複数のタスクによるアクセスの競合を回避して通信効率を向上させることができる。
【００１１】
請求項５記載のマルチタスクシステムによれば、調停制御部は、２つ以上のタスクが実行待機状態にあると、それらの内ポーリング周期が短いものを優先して次に許可信号を与える。これにより、次回以降のポーリングにおけるアクセスの競合を回避する確率を向上させることができる。
【００１２】
請求項６記載のマルチタスクシステムによれば、複数のタスクは、初期化処理において、自身のポーリング周期のＮ倍に相当する位相調整時間を経た後、リソースへのアクセスを開始する。これにより、それぞれのタスクが最初のポーリングによりアクセスを行うタイミングが異なるように調整されるので、アクセスの競合を回避することができる。
【００１３】
請求項７記載のマルチタスクシステムによれば、複数のタスクは、初期化処理における自身のポーリング周期を、それぞれ通常処理時よりも一律に短縮して位相調整時間を設定する。したがって、位相調整時間が徒に長引くことを防止して処理効率を向上させることができる。
【００１４】
請求項８記載のマルチタスクシステムによれば、複数のタスクは、ポーリング周期を管理するための周期タイマとポーリング周期の開始位相を制御するための開始位相調整レジスタとを備える。そして、開始位相調整レジスタに、調停制御部より許可信号が与えられるタイミングで周期タイマのタイマ値をロードし、ポーリング周期毎に開始位相調整レジスタをリセットするように構成する。このように構成すれば、周期タイマのタイマ値が開始位相調整レジスタにロードされた値に等しくなったタイミングで処理要求を出力することで、待機時間タイマと周期タイマとを共通に構成できる。
【図面の簡単な説明】
【００１５】
【図１】第１実施例であり、（ａ）は処理要求が競合した場合にポーリング周期の位相が調整される一例、（ｂ）は従来例を示す図
【図２】ポーリングタスクブロック及び調停制御部による処理内容を示すフローチャート
【図３】マイクロコンピュータの構成を示す機能ブロック図
【図４】ポーリングタスクブロック及び調停制御部を示す図
【図５】調停制御部の処理要求調停ロジックの一部を示す図
【図６】ポーリング周期を設定するタイマ部の構成を示す図
【図７】タイマ部の動作例を示すタイミングチャート
【図８】第２実施例を示す図１相当図
【図９】図２相当図
【図１０】図６相当図
【図１１】第３実施例を示す図５相当図
【図１２】第４実施例であり、初期化処理において位相調整処理を示すフローチャート
【図１３】同タイミングチャート
【図１４】第５実施例を示す図１２相当図
【図１５】図１３相当図
【発明を実施するための形態】
【００１６】
（第１実施例）
以下、本発明のマルチタスクシステムを、通信ネットワークに接続される通信ノードに搭載されるマイクロコンピュータに適用した場合の第１実施例について図１ないし図７を参照して説明する。図３は、マイクロコンピュータの構成を示す機能ブロック図である。マイクロコンピュータ１は、ＣＰＵ（ホスト）２を備え、通信モジュール３を介して通信バス４（通信ネットワーク）に接続されている。ＣＰＵ２と通信モジュール４との間には、ホストインターフェイス５，バッファアクセス制御部６，バイパスアクセス制御部７，書き込みバッファ８，読み出しバッファ９，アクセス順序制御部１０等が配置されている。
【００１７】
ＣＰＵ２は、通信モジュール３によりデータの送信を行う際には、バッファアクセス制御部６を介して書き込みバッファ８にアクセスし、送信データを書き込む。ＣＰＵ２のバスサイズは例えば３２ビットであり、動作クロック周波数は、例えば数１０ＭＨｚ〜１００ＭＨｚ程度である。したがって、ＣＰＵ２〜書き込みバッファ８間のデータ転送速度は〜数Ｇｂｐｓ程度となっている。バッファアクセス制御部６は、書き込みバッファ８に対して書き込みアドレスWrite Addrと、書き込みデータWrite Dataとを出力する。また、書き込みバッファ８の容量は、３２ビットを１ワードとすると、例えば４〜８ワード程度となっている。そして、書き込みバッファ８は、ＣＰＵ２によって全ての領域にデータが書き込まれた状態になると、信号Write Buffer Fullをアクティブにする。当該信号の状態は、ＣＰＵ２及びアクセス順序制御部１０によってモニタされる。
【００１８】
書き込みバッファ８は、ＣＰＵ２側からの書き込みが終了すると、内蔵されている書き込み制御部８ａが、アクセス順序制御部１０に対して、通信モジュール３内の送信バッファを指定する書き込みアドレスWrite Buffer Addrと、書き込みデータWrite Buffer Dataとを出力する。アクセス順序制御部１０は、書き込みバッファ８が出力したアドレス並びにデータを、アドレスReq Addrと、書き込みデータWrite Dataとして通信モジュール３に出力して転送する。通信モジュール３は、書き込みバッファ８より転送されたデータを、通信バス４に接続されている他の通信ノードである周辺回路１２（Ａ），周辺回路１３（Ｂ）等に送信する。尚、送信先は、ＣＰＵ２が出力するアドレスにより決定される。また、通信バス４上での伝送速度（チップ間通信速度）は、例えば〜数Ｍｂｐｓ程度である。
【００１９】
読み出しバッファ９は、読み出し制御部１１によって制御される。読み出し制御部１１は、アクセス順序制御部１０を介して通信モジュール３に周期的にアクセスし、通信バス４に接続されている他の通信ノードである周辺回路１２（Ａ），周辺回路１３（Ｂ）等にデータ送信要求を行う。そして、通信モジュール３が周辺回路１２（Ａ），周辺回路１３（Ｂ）等より受信したデータを、読み出しバッファ９に転送させる。ＣＰＵ２は、バッファアクセス制御部６を介して読み出しバッファ９にアクセスすることで、通信モジュール３が受信したデータを読み出す。尚、周辺回路１２，１３については、マイクロコンピュータ１から見た場合の「周辺」であるから、これらがマイクロコンピュータ１と同様のマイクロコンピュータであっても良い。
【００２０】
読み出し制御部１１は、コンフィギュレーションインターフェイス（Ｉ／Ｆ）１４，タグメモリ１５，ポーリングタスクブロック１６，調停制御部１７等で構成されている。コンフィギュレーションＩ／Ｆ１４は、マイクロコンピュータ１に電源が投入された際に行われる初期設定時に、ＣＰＵ２が読み出し制御部１１に設定を行うためのインターフェイスである。ＣＰＵ２は、コンフィギュレーションＩ／Ｆ１４を介して、タグメモリ１５並びにポーリングタスクブロック１６に設定を行う。
読み出しバッファ９のデータ格納領域は、３２バイト単位のブロック領域であるエントリが定義されており、タグメモリ１５には、各エントリのベースアドレスを示すBuffer Addrがエントリの数だけ書き込まれる。尚、読み出しバッファ９の容量は、例えば１ｋバイト程度である。
【００２１】
ポーリングタスクブロック１６は、それぞれ異なる周期でポーリングを行う複数のタスクが動作する機能部分である。ポーリングタスクブロック１６には、読み出しバッファ９にデータを転送するポーリング周期のデータが設定され、その周期データは、同ブロック１６内のタイマにロードされる。ポーリングタスクブロック１６からは、各タスクのポーリング周期毎に調停制御部１７に対して処理要求が出力され、調停制御部１７は、それらの処理要求を調停して、アクセスを許可するタスクに処理開始（許可信号）を出力する。処理開始が与えられたタスクは、調停制御部１７を介してアクセス順序制御部１０に読み出しアドレスRead Buffer Addrを出力する。この読み出しアドレスRead Buffer Addrは、データの読み出し先を指定するアドレスであり（通信先を指定する通信要求）、予め通信バス４を介してデータを取得する対象が設定されている。
【００２２】
アクセス順序制御部１０は、調停制御部１７を介して出力されたアドレスを、アドレスReq Addrとして通信モジュール３に出力して転送する。すると、通信モジュール３は、与えられたアドレスに応じて通信バス４に接続されている周辺回路１２（Ａ），周辺回路１３（Ｂ）等の何れかのノードにデータ送信要求を行い、その要求に応じて返信された受信データをRead Dataとしてアクセス順序制御部１０に上げる。すると、アクセス順序制御部１０は、上記受信データをRead Buffer Dataとして読み出しバッファ９に出力し、転送する。尚、この転送の際に、調停制御部１７は、受信データRead Buffer Dataの４バイト毎の書き込み先アドレスを読み出しバッファ９に出力し、また、ポーリングタスクブロック１６には、処理完了を出力する。
【００２３】
ＣＰＵ２が読み出しバッファ９に書き込まれたデータを読み出す際には、バッファアクセス制御部６を介して、読み出しアドレスRead Addrをタグメモリ１５及び読み出しバッファ９のデータ出力側にあるマルチプレクサ１９に与える。タグメモリ１５には、読み出しアドレスRead AddrのＬＳＢ側より第９ビット以上が与えられ、タグメモリ１５は、そのアドレスに応じたベースアドレスを読み出しバッファ９に出力する。すると、読み出しバッファ９は、ベースアドレスに対応する３２バイトのデータをマルチプレクサ１９に出力する。マルチプレクサ１９には、読み出しアドレスRead Addrの第８〜第６ビットが与えられており、マルチプレクサ１９は、その３ビットのアドレスに応じて、入力側に与えられている３２バイトのデータから４バイトを選択し、読み出しデータRead Dataとしてバッファアクセス制御部６に出力する。
【００２４】
また、ＣＰＵ２は、上述したアクセス経路とは別に、バイパスアクセス制御部７及びアクセス順序制御部１０を介して、通信モジュール３に直接アクセスする（バイパス経路）ことも可能となっている。この場合、ＣＰＵ２は、送信データを直接通信モジュール３に書き込み、また、受信データを通信モジュール３から直接読み出す。バイパスアクセス制御部７は、アクセス順序制御部１０に対してアドレスBypass Request Addressと、書き込みデータBypass Write Dataを出力する。また、データを読み出す際には、アクセス順序制御部１０よりデータBypass Read Dataを取得する。
ホストインターフェイス５は、ＣＰＵ２が出力するアドレスが、書き込みバッファ８又は読み出しバッファ９へのアクセスを示すか、通信モジュール３への直接アクセス（バイパスアクセス）を示すかに応じて、バッファアクセス制御部６，バイパスアクセス制御部７の何れか一方にアクセス経路を切り替える。
【００２５】
以上の構成において、ＣＰＵ２は、書き込みバッファ８並びに読み出しバッファ９に対しては、高速にアクセスしてデータの読み書きを行うことができる。そして、書き込みバッファ８に書き込まれたデータの送信，通信バス３上での通信は、ＣＰＵ２が介在することなくハードウェアによって実行される。また、読み出しバッファ９に対するデータの格納も、読み出し制御部１１が通信バス３上での通信を行うことで実行される。
【００２６】
ＣＰＵ２が読み出しバッファ９を介して読み出すデータは、ポーリング周期の１周期前のデータである可能性がある。また、ＣＰＵ２が書き込みバッファ８を介して送信しようとするデータは、当該バッファ８を経由する分だけ遅れを生じる。したがって、ＣＰＵ２は、制御プログラムの処理に同期して特定のデータの値を取得する必要がある場合，若しくは送信する必要がある場合には、バイパスアクセス制御部７を介すことで、書き込みバッファ８並びに読み出しバッファ９をバイパスして通信モジュール３に直接アクセスする。これにより、通信データの送受信をダイレクトに行うことも可能となっている。
尚、ＣＰＵ２によって実行される制御プログラムが記憶されているメモリや、制御プログラムの実行中にワークエリア等として使用するメモリは、図示はしないがＣＰＵバス２０に直接接続されている。
【００２７】
図４は、ポーリングタスクブロック１６及び調停制御部１７を示している。ポーリングタスクブロック１６は、複数のポーリングタスク２１（１），２１（２），…より構成されており、各ポーリングタスク２１は、タイマ部２２及び要求発生部２３を備えている。タイマ部２２には、各ポーリングタスク２１のポーリング周期が設定されると共に、ポーリング周期の開始位相（開始タイミング）を調整する機能部を有している。要求発生部２３は、タイマ部２２によりポーリング周期毎にスタート信号が与えられると、設定されているアクセスアドレス（図示せず）と共に処理要求を調停制御部１７に出力する。
【００２８】
前記アクセスアドレスは、例えば複数のアドレスがリスト形式で設定されており、ポーリング周期毎に異なるアドレスが循環的に出力される（勿論、毎回同じアドレスでも良い）。また、前記アクセスアドレスは、調停制御部１７より処理開始が与えられると、調停制御部１７に内蔵されているマルチプレクサ２４を介して上述したRead Buffer Addrとして出力される。また、本実施例では、各ポーリングタスク２１のポーリング周期は、互いに整数倍となる関係に設定されるものとする。尚、整数倍であるから同じ周期に設定される場合も含む。
【００２９】
図５は、調停制御部１７が、各ポーリングタスク２１が出力する処理要求を調停するロジックについて図示の都合上一部のみ示している。調停制御部１７は、複数のＡＮＤゲート２５（ａ,ｂ，…ｅ，…）と、複数のＲＳフリップフロップ２６（ａ,ｂ，ｃ，…）と、ＯＲゲート２７とで構成されている。ポーリングタスク２１（１）が出力する処理要求Task1 Requestは、ＡＮＤゲート２５ａの正論理入力端子，ＡＮＤゲート２５ｄ，２５ｅ，…の負論理入力端子に与えられている。また、ポーリングタスク２１（２）が出力する処理要求Task2 Requestは、ＡＮＤゲート２５ｄの正論理入力端子，ＡＮＤゲート２５ｅ，…の負論理入力端子に与えられている。また、ポーリングタスク２１（３）が出力する処理要求Task3 Requestは、ＡＮＤゲート２５ｅの正論理入力端子と、図示しないＡＮＤゲートの負論理入力端子に与えられている。
【００３０】
ＡＮＤゲート２５ａ，２５ｂ，２５ｃの出力端子は、ＲＳフリップフロップ２６ａ，２６ｂ，２６ｃのセット端子Ｓに接続されており、ＲＳフリップフロップ２６のリセット端子Ｒには、調停制御部１７からの処理完了信号Request Completedが与えられている。尚、上記の処理完了信号は、各タスクに対する処理完了信号を対応するＲＳフリップフロップ２６に個別に与えても良いし、それらのＯＲ信号を共通に与えても良い。ＲＳフリップフロップ２６ａ，２６ｂ，２６ｃの出力端子Ｑは、ポーリングタスク２１（１），２１（２），２１（３）に対する処理開始信号Task1,2,3 Grantedとなり、また、これらはＯＲゲート２７の各入力端子に与えられている。ＯＲゲート２７の出力信号は、ＡＮＤゲート２５ａ，２５ｂ，２５ｃの負論理入力端子に与えられている。
調停制御部１７のロジックが以上のように構成されることで、各タスクの処理要求は、ポーリングタスク２１（１）側の優先順位が高く、ポーリングタスク２１（３）側の優先順位が低くなるように設定されている。
【００３１】
図６は、ポーリング周期を設定するタイマ部２２の構成を示す。タイマ部２２は、ポーリング周期タイマ（ダウンカウンタ，待機時間タイマ）２８と、開始位相調整レジスタ２９と、比較器３０とで構成されている。ポーリング周期タイマ２８には、初期処理において図示しないレジスタに設定されるポーリング周期時間のデータがタイマ値としてロードされ、ポーリング周期タイマ２８には、ロードされたデータをダウンカウントする。そのカウント値は、開始位相調整レジスタ２９及び比較器３０に入力される。
【００３２】
開始位相調整レジスタ２９には、調停制御部１７より出力される処理開始信号がイネーブル信号として与えられており、当該イネーブル信号がアクティブとなるタイミングでポーリング周期タイマ２８のカウント値がセットされる。開始位相調整レジスタ２９に格納されるデータは処理開始時間となり、比較器３０に入力される。比較器３０は、ポーリング周期タイマ２８のカウント値と開始位相調整レジスタ２９に格納されている処理開始時間データとが一致すると、処理要求Task Requestを調停制御部１７に出力する。
尚、以上の図３ないし図６では、ポーリングタスクブロック１６や調停制御部１７のロジックを専らハードウェア的なイメージで示したが、これらは必ずしもハードウェアにより構成されるとは限らず、ＣＰＵ２によって実行されるソフトウェアで実現される機能であっても良い。また、一部の機能をハードウェアで実現しても良い。
【００３３】
次に、本実施例の作用について図１及び図２，図７を参照して説明する。図２は、ポーリングタスクブロック１６及び調停制御部１７による処理の内容を示すフローチャートである。先ず「初期化」として、ポーリング周期タイマ２８及び開始位相調整レジスタ２９に、各ポーリングタスク２１のポーリング周期データをセットする（Ｓ１）。尚、開始位相調整レジスタ２９に対しては、例えばＣＰＵ２が所定のＩ／Ｏアドレスにより書き込みを行うことでイネーブル信号がアクティブとなるようにロジックを構成しておく。
【００３４】
そして、比較器３０において、ポーリング周期タイマ２８のカウント値と開始位相調整レジスタ２９の処理開始時間データとが一致すると（Ｓ２：ＹＥＳ）、タイマ部２２より処理要求が出力される。ここで、調停制御部１７において他のポーリングタスク２１との競合が発生していなければ（Ｓ３：ＮＯ）、調停制御部１７は処理要求を発生させたポーリングタスク２１に処理開始信号を出力する（Ｓ４）。この時、開始位相調整レジスタ２９には処理開始時間データがセットされるが、当該データは、競合が発生していない状態ではＳ１と同様にポーリング周期データに等しくなる。
【００３５】
一方、ステップＳ３において他のポーリングタスク２１との競合が発生すると（ＹＥＳ）、競合が解消されるまで待機状態となり（Ｓ５）、競合が解消された時点で調停制御部１７が処理開始信号を出力する（Ｓ６）。この時、ポーリング周期タイマ２８のカウント値は、Ｓ５において待機していた時間分だけ経過している。したがって、開始位相調整レジスタ２９には、上記の待機時間に相当するデータがセットされる。
【００３６】
図７は、タイマ部２２の動作例を示すタイミングチャートであり、ケース（１）では、何れかのポーリングタスク２１が処理要求を発生させた段階で競合が発生し、所定の待機時間が経過してから調停制御部１７が処理開始信号を出力させている。この時、開始位相調整レジスタ２９には上記待機時間に相当するデータがセットされる。したがって、次のケース（２）では、ポーリング周期タイマ２８のカウント値が最大値（ポーリング周期データ）となっても処理要求が発生せず、その時点から上記待機時間が経過した時点で比較器３０より処理要求が出力される。
【００３７】
すると、ポーリング周期タイマ２８及び開始位相調整レジスタ２９がリセットされるので、開始位相調整レジスタ２９には再びポーリング周期データがセットされる。尚、開始位相調整レジスタ２９について、処理要求によりリセットされるタイミングと、処理開始でデータがセットされるタイミングとが問題となるのであれば、後者のタイミングを若干遅延させれば良い。そして、次のケース（３）において競合が発生しなければ、処理要求が発生すると直ちに処理開始信号が出力される。
【００３８】
図１（ａ）は、２つのポーリングタスク２１間で処理要求が競合した場合に、ポーリング周期の位相が図２又は図７に示すように調整される一例を示す。ここで、２つのタスクＡ，Ｂは、それぞれのポーリング周期Ｔａ，Ｔｂが等しく設定されており（互いに１倍の関係）、何れも周期の冒頭から処理を開始するものとする。図１（ｂ）は従来例を示すが、２つのタスクＡ，Ｂはポーリング周期毎にそれぞれの処理要求が競合することになり、タスクＡ側が優先されると、タスクＢの処理が開始されるタイミングは毎回遅延することになる。
【００３９】
一方、図１（ａ）に示す本実施例の場合、最初に競合が発生した期間においてタスクＢの処理開始が待機された時間Ｔｄｂが計測されると、次回のタスクＢのポーリング周期は待機時間Ｔｄｂだけ遅延させたタイミング（位相）で開始されることになる。これにより、以降のタスクＢのポーリング周期はタスクＡ側の処理期間が終了した時点で開始されるので、競合の発生が回避される。
【００４０】
以上のように本実施例によれば、調停制御部１７は、複数のポーリングタスク２１によって出力される処理要求を調停し、処理要求を許可したポーリングタスク２１に対して処理開始；許可信号を出力する。そして、複数のポーリングタスク２１は、夫々に設定されているポーリング周期毎に処理要求を出力すると共に、それぞれのポーリング周期が基準周期の整数倍に設定され、それぞれが、調停制御部１７に対して処理要求を出力した時点から許可信号が与えられるまでの待機時間を計測し、次回に自身のポーリング周期を開始させるタイミングを前記待機時間の分だけ遅延させるようにした。したがって、次回以降のポーリングにおいて各タスク２１によるリソースへのアクセスが競合することを回避できる。
【００４１】
また、複数のポーリングタスク２１は、通信モジュール３を備え、通信ネットワークに接続されている他の通信ノード１２，１３等と通信を行うマイクロコンピュータ１によって実行される。すなわち、上記のようなマイクロコンピュータ１にマルチタスクシステムを適用することで、複数のポーリングタスク２１によるアクセスの競合を回避して通信効率を向上させることができる。
【００４２】
更に、複数のポーリングタスク２１は、ポーリング周期を管理するための周期タイマ２８とポーリング周期の開始位相を制御するための開始位相調整レジスタ２９とを備え、開始位相調整レジスタ２９に、調停制御部１７より許可信号が与えられるタイミングで周期タイマ２８のタイマ値をロードし、ポーリング周期毎に開始位相調整レジスタ２９をリセットするように構成した。このように構成すれば、周期タイマ２８のタイマ値が開始位相調整レジスタにロードされた値に等しくなったタイミングで処理要求を出力することで、待機時間タイマとしての機能を周期タイマ２８に持たせて両者を共通化できる。
【００４３】
（第２実施例）
図８ないし図１０は第２実施例であり、第１実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分について説明する。尚、第２実施例では、第１実施例とは異なり、各タスク２１のポーリング周期が互いに整数倍になっているという条件はないものとする。図８，図９，図１０はそれぞれ図１，図２，図６相当図であり、図９ではステップＳ７〜Ｓ１０が追加されており、ステップＳ３において「ＹＥＳ」と判断するとステップＳ７に移行する。ステップＳ７では、現在処理要求を発生させているタスク２１（図８（ａ）のタスクＢ）のポーリング周期（Ｔｂ）が、競合を生じている、すなわち処理を実行中であるタスク（Ａ）のポーリング周期（Ｔａ）よりも長いか否かを判断する。
ここでの判断は、図４に示すポーリングタスクブロック１６において、各タスク２１は、自身以外のタスク２１の各種設定情報を相互に参照可能となっており、他のタスク２１のポーリング周期が把握できることを前提として行う。
【００４４】
ステップＳ７において、図８（ａ）に対応させると、Ｔｂ≦Ｔａであれば（ＮＯ）第１実施例と同様にステップＳ５，Ｓ６を実行する。一方、Ｔｂ＞Ｔａであれば（ＹＥＳ）、やはり競合状態が解消されるまで待機し（Ｓ８）、その間の競合タスクＡによる処理経過時間；図８（ａ）に示す時間Ｔｄａを取得し、その経過時間Ｔｄｂを開始位相調整レジスタ２９にセットする（Ｓ９）。
【００４５】
図１０において、ポーリング周期タイマ２８と開始位相調整レジスタ２９との間にはマルチプレクサ３１が挿入されており、開始位相調整レジスタ２９には、ポーリング周期タイマ２８のタイマ値と、競合タスク経過時間との何れか一方が選択されてセットされる。マルチプレクサ３１の選択制御はステップＳ７の判断結果に基づく。すなわち、マルチプレクサ３１は、Ｓ７：ＹＥＳ（１）の場合は競合タスク経過時間側を選択し、Ｓ７：ＮＯ（０）の場合はポーリング周期タイマ２８側を選択する。
【００４６】
競合タスク経過時間の計測は、図８（ａ）では、タスクＡのポーリング周期の開始位相と、タスクＢのポーリング周期の開始位相との差Ｔｄａである。したがって、タスクＢは、タスクＡが処理要求を出力した時点から自身が処理要求を出力するまでの時間Ｔｄａを、別途待機時間タイマを用意して計測すれば良い。
【００４７】
そして、タスクＢに処理開始信号が与えられると、開始位相調整レジスタ２９に競合タスク経過時間Ｔｄａがセットされるので、タスクＢの次回のポーリング周期の開始位相は、時間Ｔｄａだけ早まるように位相が進む。また、上記開始位相で開始位相調整レジスタ２９はリセットされると共にポーリング周期Ｔｂが再びセットされるので、以降はタスクＡ，Ｂ間のポーリング周期の開始位相の関係が維持される。
【００４８】
図８（ｂ）は、従来技術では（ａ）と同様のケースでどのような処理パターンになるかを示している。最初はタスクＡ側の処理が先に実行され、タスクＢ側の処理が遅延されるが、途中で両者の関係が逆転し、タスクＢ側の処理が先に実行されてタスクＡ側の処理が遅延されるように変化する。このような処理パターンでは、タスクＡ，Ｂそれぞれの処理の等時性が全く保証されないことが明らかである。
【００４９】
以上のように第２実施例によれば、各タスクは、自身以外のタスクの実行状態を互いにモニタ可能として、待機時間タイマにより待機時間が計測されている間に実行中である他のタスクのポーリング周期が自身のポーリング周期以下であれば、次回に自身のポーリング周期を開始させるタイミングを待機時間タイマにより計測された待機時間の分だけ遅延させる。また、自身が処理要求を出力した時点で自身よりも長いポーリング周期が設定されている他のタスクが処理を実行中であれば、前記時点における前記他のタスクの実行経過時間を取得して、次回に自身の開始させるタイミングを、前記実行経過時間の分だけ早めるようにした。したがって、複数のタスクのポーリング周期が第１実施例のように互いに整数倍となる関係にない場合でも、次回以降のポーリングにおいて各タスクによるリソースへのアクセスが競合することを回避できる。
【００５０】
（第３実施例）
図１１は第３実施例であり、第１実施例と異なる部分について説明する。図１１は、調停制御部３２における調停制御ロジックを示しており、ＡＮＤゲート２５ｄ，２５ｅに替えて優先ロジック部（Minimum）３３が配置されている。優先ロジック部３３には、各ポーリングタスク２１（１，２，３，…）が発生させる処理要求；Task（1,2,3,…） Requestが入力されていると共に、各ポーリングタスク２１（１，２，３，…）のポーリング周期データ；Task（1,2,3,…）Cycleが入力されている。
【００５１】
そして、優先ロジック部３３は、複数のポーリングタスク２１の処理要求が競合した場合に、それらの内ポーリング周期がより短いものを優先して、イネーブル信号ＥＮ１，ＥＮ２，ＥＮ３，…をＲＳフリップフロップ２６ａ，２６ｂ，２６ｃ，…に出力する。これにより、次回以降のポーリングにおけるアクセスの競合を回避する確率を向上させることができる。
【００５２】
（第４実施例）
図１２及び図１３は第４実施例である。第４実施例では、各タスクが初期化処理において位相調整処理行う。図１２に示すように、何れのタスクも初期化処理においてＮ周期分のポーリング処理を実行する。図１３は対応するタイミングチャートを示すが、初期化フェーズにおいて、第１実施例における図１と同様の処理が実行されることになる。この、初期化フェーズでは、実際にリソースにアクセスしてデータを取得しても良いし、位相調整のみを目的として上記アクセスを実行せずとも良い（若しくは、この期間に取得したデータを無視しても良い）。
【００５３】
以上のように第４実施例によれば、複数のタスクは、初期化フェーズにおいて、自身のポーリング周期のＮ倍に相当する位相調整時間を経た後、通常動作フェーズに移行して実際にリソースへのアクセスを開始する。これにより、それぞれのタスクが最初のポーリングによりアクセスを行うタイミングが異なるように調整されるので、アクセスの競合を回避することができる。
【００５４】
（第５実施例）
図１４及び図１５は第５実施例であり、第４実施例と異なる部分について説明する。第４実施例では、第３実施例と同様に各タスクが初期化フェーズにおいて位相調整処理を行うが、図１４に示すように、ステップＳ１１及びＳ１２で位相調整処理を行う前にそれぞれのポーリング周期を１／Ｍ倍に設定する（Ｓ１０）。そして、ステップＳ１２の実行を終了すると（ＹＥＳ）、それぞれのポーリング周期を通常の値に戻し（Ｓ１３）、初期化を完了する。図１４は、Ｍ＝２の場合の図１３相当図である。このように処理することで、初期化フェーズにおいて位相調整処理に要する時間が、第４実施例の１／２に短縮される。
以上のように第５実施例によれば、複数のタスクは、初期化フェーズにおける自身のポーリング周期を、それぞれ通常処理時よりも一律に短縮して位相調整時間を設定する。したがって、位相調整時間が徒に長引くことを防止して処理効率を向上させることができる。
【００５５】
本発明は上記し又は図面に記載した実施例にのみ限定されるものではなく、以下のような変形又は拡張が可能である。
読み出しバッファ９に対するデータ転送中に発生した書き込みバッファ８への書き込みや、バイパス経路へのアクセスを優先して実行する処理については、必要に応じて行えば良い。
ホストは、ＣＰＵ２やＤＭＡコントローラ６２に限らず、例えばＤＳＰ等であっても良い。
データバスサイズや記憶容量，データ転送速度等については、個別の設計に応じて適宜変更すれば良い。
ポーリング周期タイマを、アップカウンタで構成しても良い。
また、ポーリング周期タイマと待機時間タイマとを個別に構成しても良い。
通信ノードに搭載されるマイクロコンピュータに限ることなく、マルチタスクで動作するものであれば適用が可能である。
【符号の説明】
【００５６】
図面中、１はマイクロコンピュータ（通信ノード）、２はＣＰＵ（ホスト）、３は通信モジュール、４は通信バス（通信ネットワーク）、１２，１３は周辺回路（通信ノード）、１６はポーリングタスクブロック、１７は調停制御部、２１はポーリングタスク、２８はポーリング周期タイマ（待機時間タイマ）、２９は開始位相調整レジスタ、３２は調停制御部を示す。
【図１】
0005621747.tif 000002
【図２】
0005621747.tif 000003
【図３】
0005621747.tif 000004
【図４】
0005621747.tif 000005
【図５】
0005621747.tif 000006
【図６】
0005621747.tif 000007
【図７】
0005621747.tif 000008
【図８】
0005621747.tif 000009
【図９】
0005621747.tif 000010
【図１０】
0005621747.tif 000011
【図１１】
0005621747.tif 000012
【図１２】
0005621747.tif 000013
【図１３】
0005621747.tif 000014
【図１４】
0005621747.tif 000015
【図１５】
0005621747.tif 000016