(57)【特許請求の範囲】
【請求項１】
単一のプロセッサによって実行される２つのタスクの切り替え方法において、
第一のタスクは、複数のサブタスクをラウンドロビンとして無限ループとして実行し、
第二のタスクは、前記第一のタスクの実行中における外部事象による割り込み処理として、常に同じスタートアドレスと同じエンドアドレスで実行し、
前記第一のタスクから前記第二のタスクへの切り替え時、実行中の第一のタスクのサブタスクが予め定めた特定のサブタスク以外であれば、当該第一のタスクの実行復帰のためのパラメーターを保存し、かつ、実行を該第一のタスクの当該地点から、前記第二のタスクのスタートアドレスに切り替え、
該第二のタスクは、実行すべき自タスクが完了したときに、前記第一のタスク復帰用に保存したパラメーターと切り替わった地点情報を基に、前記第一のタスクの前記地点に実行を切り替え、
前記第一のタスクから前記第二のタスクへの切り替え時、実行中の第一のタスクのサブタスクが予め定めた特定のサブタスクであれば、当該第二のタスクへの切り替えをペンディングして、前記特定のサブタスクが完了し、通常の切り替え可能とされたサブタスクに実行が移った時点で、前記ペンディングした第二のタスクへ切り替えることを特徴としたタスク切り替え方法。
【請求項２】
単一のモデムＤＳＰによって、ファームウエアとして実行されるデータポンプタスクとコントローラタスクの切り替え方法において、
前記コントローラタスクは複数のサブタスクをラウンドロビンとして無限ループとして実行し、
前記データポンプタスクは、前記コントローラタスクの実行中におけるＡＤコンバータによる割り込み処理として、常に同じスタートアドレスと同じエンドアドレスで実行し、
前記コントローラタスクから前記データポンプタスクへの切り替え時、実行中のコントローラタスクのサブタスクが予め定めた特定のサブタスク以外であれば、
当該コントローラタスクの実行復帰のためのプログラムアドレス情報、レジスタ情報、スタック情報を保存し、かつ、実行をコントローラタスクのＡＤコンバータによる割り込みアドレスから、前記データポンプタスククのスタートアドレスに切り替え、
該データポンプタスクは、実行すべきデータポンプサブタスクが全て完了したときに、前記コントローラタスク復帰用に保存したレジスタ情報、スタック情報を復帰し、前記コントローラタスクの割り込んだプログラムアドレス位置に実行を切り替え、
前記コントローラタスクから前記データポンプタスクへの切り替え時、実行中のコントローラタスクのサブタスクが予め定めた特定のサブタスクであれば、当該データポンプタスクへの切り替えをペンディングし、前記特定のコントローラサブタスクが完了し、それ以外の切り替え可能としているコントローラサブタスクに実行が移ったときに、前記ペンディングしたデータポンプタスクへ切り替えることを特徴としたＤＳＰモデムファームウエアのタスク切り替え方法。
【請求項３】
エラー訂正やデータ圧縮・伸長処理などを行う制御部と、データ送受信や変復調処理などを行う信号処理部とからなるワンチップＤＳＰモデムであって、
電話回線との間の音声信号の２線４線変換を行うＤＡＡ回路と、
該ＤＡＡ回路に接続され、受信信号をアナログーディジタル変換し、変換終了を通知することでサンプリング割込みを行うＡＤコンバータと、
前記ＤＡＡ回路に接続され、送信信号をディジタルーアナログ変換し、該ＡＤコンバータの割込みでデータ出力処理の起動をかけるＤＡコンバータと、
該ＤＡコンバータおよび前記ＡＤコンバータに接続され、前記制御部および前記信号処理部を内蔵するＤＳＰと、
該ＤＳＰに接続され、外部ホストとの間にシリアル通信で接続するシリアルポートと、
前記ＤＳＰが実行するプログラムを格納するプログラムメモリと、
前記ＤＳＰが実行する際に必要なデータを保存し、読み出し、書き込むためのワークＲＡＭとを具備すると共に、
前記ＤＳＰの制御部は、前記エラー訂正と前記データ圧縮・伸長処理を含むコントローラサブタスクをファームウェアとしてラウンドロビンで無限ループで実行し、
前記ＤＳＰの信号処理部は、前記データ送受信と前記変復調処理を含むデータポンプサブタスクを、前記制御部によるコントローラサブタスクの実行中の割込み処理として、常に同じスタートアドレスと同じエンドアドレスでファームウェアとして実行し、
前記ＤＳＰは、
内蔵する前記制御部の処理を実行中に割込みが発生することで、前記信号処理部の処理を起動する必要がある場合、前記制御部の処理の実行復帰のためのパラメータを保存して、前記信号処理部の処理の先頭に切り替え、該信号処理部の処理が終了したとき、前記制御部の処理の復帰用に保存したパラメータと切り替わった地点情報を元に、該制御部の処理に切り替え、
前記制御部が予め定めた特定のポンプデータサブタスクの実行中に前記割込みが発生したときは、前記信号処理部への切り替えをペンディングし、前記特定のポンプデータサブタスクの処理が完了し、それ以外の切り替え可能としている処理に実行が移ったときに、前記信号処理部へ切り替えることを特徴とするワンチップＤＳＰモデム。
【請求項４】
前記コントローラが実行する予め定められたコントローラサブタスクは、外部電話のフックの状態やＩＯポートの状態をチェックしてイベントを生成する外部事象チェック処理や、コントローラタスクとデータポンプタスク間のコマンドまたはステータスや送受信データのやりとりの各サブタスクであり、それ以外のサブタスクは、エラー訂正処理およびデータ圧縮・伸長処理であることを特徴とする請求項２記載のタスク切り替え方法。
【請求項５】
請求項１，２または４に記載のタスク切り替え方法の各手順をＤＳＰに実行させるためのタスク切り替え用プログラム。
【請求項６】
請求項５に記載のタスク切り替え用プログラムを格納したことを特徴とするコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、単一のプロセッサ（ＣＰＵ及びＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ））で複数のタスクを切り替える方法に関し、特にワンチップＤＳＰ上のファームウエアでモデムを構成し、タスクをコントローラとデータポンプとに大別し、そのそれぞれのタスクを簡素に且つ効率的に切り替える方法に関する。
【０００２】
【従来の技術】
従来より、モデムは、大別して制御部と信号処理部とに分けて考えられる。
前者の制御部に関して、ユーザーが発行するＡＴコマンドの処理やＳレジスターの処理、またはデジタルビットデータに対するバイト化処理、バッファー処理、さらにはエラー訂正処理やデータ圧縮・伸張処理は、制御処理またはコントロールタスクと呼ばれる。なお、ＡＴコマンドは、モデム用に開発されたコマンドで、電話回線との接続を切断するＡＴＨ、パルスダイヤルの回線で発信する電話番号を続けて入力するＡＴＤＰ、トーンダイヤルの回線で発信する電話番号を続けて入力するＡＴＤＴなどがある。また、Ｓレジスタは、モデムに内蔵されている機能設定用の値を設定するレジスタで、モデムの様々な機能をコントロールすることができる。
これに対して、後者の信号処理部に関しては、デジタルビットデータを電送線路に対する送受信信号として変復調する部分を、信号処理またはデータポンプタスクと呼ぶ。
【０００３】
従来、コントロールタスクはマイコン等のＣＰＵで行われ、データポンプタスクは信号処理専用のＤＳＰやハードウエアで行われていた。
ところが、ＤＳＰ技術の進歩、ＭＩＰＳ（Ｍｉｌｌｉｏｎ  Ｉｎｓｔｒｕｃｔｉｏｎｓ  Ｐｅｒ  Ｓｅｃｏｎｄ：処理速度の単位）の増大を受け、さらに、コスト低減、製品サイズの小型化の要望のために、ＤＳＰワンチップでモデムを構成することが必要となってきている。
モデムのようなマルチタスクのＤＳＰへの実装方法としては、マルチタスクのＲＴＯＳ（Ｒｅａｌ  Ｔｉｍｅ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を用いる方法が一般的である。
【０００４】
【発明が解決しようとする課題】
しかしながら、ＲＴＯＳ自体は、汎用性があり、かつ複雑であり、複数のタスクに対応できる半面、それ自体がＤＳＰのリソースをある程度必要とするので、簡略化できない。また、実行するタスクもＲＴＯＳの仕様に基づいて構成されなければならないので、設計時に制約を受ける。
図４は、従来における比較的単純なＲＴＯＳのタスク管理状態を表した遷移図である。
プログラム全体を構成するモジュールで、ある実行単位で区別できるものをタスクと呼ぶ。一つのタスクは単一の実行単位であり、あるイベントや状態の変化により、必要に応じて起動され、所望の処理を行って、休止する。
一般にリアルタイムシステムでは、複数のタスクが同時に起動されることが多い。
【０００５】
タスクによっては比較的長時間要するものもあるし、短時間ですむものもある。これらをその必要性に応じて、実行したり待たせたりするのがＲＴＯＳの役割である。これを実現するために、ＯＳは各タスクに対応して、その状態を保持することが必要である。また、タスクは自タスクの起動タイミングや優先度をＲＴＯＳに知らせる仕組みも必要である。さらに、ＲＴＯＳ自体もプロセッサーで実行されるわけであるから、大きさも、実行時間も、本来必要なＴＡＳＫの総計に加算されることになる。ＲＴＯＳとタスクの実行を切り替える仕組みも当然必要である。
【０００６】
図４では、実行可能状態４１から、実行割付けによる実行状態４２、中断による強制待ち状態４４、強制終了による休止状態４５に遷移する。また、実行状態４２から、終了により休止状態４５、待ち条件による待ち状態４３、実行待ちによる実行可能状態４１となる。また、待ち状態４１から、待ち解除による実行可能状態４１、強制待ちによる強制待ち状態４４、強制終了による休止状態４５となる。強制待ち状態４４から再開により、また休止状態４５から起動により、それぞれ実行可能状態４１となる。
【０００７】
一方、ＤＳＰの中でも小型低コストを目指したものとしては、スタックエリア等を極小にした物件がある。これらの低コストＤＳＰでは、このようなＲＴＯＳを実装するときに、ソフトウエアによるスタックをメモリ上に構成しなければならなくなり、底辺に複雑かつＲＴＯＳの実行自体の効率が非常に悪くなる。
【０００８】
そこで、本発明の目的は、これら従来の課題を解決し、小型・低コストを指向したＤＳＰにおいて、本格的ＲＴＯＳを用いることなく、モデムの二つのタスク、コントローラとデータポンプを効率よく実行でき、かつリソース消費の少なくて済むワンチップＤＳＰモデムおよびそのタスク切り替え方法を提供することにある。
【０００９】
【課題を解決するための手段】
上記目的を達成するため、本発明のタスク切り替え方法は、第一のタスクは、複数のサブタスクをラウンドロビンとして実行する無限ループとして実行し、外部事象による割り込みが該第一のタスクの実行中に発生すると、第二のタスクを起動する必要がある場合に、該第一のタスクの実行復帰のためのパラメーターを保存し、かつ、実行を該第一のタスクのその地点から、該第二のタスクの先頭に切り替え、該第二のタスクは、実行すべき自タスクが完了したときに、第一のタスク復帰用に保存したパラメーターと切り替わった地点情報を元に、該第一のタスクの前記地点に実行を切り替え、該第一のタスクに属する複数のサブタスクのうち予め定めた特定のサブタスクにおいては、前記外部事象割り込みが発生したときに、該第二のタスクへの切り替えをペンディングして、該特定のサブタスクが完了し、通常の切り替え可能とされたサブタスクに実行が移った時点で、該第二のタスクへ切り替えることを特徴としている。
【００１０】
また、本発明のワンチップＤＳＰモデムのタスク切り替え方法は、コントローラタスクは複数のサブタスクをラウンドロビンとして実行する無限ループとして実行し、ＡＤコンバータによる割り込みが該コントローラタスクの実行中に発生すると、該データポンプタスクを起動する必要がある場合に、該コントローラタスクの実行復帰のためのプログラムアドレス情報、レジスタ情報、スタック情報を保存し、かつ、実行をコントローラタスクのＡＤコンバータによる割り込みアドレスから、データポンプタスクの先頭位置に切り替え、該データポンプタスクは、実行すべきデータポンプサブタスクが全て完了したときに、コントローラタスク復帰用に保存したレジスタ情報、スタック情報を復帰し、該コントローラタスクの割り込んだプログラムアドレス位置に実行を切り替え、該コントローラタスクに属する複数のコントローラサブタスクのうち、予め定めた特定のコントローラサブタスク実行中に、ＡＤコンバーター割り込みが発生したときは、該データポンプタスクへの切り替えをペンディングし、該特定のコントローラサブタスクが完了し、それ以外の切り替え可能としているコントローラサブタスクに実行が移ったときに、該データポンプタスクへの切り替えることを特徴としている。
【００１１】
また、本発明のワンチップＤＳＰモデムは、電話回線との間の音声信号の２線４線変換を行うＤＡＡ回路と、該ＤＡＡ回路に接続され、受信信号をアナログーディジタル変換し、変換終了を通知することでサンプリング割込みを行うＡＤコンバータと、該ＤＡＡ回路に接続され、送信信号をディジタルーアナログ変換し、該ＡＤコンバータの割込みでデータ出力処理の起動をかけるＤＡコンバータと、該ＡＤコンバータおよびＤＡコンバータに接続され、内蔵する制御部の処理を実行中に割込みが発生することで、信号処理部の処理を起動する必要がある場合、該制御部の処理の実行復帰のためのパラメータを保存して、該信号処理部の処理の先頭に切り替え、該信号処理部の処理が終了したとき、該制御部の処理の復帰用に保存したパラメータと切り替わった地点情報を元に、該制御部の処理に切り替えるＤＳＰと、該ＤＳＰに接続され、外部ホストとの間にシリアル通信で接続するシリアルポートと、該ＤＳＰが実行するプログラムを格納するプログラムメモリと、該ＤＳＰが実行する際に必要なデータを保存し、読み出し、書き込むためのワークＲＡＭとを具備することを特徴としている。
【００１２】
【発明の実施の形態】
以下、本発明の原理および実施例を、図面により詳細に説明する。
（原理）
以下に、本発明の動作原理を説明する。
モデムの上記２つの大きなタスクのうち、データポンプタスクは信号処理であり、送信データビットを用いて外部に送信する音声帯域信号を符号、変調して生成する、また、外部から入力される信号から復調、復号して、受信データビットを生成する。
その意味で、データポンプタスクはリアルタイム要求が強く、実時間処理を行わなければならない。
【００１３】
それに対しコントローラタスクは、イベントの処理を分散して行うものであって、データポンプタスクに比べると、実時間処理要求は低い。さらに、ホストと間のデータ転送には、必要に応じてデータフロー制御が行えるので、たとえ処理が間に合わなかったとしても、破綻を起こさないように制御することができる。本発明ではこの点に着眼し、コントローラタスクをそれ自体で無限ルーチンとして構成し、イベントを次々と処理するラウンドロビンとして実行させる。
【００１４】
そのコントローラタスクに対し、データポンプタスクの実時間要求が起きたとき、具体的にはＡＤ／ＤＡのサンプルが、処理単位の分だけ貯まったときに、データポンプのタスクへスイッチさせ、これを完了させてしまうようにする。
その後、コントローラタスクのスイッチした場所へ戻るようにする。
このようにすれば、所謂タスクスイッチ自身の処理のオーバーヘッドはコントローラタスクのみの分ですむ。何故ならば、データポンプタスクは、常に同じスタートアドレスから始まり、同じエンドアドレスで完了するからである。
【００１５】
本発明では、まず、一般的に、単一のプロセッサによって、実行される２つのタスクにおいて、第一のタスク（コントローラタスク）は複数のサブタスクをラウンドロビンとして実行する無限ループとして実行されるように構成し、外部事象による割り込みが該第一のタスク実行中に発生したことにより、第二のタスク（データポンプタスク）を起動する必要がある場合に、第一のタスクの実行復帰のためのパラメーターを保存し、かつ、実行を第一のタスクのその地点から、第二のタスクの先頭に切り替えるように構成する。
【００１６】
この場合、第二のタスクは、実行すべき自タスクが完了したときに、第一のタスク復帰用に保存したパラメーターと切り替わった地点情報を元に、前記第一のタスクの該地点に実行を切り替えるように構成する。第一のタスクに属する複数のサブタスクのうち、あらかじめ定めた特定のサブタスクにおいては、外部事象割り込みが発生したときに、第二のタスクへの切り替えをペンディングするように構成し、該特定のサブタスクが完了し、通常の切り替え可能とされたサブタスクに実行が移ったときに、前記第二のタスクへの切り替えを行う。
【００１７】
さらに具体的には、単一のモデムＤＳＰによって、ファームウエアとして実行されるデータポンプタスクとコントローラタスクにおいて、コントローラタスクは複数のサブタスクをラウンドロビンとして実行する無限ループとして実行されるように構成し、ＡＤコンバータによる割り込みがコントローラタスク実行中に発生したことにより、データポンプタスクを起動する必要がある場合に、コントローラタスクの実行復帰のためのプログラムアドレス情報、レジスタ情報、スタック情報を保存し、かつ、実行をコントローラタスクのＡＤコンバータによる割り込みが割り込んだアドレスから、データポンプタスクの先頭位置に切り替えるように構成する。
【００１８】
一方、データポンプタスクは、実行すべきデータポンプサブタスクが全て完了したときに、コントローラタスク復帰用に保存したレジスタ情報、スタック情報を復帰し、コントローラタスクの割り込んだプログラムアドレス位置に実行を切り替えるように構成する。コントローラタスクに属する複数のコントローラサブタスクのうち、あらかじめ定めた特定のコントローラサブタスク実行中に、ＡＤコンバーター割り込みが発生したときは、データポンプタスクへの切り替えをペンディングするように構成し、前記特定のコントローラサブタスクが完了し、それ以外の切り替え可能としているコントローラサブタスクに実行が移ったときに、データポンプタスクへの切り替えを行う。
【００１９】
（実施例）
以下に、本発明の実施例を説明する。
図３は、本発明の一実施例を示すＤＳＰを用いたワンチップモデムシステム（ＬＳＩ）の構成図である。
図３において、ＤＳＰ１２はプロセッサであり、データポンプ(ＤＰ)タスクとコントローラ(ＣＴ)タスクをファームウエアで実行する。ファームウエアプログラムは、プログラムメモリ１３に格納される。
また、ファームの実行に必要なデータはワークＲＡＭ１４において保存、あるいは読み出し、あるいは書き込みが行われる。
【００２０】
外部ホストであるＤＴＥ(Ｄａｔａ  Ｔｅｒｍｉｎａｌ  Ｅｑｕｉｐｍｅｎｔ)２０とは、シリアル通信で接続される。この用途のために、本実施例では、ＬＳＩ１０にシリアルポート１１を内蔵する。
モデム信号の入出力は、ＡＤコンバータ１５とＤＡコンバータ１６で、それぞれ入力のアナログ−デジタル変換、出力のデジタル−アナログ変換が行われる。
ＤＡＡ(Ｄｉｒｅｃｔ  Ｄａｔａ  Ａｒｒａｎｇｅｍｅｎｔ)１７は、電話回線３０との間の音声信号の２線４線変換および絶縁等を受け持つ部分である。
【００２１】
ＡＤコンバータ１５からＤＳＰ１２に接続されている「サンプリング割り込み」は、ＡＤコンバータ１５の変換終了をＤＳＰ１２に通知するための割り込み信号である。
本実施例では、ＤＡコンバータ１６とＡＤコンバータ１５はサンプリング周期において常に等しく、同期しているものとする。これは、高速モデムにおいては一般的な構成である。それ故、ＡＤコンバータ１５のサンプリング割り込みで、ＤＡコンバータ１６へのデータ出力処理の起動をかけても良い構成となっている。
【００２２】
本実施例の説明では、このＡＤコンバータ１５の割り込みをタスクスイッチの契機としている。ＡＤコンバータ１６、ＤＡコンバータ１５の構成の違いによっては、ＤＡコンバータ１６の割り込みも取り扱わなくてはならないが、ここでは、これは自明なものとして説明を省略する。
また、システム上、この他に、シリアルポートの割り込み、タイマーの割り込み等が必要であるが、ここで説明するタスクスイッチ機構に直接は関係ないので説明を省略した。
タスクスイッチには、ＴＡＳＫＳＷとＴＡＳＫＳＷ２があり、これらを起動することで、ＣＴタスクのアドレスを、レジスタ、スタックまたはメモリに保存し、ＤＰの先頭にジャンプするか、あるいはＴＡＳＫＢＡＣＫによりＣＴ_ＴＡＳＫ内のエントリーポイントへジャンプする。ＴＡＳＫＳＷとＴＡＳＫＳＷ２は、ここでは２個のスイッチを用いているが、ハードウェアの構造によっては１個で兼用できる。
【００２３】
（ファーム全体動作）
図１は、本発明の一実施例を示すファームウェア全体の動作とタスクスイッチの動作フローチャートである。
プログラム実行は、リセット後、初期化等の処理を終えると、コントローラの通常処理（ＣＴ  ＴＡＳＫ）に入る（ステップ１０６）。なお、初期化部分は図示していない。ＣＴ  ＴＡＳＫそれ自体は無限ループ（ステップ１０６で示す）であり、複数のサブタスクで構成されている。
ＣＴ処理（１０６）は、さらにサブタスクに分けて考えられ、ＡＴコマンドパーサ、Ｓレジスタ処理、ビットデータのバイト化処理、バッファリング処理、ホストに対するフロー制御処理、ＤＰとのデータやコマンドまたはステータスのメッセージ処理、エラー訂正、データ圧縮処理等がある。
【００２４】
一般にエラー訂正は、ＬＡＰＭ（Ｌｉｎｋ  Ａｃｃｅｓｓ  Ｐｒｏｃｅｄｕｒｅ  ｆｏｒ  Ｍｏｄｅｍ）を用いる。これは、ＩＴＵ−ＴのＶ．４２：エラー訂正勧告に記載されているエラー訂正方法である。さらに、Ｖ．４２ｂｉｓ等のデータ圧縮処理も、このコントローラタスクとして位置づけることができる。
これらの各々の処理（コントローラサブタスク）は、処理すべきデータがあればそれを行い、無ければ次へ進む、いわゆるラウンドロビンの構成をとっている。
【００２５】
コントローラ（以下、ＣＴ）処理で必要なイベント発生は、ＣＴリソースの割込み処理（ホスト通信等）で発生されるか、または、ＤＰから与えられる復調データやＤＰに与えるべき変調されるデータの蓄積で生じるように構成する。また、ＣＴ  ＴＡＳＫ処理中は基本的に割込み可とする。
ＤＰの起動要求が無い場合、このようにＣＴのみがラウンドロビンで実行されていく。
【００２６】
（コントローラタスクの動作）
図２は、コントローラタスク（ＣＴ）の内訳を示すフローチャートである。
ＣＴ−ＤＰメッセージ処理（ステップ２０１）は、ＤＰ部とのコマンドまたはステータスや送受信データのやりとりを行う。
エラー訂正、データ圧縮処理（ステップ２０３）は、前述したように、Ｖ．４２、Ｖ．４２bisの処理を行う。ここが、コントローラタスク（ＣＴ）ではもっとも処理量が多く、生成されたイベント（ＤＴＥからの送信データの圧縮とエラー訂正用フレーム生成、再送、およびＤＰからの受信データのエラーチェック、再送要求処理、データ伸張処理）を全部処理するためには、ＡＤのサンプリングタイミング間隔で完了しない。そのため、この部分の実行中にＤＰタスク要求がある場合に、ＤＰにタスクを切り替える必要がある。
【００２７】
外部事象チェック処理（ステップ２０６）は、外部電話のフックの状態やＩＯポートの状態をチェックして、必要に応じてイベントを生成する。
ＳＷ-ＥＮＡＢＬＥ（ステップ２０２，２０５）は、タスクスイッチの許可または非許可を制御する変数である。この例では、エラー訂正、データ圧縮処理を実行中にのみ、ＳＷ_ＥＮＡＢＬＥ＝１とする。
これは、このＳＷ_ＥＮＡＢＬＥ＝１の期間だけ、ＤＰへのスイッチを許可する動作である。
【００２８】
この変数の存在意味は２つある。
（１）前述したように、ＣＴ_ＴＡＳＫ内でのほとんどの実行時間は、エラー訂正、データ圧縮部が使うので、この部分でタスクを切り替える必要がある。
（２）メッセージ処理や、外部事象チェック処理は、一連の処理を一貫して(中断せずに)実行しないと矛盾を起こす場合が多いため、その時点でＤＰに切り替えたくない。また、処理時間そのものはさほど長くないので、切り替える必要もない。
つまり、ＤＰへのタスクスイッチは、このＳＷ_ＥＮＡＢＬＥ変数を参照することにより、エラー訂正、データ圧縮部のみで起こるように構成できる。
メッセージ処理や、外部事象チェック処理中に、ＡＤ割り込みが入り、ＤＰタスクへの起動要求が生じた場合は、ＳＷ_ＰＥＮＤ＝１とされている。これは、ＤＰへのスイッチ要求はあったが、ＳＷ_ＥＮＡＢＬＥ＝０だったため、その時点ではスイッチを行わなかったことを示している。
【００２９】
この場合、図２のフローに示したように、エラー訂正部（ステップ２０４）に入った時点で、ＴＡＳＫＳＷ２の処理によって、ＤＰへの切り替えが行われるように構成している。すなわち、ＣＴ  ＤＰメッセージ処理（ステップ２０１）が終了すると、ＳＷ  ＥＮＡＢＬ＝１に設定し（ステップ２０２）、次に、ＳＷ  ＰＥＮＤ＝１、つまりＤＰタスクへの起動要求が生じているか否かを判別し（ステップ２０３）、要求が生じていれば、ＴＡＳＫＳＷ２を動作して切り換え、アドレス、レジスタ、スタックを保存して、ＤＰ処理の先頭へジャンプする。同時に、ＳＷ  ＰＥＮＤ＝０とする（ステップ２０７）。これにより、処理がＤＰ処理先頭にジャンプする（ステップ２０８）。
一方、ＳＷ  ＰＥＮＤ＝０、つまりＤＰタスクへの起動要求が生じていない場合には、エラー訂正、データ圧縮処理を開始し（ステップ２０４）、終了とともに、ＳＷ  ＥＮＡＢＬＥ＝０に設定する（ステップ２０５）。次に、外部事象チェック処理を開始する（ステップ２０６）。これが終了すると、最初に戻って、ＣＴ-ＤＰメッセージ処理を行う（ステップ２０１）。
【００３０】
（ＡＤ割込みとＤＰへのタスクスイッチ）
図１に戻り、ＡＤ割り込みとＤＰへのタスクスイッチを説明する。
データポンプ（ＤＰ）の受信処理（ステップ１０１）は、ＡＤコンバータ１５からの入力信号が起動イベントとなる。同様にＤＰ送信処理（ステップ１０２）も、ＤＡコンバータ１６へデータを出さなければならないタイミングが起動イベントである。本実施例では、前述のように、ＡＤコンバータ１５とＤＡコンバータ１６は同期しているため、ＡＤ割り込みによって、ＤＡへの送信処理の起動を行う。ＤＰ受信処理とＤＰ送信処理が終了すると、ＣＴメッセージ処理（ステップ１０３）を行い、ＤＰタスクが完了するまで、これを繰り返し行う（ステップ１０４）。
【００３１】
ＡＤ割込処理（ステップ１０７）は、ＤＳＰに接続されたＡＤコンバータ１５の変換終了時にハードウエア割り込みとして起動される処理である。ここでは、それに必要なデータ送受信データのバッファリング等の処理を行う。これによりＤＰ処理が必要となる場合は、フラグ等を用いることにより、ＤＰメインレベルの各タスクに通知されるようにする。
割り込みで必要な処理が終了した後、割込み前の処理（つまり、割り込んだタスク）がＣＴでなければ（ステップ１０８）、そのまま通常復帰（ＲＴＮ）する。
【００３２】
割り込み先がＣＴであれば（ステップ１０８）、ＳＷ_ＥＮＡＢＬＥをチェックする（ステップ１０９）。これが０（偽）であれば、この時点では、すぐにスイッチできないので、後ほどスイッチできるように、ＴＡＳＫＰＥＮＤ処理で、ＳＷ_ＰＥＮＤ＝１にする（ステップ１１１）。このフラグを参照することによって、前述したとおりＣＴ_ＴＡＳＫが、ＤＰへスイッチ可能となった時点でスイッチする。
割り込み前の処理がＣＴで、かつＳＷ_ＥＮＡＢＬＥが真であれば、ＴＡＳＫＳＷ処理へ進む（ステップ１１０）。ここでは、その時点のＣＴの状態（レジスターや「次」エントリーポイント等の復帰に必要なアドレス＝プログラムカウンタおよびスタックの内容等）を別途予約したメモリーに保存して、ＤＰ処理先頭にジャンプする。
この例では、ＤＰはＣＴにタスクを切り替えるとき、常にやり残したことはないので、ＤＰ再起動されるときはＤＰ先頭（ステップ１０１）に飛んでよい。
【００３３】
ＤＰ処理は、通常走行レベル（割り込みＰＣスタック未消費レベル）での実行である。このようにすることで、多重割り込みシステムにすることなく、他の割り込み（ＤＴＥシリアルやタイマー）が、入れるようにしている。
この処理の際に「次」エントリーポイント（ＰＣ）を保存する時、ＰＣスタックはポップされているので、スタックの不全は起こらない。
【００３４】
ＤＰで必要な信号処理のすべてを割り込み処理内で行うことは一般的でない。これは、割り込み時間が長くなり、多重割り込みシステムで破綻を起こしやすくなること、また、複数のＡＤ割り込みによる複数のサンプリングデータを元に、ある特定の処理（通常モデムの１シンボルは複数サンプルから生成される）を行わなければならない要求などによる。そのために、通常走行レベルでの、ＤＰ処理へのタスク切り替えが必要である。
【００３５】
ＤＰ処理では、ＡＤ割り込みによって発生したイベントの要求に基づいて、受信や送信の信号処理を行う（ステップ１０１，１０２）。
この処理の最中にも、新たなＡＤ割り込みにより、処理要求が発生している場合があるので、一連の処理の後に、この新規ＤＰタスク要求をチェックする。依然、要求があれば、ＤＰ処理を続ける。
新規のＤＰタスク要求が無ければ（ステップ１０４）、ＴＡＳＫＢＡＣＫ処理へ進む（ステップ１０５）。
【００３６】
ＴＡＳＫＢＡＣＫ（ステップ１０４）はコントロールタスク（ＣＴ_ＴＡＳＫ）のエントリーポイントやレジスタの復帰を行うモジュールである。この処理では、ＴＡＳＫＳＷやＴＡＳＫＳＷ２でメモリに保存した、ＣＴ_ＴＡＳＫ内のエントリーポイントへジャンプする。図中の※印はその意味で使われている。
これは、その都度、ジャンプして戻るアドレスが異なっていることを示している。
【００３７】
復帰したＣＴ_ＴＡＳＫは、中断されていたタスクを引き続き実行する。
このように、コントローラ（ＣＴ_ＴＡＳＫ）は、データポンプＤＰの存在を意識することはない。つまり、一連のコントローラタスク（プログラム）として閉じて考えられ、記述できる。
これは、従来のＣＰＵで実装されてきたコントローラソフトなどを移植する際にも、非常に有利なことである。
【００３８】
ＤＰとＣＴのＩ／Ｆメッセージは、変復調を行ったデータそのものである。
このデータ列をソフトウエアＦＩＦＯとして構成したメモリに蓄えて、その量や有無を持って、双方の起動イベントとする。
さらに、メッセージにはＤＰとＣＴの間で動作指示したり、状態を通知するためのコマンドまたはステータスも定義される。
また、ＣＴには別途、ＤＴＥホストとのＩ／Ｆに依って起動されるイベントもあり（ＡＴコマンド等）、それらは、前述したように、ＣＴリソース用の割り込み処理やポーリングなどによって、そのイベントをチェックするように構成する。
【００３９】
本発明の主眼は、コントローラとデータポンプという主要な２つのタスクと、それぞれのサブタスクを、最小のリソース消費でスイッチングすることである。
ＲＴＯＳを用いずに、コントローラのタスクにデータポンプのタスクが入り込む用にスイッチする（プリエンプト）するように構成した。さらに、ＤＰは常に同じスタートポイントから始まり、同じエンドポイントで完了するので、ＤＰ用のパラメーター(アドレス、スタック、レジスタ)の保存は必要ない。
【００４０】
（プログラムと記録媒体）
図１に示した本発明のファームウェア全体のフローおよび図２に示したＣＴ  ＴＡＳＫの詳細フローをコンピュータに実行させるためのプログラムに変換し、ＣＤ−ＲＯＭなどの記録媒体に格納しておけば、既存のモデムにこの記録媒体を装着し、ＤＳＰにインストールして実行させることにより、本発明を容易に実行することができる。
【００４１】
【発明の効果】
以上説明したように、本発明によれば、モデムコントローラタスクはそれ自体を閉じた一つのサブタスク集合体（つまりプログラム）として、記述することが可能となる。また、コントローラタスクのうち、処理が重く、データポンプにスイッチが必要な部分のみスイッチさせることができる。
【００４２】
さらに、コントローラタスクのうち、処理の時間的一貫性が必要で、軽い部分は、データポンプにスイッチさせないこともできる。モデムデータポンプは、データポンプ処理が必要なときに、ポンプ処理を優先させて実行することができる。
このように、本発明によれば、複雑で大規模なＲＴＯＳ利用しないで、リソース消費が少ないワンチップモデムに必要十分なタスク切り替えが実現できる。
【図面の簡単な説明】
【図１】本発明の一実施例を示すファームウェア全体とタスクスイッチの動作フローチャートである。
【図２】本発明の一実施例を示すＣＴ  ＴＡＳＫ詳細動作のフローチャートである。
【図３】本発明の一実施例を示すワンチップＤＳＰモデムの構成図である。
【図４】従来のＲＴＯＳのタスク管理遷移図である。
【符号の説明】
１０…ワンチップＤＳＰモデム、１１…シリアルポート、１２…ＤＳＰ、
１３…プログラムメモリ、１４…ワークＲＡＭ、１５…ＡＤコンバータ、
１６…ＤＡコンバータ、１７…ＤＡＡ、２０…ＤＴＥ、３０…電話回線、
４１…実行可能態状、４２…実行状態、４３…待ち状態、
４４…強制待ち状態、４５…休止状態。
【図１】
0003925263.tif 000002
【図２】
0003925263.tif 000003
【図３】
0003925263.tif 000004
【図４】
0003925263.tif 000005