(57)【要約】【構成】ＣＰＵ２４は、アプリケーションバッファエリア２０ｃを占有するアプリケーションタスクとリングバッファエリア２０ｂを占有するＴＣＰ／ＩＰタスクとを並列的に実行する。アプリケーションタスクは、データ生成処理によってアプリケーションバッファエリア２０ｃに格納されたデータのサイズが閾値以下であるか否かを判別する。アプリケーションタスクはまた、判別結果が肯定的であるときアプリケーションバッファエリア２０ｃ上のデータをリングバッファエリア２０ｂに複製してデータ送信指示を発行する一方、判別結果が否定的であるときアプリケーションバッファエリア２０ｃの占有権をＴＣＰ／ＩＰタスクに一時的に付与してデータ送信指示を発行する。ＴＣＰ／ＩＰタスクは、自ら占有するメモリエリア上の送信データをデータ送信指示に応答して送信する。【効果】通信速度の高速化が図られる。【選択図】図１
2010055214.tif 000002
【特許請求の範囲】
【請求項１】
第１メモリエリアを占有する第１タスクと第２メモリエリアを占有する第２タスクとを並列的に実行するプロセッサを備えるデータ処理装置であって、
前記第１タスクによって実行される処理は、
データ生成処理によって前記第１メモリエリアに格納されたデータのサイズが閾値以下であるか否かを判別する第１判別処理、
前記第１判別処理の判別結果が肯定的であるとき前記第１メモリエリア上のデータを第２メモリエリアに複製してデータ送信指示を発行する第１発行処理、および
前記第１判別手段の判別結果が否定的であるとき前記第１メモリエリアの占有権を前記第２タスクに一時的に付与して前記データ送信指示を発行する第２発行処理を含み、
前記第２タスクによって実行される処理は、
前記第２タスクによって占有されたメモリエリア上のデータを前記データ送信指示に応答して送信する送信処理を含む、データ処理装置。
【請求項２】
前記第１タスクによって実行される処理は、前記第２タスクが前記第１メモリエリアの占有権を放棄するまで前記データ生成処理を禁止する禁止する禁止処理をさらに含む、請求項１記載のデータ処理装置。
【請求項３】
前記第２タスクによって実行される処理は、
前記第１メモリエリア上のデータのサイズが前記閾値以下であるか否かを前記第２発行処理に関連して繰り返し判別する第２判別処理、および
前記第２判別処理の判別結果が否定的な結果から肯定的な結果に更新されたとき前記第１メモリエリア上のデータを前記第２メモリエリアに複製する複製処理をさらに含む、請求項１または２記載のデータ処理装置。
【請求項４】
前記第２タスクによって実行される処理は、
前記複製処理に関連して前記第１メモリエリアの占有権を放棄する放棄処理をさらに含む、請求項３記載のデータ処理装置。
【請求項５】
前記第１タスクによって実行される処理は、
前記第１メモリエリアおよび／または前記第２メモリエリアのデータ格納状態を示す状態変数を前記第１発行処理および／または前記第２発行処理に関連して更新する第１更新処理をさらに含み、
前記第２タスクによって実行される処理は、
前記状態変数を前記送信処理に関連して更新する第２更新処理をさらに含む、請求項１ないし４のいずれかに記載のデータ処理装置。
【請求項６】
前記送信処理は、前記状態変数を参照してデータ格納状態を判別するデータ格納状態判別処理、および送信すべきデータを前記データ格納状態判別処理の判別結果に基づいて指定する指定処理を含む、請求項１ないし５のいずれかに記載のデータ処理装置。
【請求項７】
前記指定処理は、送信すべきデータが前記第１メモリエリアおよび前記第２メモリエリアの両方に存在するとき前記第２メモリエリアを優先的に指定する優先指定処理を含む、請求項６記載のデータ処理装置。
【請求項８】
前記閾値は前記第２メモリエリアの空き容量に相当する、請求項１ないし７のいずれかに記載のデータ処理装置。
【請求項９】
前記プロセッサは前記第１タスクおよび前記第２タスクを時分割態様で起動する、請求項１ないし８のいずれかに記載のデータ処理装置。
【請求項１０】
データ処理装置のプロセッサによって並列的に実行される第１タスクおよび第２タスクを含むデータ処理プログラムであって、
前記第１タスクおよび前記第２タスクはそれぞれ第１メモリエリアおよび第２メモリエリアを占有し、
前記第１タスクによって実行される処理は、
データ生成処理によって前記第１メモリエリアに格納されたデータのサイズが閾値以下であるか否かを判別する第１判別処理、
前記第１判別処理の判別結果が肯定的であるとき前記第１メモリエリア上のデータを第２メモリエリアに複製してデータ送信指示を発行する第１発行処理、および
前記第１判別手段の判別結果が否定的であるとき前記第１メモリエリアの占有権を前記第２タスクに一時的に付与して前記データ送信指示を発行する第２発行処理を含み、
前記第２タスクによって実行される処理は、
前記第２タスクによって占有されたメモリエリア上のデータを前記データ送信指示に応答して送信する送信処理を含む、データ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、データ処理装置に関し、特に所望の送信データを外部に送信する、データ処理装置に関する。
【背景技術】
【０００２】
この種の装置の一例が、特許文献１に開示されている。この背景技術によれば、メモリ／ＬＡＮカートリッジのＣＦメモリに記録された画像ファイルは、ファイル送信タスクの下で読み出され、ＳＤＲＡＭの送信ファイル格納エリアに書き込まれる。画像ファイルは続いて、同じファイル送信タスクの下で暗号化処理を施され、暗号化された画像ファイルはメモリ／ＬＡＮカートリッジのワイヤレスＬＡＮカードに転送される。転送された画像ファイルはその後、ワイヤレスＬＡＮカードによって所望の宛先のサーバに送信される。ファイル送信に成功すると、送信済みの画像ファイルがＣＦメモリから削除され、ＣＦメモリに記録された次の画像ファイルが上述と同様の処理を施される。
【特許文献１】特開２００４−２７４５２５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、背景技術では、ワイヤレスＬＡＮカードがファイル送信に成功しない限り、次の画像ファイルがＣＦメモリから読み出されることはなく、ファイル送信に時間がかかるという問題がある。
【０００４】
それゆえに、この発明の主たる目的は、通信速度を高速化できる、データ処理装置を提供することである。
【課題を解決するための手段】
【０００５】
この発明に従うデータ処理装置(10：実施例で相当する参照符号。以下同じ)は、第１メモリエリア(20c)を占有する第１タスクと第２メモリエリア(20b)を占有する第２タスクとを並列的に実行するプロセッサ(24)を備えるデータ処理装置(10)であって、第１タスクによって実行される処理は、データ生成処理によって第１メモリエリアに格納されたデータのサイズが閾値以下であるか否かを判別する第１判別処理(S15)、第１判別処理の判別結果が肯定的であるとき第１メモリエリア上のデータを第２メモリエリアに複製してデータ送信指示を発行する第１発行処理(S17, S21)、および第１判別手段の判別結果が否定的であるとき第１メモリエリアの占有権を第２タスクに一時的に付与してデータ送信指示を発行する第２発行処理(S23, S33)を含み、第２タスクによって実行される処理は、第２タスクによって占有されたメモリエリア上のデータをデータ送信指示に応答して送信する送信処理(S57~S69)を含む。
【０００６】
プロセッサは、第１メモリエリアを占有する第１タスクと第２メモリエリアを占有する第２タスクとを並列的に実行する。第１タスクによって実行される処理は、第１判別処理，第１発行処理および第２発行処理を含む。第２タスクによって実行される処理は、送信処理を含む。
【０００７】
第１判別処理は、データ生成処理によって第１メモリエリアに格納されたデータのサイズが閾値以下であるか否かを判別する処理に相当する。第１発行処理は、第１判別処理の判別結果が肯定的であるとき第１メモリエリア上のデータを第２メモリエリアに複製してデータ送信指示を発行する処理に相当する。
【０００８】
第２発行処理は、第１判別手段の判別結果が否定的であるとき第１メモリエリアの占有権を第２タスクに一時的に付与してデータ送信指示を発行する処理に相当する。送信処理は、第２タスクによって占有されたメモリエリア上のデータをデータ送信指示に応答して送信する処理に相当する。
【０００９】
したがって、閾値以下のサイズを有するデータは、第２メモリエリアを経て送信される。第１メモリエリアは第２メモリエリアへのデータの複製によって解放され、これによってデータ生成処理が速やかに再開される。
【００１０】
一方、閾値を上回るサイズを有するデータは、第２メモリエリアを経ることなく送信される。このとき第１メモリエリアの占有権は第２タスクに付与され、これによって第２タスクの下での送信処理が集中的に実行される。
【００１１】
つまり、サイズが閾値以下のデータについてはデータ生成処理の速やかな再開を通じて通信速度の高速化が図られ、サイズが閾値を上回るデータについては送信処理の集中的な実行を通じて通信速度の高速化が図られる。
【００１２】
好ましくは、第１タスクによって実行される処理は、第２タスクが第１メモリエリアの占有権を放棄するまでデータ生成処理を禁止する禁止する禁止処理(S35)をさらに含む。
【００１３】
好ましくは、第２タスクによって実行される処理は、第１メモリエリア上のデータのサイズが閾値以下であるか否かを第２発行処理に関連して繰り返し判別する第２判別処理(S161)、および第２判別処理の判別結果が否定的な結果から肯定的な結果に更新されたとき第１メモリエリア上のデータを第２メモリエリアに複製する複製処理(S163)をさらに含む。
【００１４】
さらに好ましくは、第２タスクによって実行される処理は、複製処理に関連して第１メモリエリアの占有権を放棄する放棄処理(S167)をさらに含む。
【００１５】
好ましくは、第１タスクによって実行される処理は、第１メモリエリアおよび／または第２メモリエリアのデータ格納状態を示す状態変数(SB_STATE, FLG)を第１発行処理および／または第２発行処理に関連して更新する第１更新処理(S19, S27~S31)をさらに含み、第２タスクによって実行される処理は、状態変数を送信処理に関連して更新する第２更新処理(S153, S169, S175)をさらに含む。
【００１６】
好ましくは、送信処理は、状態変数を参照してデータ格納状態を判別するデータ格納状態判別処理(S81, S85, S87)、および送信すべきデータをデータ格納状態判別処理の判別結果に基づいて指定する指定処理(S83, S89, S93, S99~S103)を含む。
【００１７】
さらに好ましくは、指定処理は、送信すべきデータが第１メモリエリアおよび第２メモリエリアの両方に存在するとき第２メモリエリアを優先的に指定する優先指定処理(S99, S103)を含む。
【００１８】
好ましくは、閾値は第２メモリエリアの空き容量に相当する。
【００１９】
好ましくは、プロセッサは第１タスクおよび第２タスクを時分割態様で起動する。
【００２０】
この発明に従うデータ処理プログラムは、データ処理装置(10)のプロセッサ(24)によって並列的に実行される第１タスクおよび第２タスクを含むデータ処理プログラムであって、第１タスクおよび第２タスクはそれぞれ第１メモリエリア(20c)および第２メモリエリア(20b)を占有し、第１タスクによって実行される処理は、データ生成処理によって第１メモリエリアに格納されたデータのサイズが閾値以下であるか否かを判別する第１判別処理(S15)、第１判別処理の判別結果が肯定的であるとき第１メモリエリア上のデータを第２メモリエリアに複製してデータ送信指示を発行する第１発行処理(S17, S21)、および第１判別手段の判別結果が否定的であるとき第１メモリエリアの占有権を第２タスクに一時的に付与してデータ送信指示を発行する第２発行処理(S23, S33)を含み、第２タスクによって実行される処理は、第２タスクによって占有されたメモリエリア上のデータをデータ送信指示に応答して送信する送信処理(S57~S69)を含む。
【発明の効果】
【００２１】
この発明によれば、サイズが閾値以下のデータについてはデータ生成処理の速やかな再開を通じて通信速度の高速化が図られ、サイズが閾値を上回るデータについては送信処理の集中的な実行を通じて通信速度の高速化が図られる。
【００２２】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【発明を実施するための最良の形態】
【００２３】
図１を参照して、この実施例のディジタルカメラ１０は、光学レンズ１２を含む。被写界を表す光学像は、光学レンズ１２を通して撮像装置１４の撮像面に照射される。撮像面では、被写界を表す電荷が光電変換によって生成される。
【００２４】
電源が投入されると、ＣＰＵ２４は、アプリケーションタスクの下でデータ生成処理および送信前処理を交互に実行する。ＣＰＵ２４はまた、ＴＣＰ／ＩＰタスクの下で送信処理および確認処理を交互に実行する。
【００２５】
撮像装置１４は、アプリケーションタスクの下にあるデータ生成処理に関連して起動される。この結果、撮像面で生成された電荷に基づく生画像信号が撮像装置１４から出力される。カメラ処理回路１６は、撮像装置１４から出力された生画像信号に色分離，白バランス調整，ＹＵＶ変換などの処理を施し、さらにＹＵＶ形式の画像データを既定のフォーマットで圧縮する。メモリ制御回路２０は、カメラ処理回路１６によって生成された圧縮画像データを、図示しない外部のＰＣ(Personal Computer)に向けて送信するための送信データとしてＳＤＲＡＭ２０に書き込む。
【００２６】
このようなデータ生成処理によってＳＤＲＡＭ２０に格納された送信データは、アプリケーションタスクの下で送信前処理を施され、さらにＴＣＰ／ＩＰタスクの下で送信処理を施される。送信データは、メモリ制御回路１８によって読み出され、通信Ｉ／Ｆ２２によってＰＣに向けて送信される。送信データを受信したＰＣからは、受信確認通知が返送される。受信確認が取れた送信データは、ＴＣＰ／ＩＰタスクの下の確認処理によってＳＤＲＡＭ２０から削除される。
【００２７】
なお、送信データは１または２以上のオクテットによって形成され、各オクテットには識別番号つまりオクテット番号が付与される。また、送信データのサイズは、オクテット単位で表現される。
【００２８】
ＳＤＲＡＭ２０は、フレームバッファエリア２０ａ，リングバッファエリア２０ｂおよびアプリケーションバッファエリア２０ｃを含む。このうち、フレームバッファエリア２０ａおよびリングバッファエリア２０ｂはＴＣＰ／ＩＰタスクによって占有され、アプリケーションバッファエリア２０ｃはアプリケーションタスクによって占有される。ただし、後述するように、アプリケーションバッファエリア２０ｃの占有権は、リングバッファエリア２０ｂのデータ格納状態によって、一時的にＴＣＰ／ＩＰタスクに付与される。
【００２９】
アプリケーションタスクの下での送信前処理、ならびにＴＣＰ／ＩＰタスクの下での送信処理および確認処理は、以下で述べる要領で実行される。このとき、表１に示す各種の変数またはシーケンス番号が用いられる。
【表１】
2010055214.tif 000003
【００３０】
表１を参照して、変数ＳＢ＿ＳＴＡＴＥはリングバッファ２０ｂおよび／またはアプリケーションバッファエリア２０ｃのデータ格納状態を示す変数であり、“空”，“リングバッファエリア”および“アプリケーションバッファエリア”のいずれか１つに相当する数値を示す。
【００３１】
ここで、“ＳＢ＿ＳＴＡＴＥ＝空”は、リングバッファ２０ｂおよびアプリケーションバッファエリア２０ｃのいずれにも送信データが格納されていない状態を示す。また、“ＳＢ＿ＳＴＡＴＥ＝リングバッファエリア”は、リングバッファ２０ｂにのみ送信データが格納されている状態を示す。さらに、“ＳＢ＿ＳＴＡＴＥ＝アプリケーションバッファエリア”は、リングバッファ２０ｂおよびアプリケーションバッファエリア２０ｃの両方に送信データが格納されている状態を示す。
【００３２】
変数ＲＢ＿ＳＴＡＲＴは、リングバッファエリア２０ｂの読み出し開始位置を示す変数である。変数ＲＢ＿ＳＺは、リングバッファエリア２０ｂに格納されかつ未だ受信確認が取れていない送信データのサイズを示す変数である。
【００３３】
変数ＡＢ＿ＳＴＡＲＴは、アプリケーションバッファエリア２０ｃの読み出し開始位置を示す変数である。変数ＡＢ＿ＳＺは、アプリケーションバッファエリア２０ｃに格納されかつ未だ受信確認が取れていない送信データのサイズを示す変数である。
【００３４】
シーケンス番号ＳＮＤ＿ＵＮＡは、ＰＣに向けて送信されたものの未だ受信確認がとれていない送信データの先頭のオクテット番号から“１”を減算したオクテット番号に相当する。シーケンス番号ＳＮＤ＿ＮＸＴは、ＰＣに向けて送信されたものの未だ受信確認がとれていない送信データの末尾のオクテット番号に相当する。シーケンス番号ＳＥＧ＿ＡＣＫは、受信確認が取れた送信データの末尾のオクテット番号に相当する。
【００３５】
データ生成処理によって生成された送信データは、アプリケーションバッファエリア２０ｃに格納される。アプリケーションタスクの下にある送信前処理では、アプリケーションバッファエリア２０ｃに格納された送信データのサイズがリングバッファエリア２０ｂの空き容量以下であるか否かが判別され、判別結果に応じて異なる処理が実行される。
【００３６】
つまり、判別結果が肯定的であれば、送信データは、図３に示すようにリングバッファエリア２０ｂにコピー（複製）される。続いて、変数ＳＢ＿ＳＴＡＴＥが“リングバッファエリア”に相当する数値に設定され、変数ＲＢ＿ＳＺが更新される（図２（Ａ）参照）。変数ＳＢ＿ＳＴＡＴＥおよびＲＢ＿ＳＺの更新が完了すると、データ送信指示がＴＣＰ／ＩＰタスクに向けて発行される。データ生成処理は、データ送信指示が発行された後に速やかに再開される。
【００３７】
一方、判別結果が否定的であれば、図４に示すように、アプリケーションバッファエリア２０ｃの占有権がＴＣＰ／ＩＰタスクに付与される。次に、変数ＳＢ＿ＳＴＡＴＥの値が判別され、フラグＦＬＧが変数ＳＢ＿ＳＴＡＴＥの値に応じて異なる値に設定される。つまり、変数ＳＢ＿ＳＴＡＴＥが“空き”に相当する数値を示していればフラグＦＬＧは“０”に設定される一方、変数ＳＢ＿ＳＴＡＴＥが“リングバッファエリア”に相当する数値を示していればフラグＦＬＧは“１”に設定される。フラグＦＬＧの設定が完了すると、変数ＳＢ＿ＳＴＡＴＥが“アプリケーションバッファエリア”に相当する数値に更新される。続いて、変数ＡＢ＿ＳＴＡＲＴが“０”に設定され、変数ＡＢ＿ＳＺが更新される。
【００３８】
したがって、図２（Ｂ）に示すように、フラグＦＬＧは、変数ＳＢ＿ＳＴＡＴＥが“空”に相当する数値から“アプリケーションバッファエリア”に相当する数値に更新されたとき“０”を示す。フラグＦＬＧはまた、変数ＳＢ＿ＳＴＡＴＥが“リングバッファエリア”に相当する数値から“アプリケーションバッファエリア”に相当する数値に更新されたとき“１”を示す。
【００３９】
データ送信指示は、変数ＳＢ＿ＳＴＡＴＥ，ＡＢ＿ＳＴＡＲＴおよびＡＢ＿ＳＺがこうして更新された後に、ＴＣＰ／ＩＰタスクに向けて発行される。データ生成処理は、アプリケーションバッファエリア２０ｃの占有権の返還がＴＣＰ／ＩＰタスクから通知された後に再開される。
【００４０】
したがって、送信データをリングバッファエリア２０ｂにコピーする場合、データ送信指示は、図９（Ａ）に示すように連続的に発行される。これに対して、アプリケーションバッファエリア２０ｃの占有権をＴＣＰ／ＩＰタスクに付与する場合、データ送信指示は、図９（Ｂ）に示すように占有権の返還がＴＣＰ／ＩＰタスクから通知される毎に発行される。
【００４１】
ＴＣＰ／ＩＰタスクの下にある送信処理は、アプリケーションタスクからのデータ送信指示に応答して実行される。送信処理ではまず、今回の処理動作でＰＣに向けて送信できる送信データのサイズが送信可能サイズＴＤ＿ＳＺとして決定され、決定された送信可能サイズＴＤ＿ＳＺに相当する空き容量がフレームバッファエリア２０ａに確保される。続いて、送信可能サイズＴＤ＿ＳＺに相当する送信データが、リングバッファエリア２０ｂまたはアプリケーションバッファエリア２０ｃからフレームバッファエリア２０ａにコピーされる（図５または図６参照）。フレームバッファ２０ａへのコピーによって、今回の処理動作によってＰＣに送信すべき送信データが指定される。
【００４２】
コピーされた送信データは、図１に示すメモリ制御回路１８および通信Ｉ／Ｆ２２を経て、パケット化された状態でＰＣに向けて送信される。このような送信可能サイズＴＤ＿ＳＺの算出からＰＣへの送信までの処理動作は、送信可能サイズＴＤ＿ＳＺが“０”以下になるか、あるいは受信確認が取れていない送信データのサイズ（＝後述するオフセットＯＦＳＴ）が閾値ＳＮＤ＿ＷＮＤを下回るまで、繰り返し実行される。
【００４３】
送信可能サイズＴＤ＿ＳＺは、次の要領で決定される。まず、送信待ちサイズＷＴ＿ＳＺが数式１に従って算出される。
［数式１］
【００４４】
ＷＴ＿ＳＺ＝ＲＢ＿ＳＺ＋ＡＢ＿ＳＺ−ＯＦＳＴ
【００４５】
数式１によれば、変数ＲＢ＿ＳＺおよびＡＢ＿ＳＺが互いに加算され、これによって得られた加算値からオフセットＯＦＳＴが減算される。オフセットＯＦＳＴは、受信確認が取れていない送信データのサイズに相当し、シーケンス番号ＳＮＤ＿ＮＸＴからシーケンス番号ＳＮＤ＿ＵＮＡを減算することによって取得される（図１０（Ａ）または図１０（Ｄ）参照）。したがって、送信待ちサイズＷＴ＿ＳＺは、リングバッファエリア２０ｂおよび／またはアプリケーションバッファエリア２０ｃで送信待ち状態にある送信データのサイズに相当する。
【００４６】
次に、算出された送信待ちサイズＷＴ＿ＳＺが最大パケットサイズＰＣＫｍａｘを上回るか否かが判別され、判別結果が肯定的であれば最大パケットサイズＰＣＫｍａｘが送信可能サイズＴＤ＿ＳＺとして決定される一方、判別結果が否定的であれば送信待ちサイズＷＴ＿ＳＺが送信可能サイズＴＤ＿ＳＺとして決定される。したがって、送信可能サイズＴＤ＿ＳＺは、最大パケットサイズＰＣＫｍａｘを上限として、送信待ちサイズＷＴ＿ＳＺと同じ値に設定される。
【００４７】
送信可能サイズＴＤ＿ＳＺに相当する送信データをリングバッファエリア２０ｂまたはアプリケーションバッファエリア２０ｃからフレームバッファエリア２０ａにコピーする処理は、次の要領で実行される。
【００４８】
変数ＳＢ＿ＳＴＡＴＥが“リングバッファエリア”に相当する数値を示していれば、送信可能サイズＴＤ＿ＳＺに相当する送信データは、図５に示す要領でリングバッファエリア２０ｂからフレームバッファエリア２０ａにコピーされる。
【００４９】
一方、変数ＳＢ＿ＳＴＡＴＥが“アプリケーションバッファエリア”に相当する数値を示していれば、フラグＦＬＧの値がさらに参照され、フラグＦＬＧの値に応じて異なる処理が実行される。
【００５０】
つまり、フラグＦＬＧが“０”を示していれば、送信可能サイズＴＤ＿ＳＺに相当する送信データは、図６に示す要領でアプリケーションバッファエリア２０ｃからフレームバッファエリア２０ａにコピーされる。
【００５１】
これに対して、フラグＦＬＧが“１”を示していれば、送信可能サイズＴＤ＿ＳＺに相当する送信データは、リングバッファエリア２０ｂおよびアプリケーションバッファエリア２０ｃに跨って格納されている可能性がある。
【００５２】
このため、上述のオフセットＯＦＳＴと変数ＲＢ＿ＳＺとの大小関係に基づいて送信可能サイズＴＤ＿ＳＺに相当する送信データの格納状態が判別され、判別結果に応じて異なる態様でデータコピー処理が実行される。
【００５３】
ＲＢ＿ＳＺ＞ＯＳＦＴであれば、今回の処理動作で送信すべき送信可能サイズＴＤ＿ＳＺの送信データは、図１１または図１２に示すように分布していると判別される。このときは、コピー可能サイズＣ＿ＳＺが数式２に従って算出され、算出されたコピー可能サイズＣ＿ＳＺが送信可能サイズＴＤ＿ＳＺと比較される。
［数式２］
Ｃ＿ＳＺ＝ＲＢ＿ＳＺ−ＯＦＳＴ
【００５４】
数２によれば、変数ＲＢ＿ＳＺからオフセットＯＦＳＴが減算される。したがって、コピー可能サイズＣ＿ＳＺは、リングバッファエリア２０ｂからコピー可能な送信データのサイズに相当する。
【００５５】
ＴＤ＿ＳＺ≦Ｃ＿ＳＺであれば、送信可能サイズＴＤ＿ＳＺの送信データは図１１に示す要領で分布しているとみなされ、この送信データがフレームバッファエリア２０ａにコピーされる。
【００５６】
ＴＤ＿ＳＺ＞Ｃ＿ＳＺであれば、送信可能サイズＴＤ＿ＳＺの送信データは図１２に示す要領で分布しているとみなされる。このときは、まずコピー可能サイズＣ＿ＳＺに相当する送信データがリングバッファエリア２０ｂからフレームバッファエリア２０ａにコピーされ、次に“ＴＤ＿ＳＺ−Ｃ＿ＳＺ”に相当する送信データがアプリケーションバッファエリア２０ｃからフレームバッファエリア２０ａにコピーされる（コピー動作の順序については、リングバッファエリア２０ｂからフレームバッファエリア２０ａへのコピー動作が優先）。
【００５７】
ＲＢ＿ＳＺ≦ＯＦＳＴであれば、送信可能サイズＴＤ＿ＳＺの送信データは図１３に示すように分布していると判別され、送信データはすべてアプリケーションバッファエリア２０ｃからフレームバッファエリア２０ａにコピーされる。
【００５８】
ＴＣＰ／ＩＰタスクの下にある確認処理では、ＰＣからの受信確認通知に記述されたシーケンス番号ＳＥＧ＿ＡＣＫが検出され、数式３に従って受信確認サイズＡＣＫ＿ＳＺが算出される。
［数式３］
ＡＣＫ＿ＳＺ＝ＳＥＧ＿ＡＣＫ−ＳＮＤ＿ＵＮＡ
【００５９】
数式３によれば、シーケンス番号ＳＥＧ＿ＡＣＫからシーケンス番号ＳＮＤ＿ＵＮＡが減算される。したがって、受信確認サイズＡＣＫ＿ＳＺは、受信確認が取れた送信データのサイズに相当する（図１０（Ｂ）参照）。
【００６０】
算出された受信確認サイズＡＣＫ＿ＳＺが“０”を上回れば、シーケンス番号ＳＥＧ＿ＡＣＫがシーケンス番号ＳＮＤ＿ＵＮＡとして設定され（図１０（Ｃ）参照）、受信確認が取れた送信データがリングバッファエリア２０ｂおよび／またはアプリケーションバッファエリア２０ｃから削除される。変数ＲＢ＿ＳＺおよび／またはＡＢ＿ＳＺは、データ削除処理に伴って更新される。
【００６１】
このような更新処理の後の変数ＲＢ＿ＳＺおよびＡＢ＿ＳＺの和が“０”を上回るときは、受信確認が未だ取れていない送信データがリングバッファエリア２０ｂおよび／またはアプリケーションバッファエリア２０ｃに残っているとみなされる。このときは、確認処理の下でデータ送信指示が再度発行される。上述したＴＣＰ／ＩＰタスクの下での送信処理は、このデータ送信指示に応答して再度実行される。
【００６２】
受信確認が取れた送信データをリングバッファエリア２０ｂおよび／またはアプリケーションバッファエリア２０ｃから削除する処理は、次の要領で実行される。
【００６３】
変数ＳＢ＿ＳＴＡＴＥが“リングバッファエリア”に相当する数値を示していれば、受信確認が取れた送信データは全てリングバッファエリア２０ｂに格納されているとみなされ、この送信データがリングバッファエリア２０ｂから削除される。さらに、変数ＲＢ＿ＳＺから送信確認サイズＡＣＫ＿ＳＺが減算され、変数ＲＢ＿ＳＴＡＲＴに送信確認サイズＡＣＫ＿ＳＺが積算される。減算後の変数ＲＢ＿ＳＺが“０”を示していれば、変数ＳＢ＿ＳＴＡＴＥは“空”に相当する数値に更新される。
【００６４】
変数ＳＢ＿ＳＴＡＴＥが“アプリケーションバッファエリア”に相当する数値を示していれば、フラグＦＬＧの状態がさらに判別され、判別結果に応じて異なる処理が実行される。
【００６５】
フラグＦＬＧが“０”を示していれば、受信確認が取れた送信データは全てアプリケーションバッファエリア２０ｃに格納されているとみなされ、この送信データがアプリケーションバッファエリア２０ｃから削除される。さらに、変数ＡＢ＿ＳＺから受信確認サイズＡＣＫ＿ＳＺが減算され、変数ＡＢ＿ＳＴＡＲＴに送信確認サイズＡＣＫ＿ＳＺが積算される。
【００６６】
減算後の変数ＡＢ＿ＳＺが“０”を示していれば、アプリケーションバッファエリア２０ｃの占有権が放棄され、変数ＳＢ＿ＳＴＡＴＥが“空”に相当する数値に更新される。さらに、アプリケーションタスクへの占有権の返還がアプリケーションタスクに通知される。
【００６７】
減算後の変数ＡＢ＿ＳＺが“０”を上回る数値を示していれば、変数ＡＢ＿ＳＺがリングバッファエリア２０ｂの空き容量以下であるか否かがさらに判別される。そして、判別結果が肯定的であれば、変数ＡＢ＿ＳＺに相当する送信データがアプリケーションバッファエリア２０ｃからリングバッファエリア２０ｂにコピーされ（図７参照）、変数ＲＢ＿ＳＺに変数ＡＢ＿ＳＺが設定され、そして変数ＲＢ＿ＳＴＡＲＴが“０”に設定される。
【００６８】
その後、アプリケーションバッファエリア２０ｃの占有権が放棄され、変数ＳＢ＿ＳＴＡＴＥが“リングバッファエリア”に相当する数値に設定され、返還通知がアプリケーションタスクに向けて発行される。リングバッファエリア２０ｂにコピーされた送信データは、ＴＣＰ／ＩＰタスクの下での送信処理によってＰＣに向けて送信される（図８参照）。
【００６９】
フラグＦＬＧが“１”を示していれば、送信確認サイズＡＣＫ＿ＳＺが変数ＲＢ＿ＳＺ以下であるか否かが判別され、判別結果に応じて異なる処理が実行される。
【００７０】
ＡＣＫ＿ＳＺ≦ＲＢ＿ＳＺであれば、受信確認が取れた送信データは全てリングバッファエリア２０ｂに格納されているとみなされ、この送信データがリングバッファエリア２０ｂから削除される。さらに、変数ＲＢ＿ＳＺから受信確認サイズＡＣＫ＿ＳＺが減算され、変数ＲＢ＿ＳＴＡＲＴに受信確認サイズＡＣＫ＿ＳＺが積算される。減算後の変数ＲＢ＿ＳＺが“０”を示していれば、変数ＳＢ＿ＳＴＡＴＥが“アプリケーションバッファエリア”に相当する数値に更新される。
【００７１】
ＡＣＫ＿ＳＺ＞ＲＢ＿ＳＺであれば、送信確認が取れた送信データはリングバッファエリア２０ｂおよびアプリケーションバッファエリア２０ｃに跨っているとみなされ、リングバッファエリア２０ｂの送信データが全て削除される。さらに、受信確認サイズＡＣＫ＿ＳＺから変数ＲＢ＿ＳＺが減算され、変数ＲＢ＿ＳＺおよび変数ＲＢ＿ＳＴＡＲＴが０”に設定される。削除処理が完了すると、送信確認が取れた送信データは、アプリケーションバッファエリア２０ｃにのみ残存する。したがって、これ以降は、フラグＦＬＧが“０”を示している場合における上述の処理と同様の処理が実行される。
【００７２】
ＣＰＵ２４は、図１４〜図１６に示すアプリケーションタスクおよび図１７〜図２７に示すＴＣＰ／ＩＰタスクを含む複数のタスクを、並列的に（時分割態様で）実行する。これらのタスクに対応する制御プログラムは、フラッシュメモリ２６に記憶される。
【００７３】
図１４を参照して、ステップＳ１では初期化処理を行う。これによって、変数ＲＢ＿ＳＴＡＲＴおよびＲＢ＿ＳＺの各々が“０”に設定され、変数ＳＢ＿ＳＴＡＴＥが“空”に相当する数値に設定される。ステップＳ３ではデータ生成処理を実行し、ステップＳ５では送信前処理を実行する。送信前処理が完了すると、ステップＳ３に戻る。
【００７４】
ステップＳ５の送信前処理は、図１５〜図１６に示すサブルーチンに従って実行される。まずステップＳ１１で変数ＳＢ＿ＳＴＡＴＥが“空”または“リングバッファエリア”に相当する数値を示すか否かを判別する。この時点で変数ＳＢ＿ＳＴＡＴＥが“アプリケーションバッファエリア”に相当する数値を示していれば、エラーが生じているとみなし、ステップＳ１３でエラー処理を実行してから上階層のルーチンに復帰する。
【００７５】
これに対して、変数ＳＢ＿ＳＴＡＴＥが“空”または“リングバッファエリア”に相当する数値を示していれば、直前のデータ生成処理によってアプリケーションバッファエリア２０ｃに格納された送信データのサイズがリングバッファエリア２０ｂの空き容量以下であるか否かをステップＳ１５で判別する。ここでＹＥＳであればステップＳ１７〜Ｓ２１の処理を経て上階層のルーチンに復帰し、ＮＯであればステップＳ２３〜Ｓ３５の処理を経て上階層のルーチンに復帰する。
【００７６】
ステップＳ１７では、アプリケーションバッファエリア２０ｃに格納された送信データをリングバッファエリア２０ｂにコピーする。ステップＳ１９では、変数ＳＢ＿ＳＴＡＴＥを“リングバッファエリア”に相当する数値に更新し、コピーされた送信データのサイズを変数ＲＢ＿ＳＺに積算する。ステップＳ１９の処理が完了すると、ＴＣＰ／ＩＰタスクに向けてデータ送信指示を発行し、その後に上階層のルーチンに復帰する。
【００７７】
ステップＳ２３ではアプリケーションバッファエリア２０ｃの占有権をＴＣＰ／ＩＰタスクに付与し、ステップ２５では変数ＳＢ＿ＳＴＡＴＥが“リングバッファエリア”に相当する数値を示すか否かを判別する。ここでＹＥＳであればステップＳ２７でフラグＦＬＧを“１”に設定する一方、ＮＯであればステップＳ２９でフラグＦＬＧを“０”に設定する。
【００７８】
ステップＳ３１では、変数ＳＢ＿ＳＴＡＴＥを“アプリケーションバッファエリア”に相当する数値に更新し、変数ＡＢ＿ＳＴＡＲＴを“０”に設定し、そして変数ＡＢ＿ＳＺを注目する送信データのサイズに設定する。ステップＳ３１の処理が完了すると、ステップＳ３３でデータ送信指示を発行し、占有権の返還がＴＣＰ／ＩＰタスクから通知されたか否かをステップＳ３５で判別する。判別結果がＮＯからＹＥＳに更新されると、アプリケーションバッファエリア２０ｃの占有権が放棄されたとみなし、上階層のルーチンに復帰する。したがって、アプリケーションバッファエリア２０ｃの占有権をＴＣＰ／ＩＰタスクに付与した場合、図１４に示すステップＳ３のデータ生成処理は、付与された占有権が返還されるまで禁止される。
【００７９】
図１７を参照して、ステップＳ４１では初期化処理を実行する。これによって、シーケンス番号ＳＮＤ＿ＵＮＡおよびＳＮＤ＿ＮＸＴが“０”に設定される。ステップＳ４３では送信処理を実行し、ステップＳ４５では確認処理を実行する。ステップＳ４５の処理が完了すると、ステップＳ４３に戻る。
【００８０】
ステップＳ４３の送信処理は、図１８に示すサブルーチンに従って実行される。まずデータ送信指示が発行されたか否かをステップＳ５１で判別する。ここでＮＯであればそのまま上階層のルーチンに復帰する一方、ＹＥＳであればステップＳ５３で現時点の状態が接続確立状態であるか否かを判別する。現時点の状態が接続確立状態と異なれば、ステップＳ５５でその他の処理を実行してから上階層のルーチンに復帰する。一方、現時点の状態が接続確立状態であれば、ステップＳ５７〜Ｓ６９の処理を経て上階層のルーチンに復帰する。
【００８１】
ステップＳ５７では、送信可能サイズＴＤ＿ＳＺを算出するべく、送信可能サイズ算出処理を実行する。ステップＳ５９では、算出された送信可能サイズＴＤ＿ＳＺが“０”を上回るか否かを判別する。また、ステップＳ６１では、オフセットＯＦＳＴ（＝ＳＮＤ＿ＮＸＴ−ＳＮＤ＿ＵＮＡ）が閾値ＳＮＤ＿ＷＮＤ以上であるか否かを判別する。ステップＳ５９およびＳ６１のいずれか一方でもＮＯであればそのまま上階層のルーチンに復帰する一方、ステップＳ５９およびＳ６１のいずれもＹＥＳであればステップＳ６３に進む。
【００８２】
ステップＳ６３では、送信可能サイズＴＤ＿ＳＺに相当する空き容量をフレームバッファエリア２０ａ内に確保する。ステップＳ６５では、送信可能サイズＴＤ＿ＳＺに相当する送信データをフレームバッファエリア２０ａにコピーするべく、データコピー処理を実行する。ステップＳ６７では、データコピー処理によってフレームバッファエリア２０ａ内に得られた送信可能データをＰＣに向けて送信する。ステップＳ６７の処理が完了すると、ステップＳ６９でシーケンス番号ＳＮＤ＿ＮＸＴに送信可能サイズＴＤ＿ＳＺを積算してからステップＳ５７に戻る。
【００８３】
ステップＳ５７の送信可能サイズ算出処理は、図２０に示すサブルーチンに従って実行される。まずステップＳ７１で、数式１に従って送信待ちサイズＷＴ＿ＳＺを算出する。ステップＳ７３では算出された送信待ちサイズＷＴ＿ＳＺが最大パケットサイズＲＣＫｍａｘを上回るか否かを判別し、ＹＥＳであれば“ＰＣＫｍａｘ”を送信可能サイズＴＤ＿ＳＺとして決定する一方、ＮＯであれば“ＷＴ＿ＳＺ”を送信可能サイズＴＤ＿ＳＺとして決定する。ステップＳ７５またはＳ７７の処理が完了すると、上階層のルーチンに復帰する。
【００８４】
図１９に示すステップＳ６５のデータコピー処理は、図２１〜図２２に示すサブルーチンに従って実行される。ステップＳ８１では変数ＳＢ＿ＳＴＡＴＥが“リングバッファエリア”に相当する数値を示すか否かを判別し、ステップＳ８５では変数ＳＢ＿ＳＴＡＴＥが“アプリケーションバッファエリア”に相当する数値を示すか否かを判別する。
【００８５】
ステップＳ８１でＹＥＳあればステップＳ８３に進み、送信可能サイズＴＤ＿ＳＺに相当する送信データをリングバッファエリア２０ｂからフレームバッファエリア２０ａにコピーする。コピー処理が完了すると、上階層のルーチンに復帰する。ステップＳ８１およびＳ８５のいずれもＮＯであれば、そのまま上階層のルーチンに復帰する。
【００８６】
ステップＳ８１でＮＯである一方、ステップＳ８５でＹＥＳであれば、ステップＳ８７でフラグＦＬＧの状態を判別する。フラグＦＬＧが“０”であればステップＳ８９に進み、送信可能サイズＴＤ＿ＳＺに相当する送信データをアプリケーションバッファエリア２０ｃからフレームバッファエリア２０ａにコピーする。コピー処理が完了すると、上階層のルーチンに復帰する。
【００８７】
フラグＦＬＧが“１”であればステップＳ８７からステップＳ９１に進み、変数ＲＢ＿ＳＺがオフセットＯＦＳＴを上回るか否かを判別する。ここでＮＯであれば、ステップＳ９３に進み、送信可能サイズＴＤ＿ＳＺに相当する送信データをアプリケーションバッファエリア２０ｃからフレームバッファエリア２０ａにコピーする（図１３参照）。コピー処理が完了すると、上階層のルーチンに復帰する。
【００８８】
ステップＳ９１でＹＥＳと判断されると、ステップＳ９５でコピー可能サイズＣ＿ＳＺを数式２に従って算出する。ステップＳ９７では算出されたコピー可能サイズＣ＿ＳＺが送信可能サイズＴＤ＿ＳＺを上回るか否かを判別し、ＹＥＳであればステップＳ９９〜Ｓ１０１の処理を経て上階層のルーチンに復帰する一方、ＮＯであればステップＳ１０３の処理を経て上階層のルーチンに復帰する。
【００８９】
ステップＳ９９ではコピー可能サイズＣ＿ＳＺに相当する送信データをリングバッファエリア２０ｂからフレームバッファエリア２０ａにコピーし、ステップＳ１０１では“ＴＤ＿ＳＺ−Ｃ＿ＳＺ”に相当する送信データをアプリケーションバッファエリア２０ｃからフレームバッファエリア２０ａにコピーする（図１２参照）。ステップＳ１０３では、送信可能サイズＴＤ＿ＳＺに相当する送信データをリングバッファエリア２０ｂからフレームバッファエリア２０ａにコピーする（図１１参照）。
【００９０】
図１７に示すステップＳ４５の確認処理は、図２３に示すサブルーチンに従って実行される。まずステップＳ１１１でＰＣから受信確認通知が発行されたか否かを判別し、ＮＯであればそのまま上階層のルーチンに復帰する一方、ＹＥＳであれば現在の状態が接続確立状態であるか否かをステップＳ１１３で判別する。現在の状態が接続確立状態と異なれば、ステップＳ１１５でその他の処理（接続確立／遮断処理を含む）を実行してから上階層のルーチンに復帰する。これに対して、現在の状態が接続確立状態であれば、ステップＳ１２７〜Ｓ１３９の処理を経て上階層のルーチンに復帰する。
【００９１】
ステップＳ１２７では受信確認通知に記述されたシーケンス番号ＳＥＧ＿ＡＣＫを取得し、続くステップＳ１２９では受信確認サイズＡＣＫ＿ＳＺを数式３に従って算出する。ステップＳ１３１では受信確認サイズＡＣＫ＿ＳＺが“０”を上回るか否かを判別し、ＮＯであればそのまま上階層のルーチンに復帰する一方、ＹＥＳであればステップＳ１３３でシーケンス番号ＳＥＧ＿ＡＣＫの値をシーケンス番号ＳＮＤ＿ＵＮＡに設定する。
【００９２】
ステップＳ１３５では、受信確認が取れた送信データをリングバッファエリア２０ｂおよび／またはアプリケーションバッファエリア２０ｃから削除するべく、データ削除処理を実行する。ステップＳ１３７では変数ＲＢ＿ＳＺおよびＡＢ＿ＳＺの和が“０”を上回るか否かを判別し、ＮＯであればそのまま上階層のルーチンに復帰する一方、ＹＥＳであればステップＳ１３９でデータ送信指示を発行してから上階層のルーチンに復帰する。
【００９３】
ステップＳ１３５のデータ削除処理は、図２５〜図２７に示すサブルーチンに従って実行される。まず、変数ＳＢ＿ＳＴＡＴＥが“リングバッファエリア”に相当する数値を示すか否かをステップＳ１４１で判別し、変数ＳＢ＿ＳＴＡＴＥが“アプリケーションバッファエリア”に相当する数値を示すか否かをステップＳ１４３で判別する。
【００９４】
ステップＳ１４１でＹＥＳであればステップＳ１４７に進み、受信確認サイズＡＣＫ＿ＳＺに相当する確認済みの送信データをリングバッファエリア２０ｂから削除する。ステップＳ１４９では、変数ＲＢ＿ＳＺからシーケンス番号ＡＣＫ＿ＳＺを減算し、変数ＲＢ＿ＳＴＡＲＴにシーケンス番号ＡＣＫ＿ＳＺを積算する。
【００９５】
ステップＳ１５１では変数ＲＢ＿ＳＺが“０”であるか否かを判別し、ＮＯであればそのまま上階層のルーチンに復帰する一方、ＹＥＳであればステップＳ１５３で変数ＳＢ＿ＳＴＡＴＥに“空”を示す数値を設定してから上階層のルーチンに復帰する。
【００９６】
ステップＳ１４３でＮＯであればそのまま上階層のルーチンに復帰し、ステップＳ１４３でＹＥＳであればフラグＦＬＧが“０”であるか否かをステップＳ１４５で判別する。フラグＦＬＧが“０”であればステップＳ１５５に進む一方、フラグＦＬＧが“１”であればステップＳ１７７に進む。
【００９７】
ステップＳ１５５では、受信確認サイズＡＣＫ＿ＳＺに相当する確認済みの送信データをアプリケーションバッファエリア２０ｃから削除する。ステップＳ１５７では、変数ＡＢ＿ＳＺからシーケンス番号ＡＣＫ＿ＳＺを減算し、変数ＡＢ＿ＳＴＡＲＴにシーケンス番号ＡＣＫ＿ＳＺを積算する。ステップＳ１５９では変数ＡＢ＿ＳＺが“０”を上回るか否かを判別し、ＮＯであればステップＳ１６１に進む一方、ＹＥＳであればステップＳ１７３に進む。
【００９８】
ステップＳ１６１では、変数ＡＢ＿ＳＺがリングバッファエリア２０ｂの空き容量以下であるか否かを判別し、ＮＯであればそのまま上階層のルーチンに復帰する一方、ＹＥＳであればステップＳ１６３〜Ｓ１７１の処理を経て上階層のルーチンに復帰する。
【００９９】
ステップＳ１６３では、変数ＡＢ＿ＳＺに相当する送信データをアプリケーションバッファエリア２０ａからリングバッファエリア２０ｂにコピーする。ステップＳ１６５では、変数ＲＢ＿ＳＺの値を変数ＡＢ＿ＳＺの値によって更新するとともに、変数ＲＢ＿ＳＴＡＲＴに“０”を設定する。ステップＳ１６７ではアプリケーションバッファエリア２０ｃの占有権を放棄し、ステップＳ１６９では変数ＳＢ＿ＳＴＡＴＥを“リングバッファエリア”に相当する数値に設定する。設定が完了するとステップＳ１７１に進み、アプリケーションバッファエリア２０ｃの占有権を返還する旨の返還通知をアプリケーションタスクに向けて発行する。
【０１００】
ステップＳ１７３ではアプリケーションバッファエリア２０ｃの占有権を放棄し、ステップＳ１７５では変数ＳＢ＿ＳＴＡＴＥを“空”に相当する数値に設定する。設定が完了すると、ステップＳ１７１で返還通知をアプリケーションタスクに向けて発行する。
【０１０１】
図２７に示すステップＳ１７７では、シーケンス番号ＡＣＫ＿ＳＺが変数ＲＢ＿ＳＺ以下であるか否かを判別する。ここでＹＥＳであれば、ステップＳ１７９〜Ｓ１８３で上述のステップＳ１４７〜Ｓ１５１と同様の処理を実行する。ステップＳ１８３でＮＯであればそのまま上階層のルーチンに復帰する一方、ステップＳ１８３でＹＥＳであればステップＳ１８５で変数ＳＢ＿ＳＴＡＴＥに“アプリケーションバッファエリア”に相当する数値を設定してから上階層のルーチンに復帰する。
【０１０２】
ステップＳ１７７でＮＯであれば、リングバッファエリア２０ｂに格納された全ての送信データをステップＳ１８７で削除する。ステップＳ１８９ではシーケンス番号ＡＣＫ＿ＳＺから変数ＲＢ＿ＳＺを減算し、続くステップＳ１９１では変数ＲＢ＿ＳＺおよびＲＢ＿ＳＴＡＲＴを“０”に設定する。ステップＳ１９１の処理が完了すると、ステップＳ１５５に進む。
【０１０３】
以上の説明から分かるように、ＣＰＵ２４は、アプリケーションバッファエリア２０ｃを占有するアプリケーションタスク（第１タスク）とリングバッファエリア２０ｂを占有するＴＣＰ／ＩＰタスク（第２タスク）とを並列的に実行する。アプリケーションタスクによって実行される処理は、第１判別処理(S15)，第１発行処理(S17, S21)および第２発行処理(S23, S33)を含む。ＴＣＰ／ＩＰタスクによって実行される処理は、送信処理(S57~S69)を含む。
【０１０４】
第１判別処理は、データ生成処理によってアプリケーションバッファエリア２０ｃに格納された送信データのサイズが閾値つまりリングバッファエリア２０ｂの空き容量以下であるか否かを判別する処理に相当する。第１発行処理は、第１判別処理の判別結果が肯定的であるときアプリケーションバッファエリア２０ｃ上の送信データをリングバッファエリア２０ｂに複製してデータ送信指示をＴＣＰ／ＩＰタスクに向けて発行する処理に相当する。
【０１０５】
第２発行処理は、第１判別手段の判別結果が否定的であるときアプリケーションバッファエリア２０ｃの占有権をＴＣＰ／ＩＰタスクに一時的に付与してデータ送信指示をＴＣＰ／ＩＰタスクに向けて発行する処理に相当する。送信処理は、ＴＣＰ／ＩＰタスクによって占有されたメモリエリア上の送信データをデータ送信指示に応答して送信する処理に相当する。
【０１０６】
したがって、アプリケーションバッファエリア２０ｃに格納された閾値以下のサイズの送信データは、リングバッファエリア２０ｂを経て送信される。アプリケーションバッファエリア２０ｃはリングバッファエリア２０ｂへの送信データの複製によって解放され、これによってデータ生成処理が速やかに再開される。
【０１０７】
一方、アプリケーションバッファエリア２０ｃに格納された閾値を上回るサイズの送信データは、リングバッファエリア２０ｂを経ることなく送信される。このときアプリケーションバッファエリア２０ｃの占有権はＴＣＰ／ＩＰタスクに付与され、これによってＴＣＰ／ＩＰタスクの下での送信処理が集中的に実行される。
【０１０８】
つまり、サイズが閾値以下のデータについてはデータ生成処理の速やかな再開を通じて通信速度の高速化が図られ、サイズが閾値を上回るデータについては送信処理の集中的な実行を通じて通信速度の高速化が図られる。
【０１０９】
なお、この実施例では、送信データをリングバッファエリア２０ｂおよび／またはアプリケーションバッファエリア２０ｃからフレームバッファエリア２０ａにコピーするようにしているが、フレームバッファエリア２０ａには送信データのアドレスおよびサイズのみを渡して実際のデータコピー処理は省略するという、いわゆるゼロコピー方式を併用するようにしてもよい。
【０１１０】
最後に、この実施例の詳細な動作については、“Information Science Institute, RFC793, Transmission Control
Protocol, DARPA Internet Program Protocol Specification, Sept. 1981”を参照されたい。
【図面の簡単な説明】
【０１１１】
【図１】この発明の一実施例の構成を示すブロック図である。
【図２】（Ａ）は図１実施例の動作の一部を示す図解図であり、（Ｂ）は図１実施例の動作の他の一部を示す図解図である。
【図３】アプリケーションタスクおよびＴＣＰ／ＩＰタスクによって実現されるデータ送信動作の一例を示す図解図である。
【図４】アプリケーションタスクおよびＴＣＰ／ＩＰタスクによって実現されるデータ送信動作の他の一例を示す図解図である。
【図５】アプリケーションタスクおよびＴＣＰ／ＩＰタスクによって実現されるデータ送信動作のその他の一例を示す図解図である。
【図６】アプリケーションタスクおよびＴＣＰ／ＩＰタスクによって実現されるデータ送信動作のさらにその他の一例を示す図解図である。
【図７】アプリケーションタスクおよびＴＣＰ／ＩＰタスクによって実現されるデータ送信動作の他の一例を示す図解図である。
【図８】アプリケーションタスクおよびＴＣＰ／ＩＰタスクによって実現されるデータ送信動作のその他の一例を示す図解図である。
【図９】（Ａ）はアプリケーションタスクおよびＴＣＰ／ＩＰタスクの間の動作の一部を示す図解図であり、（Ｂ）はアプリケーションタスクおよびＴＣＰ／ＩＰタスクの間の動作の他の一部を示す図解図である。
【図１０】（Ａ）はシーケンス番号ＳＮＤ＿ＵＮＡ，ＳＮＤ＿ＮＸＴ，オフセットＯＳＦＴの関係の一例を示す図解図であり、（Ｂ）はシーケンス番号ＳＮＤ＿ＵＮＡ，ＳＮＤ＿ＮＸＴ，ＳＥＧ＿ＡＣＫ，送信確認データサイズＡＣＫ＿ＳＺの関係の一例を示す図解図であり、（Ｃ）はシーケンス番号ＳＮＤ＿ＵＮＡ，ＳＮＤ＿ＮＸＴ，送信確認データサイズＡＣＫ＿ＳＺの関係の一例を示す図解図であり、（Ｄ）はシーケンス番号ＳＮＤ＿ＵＮＡ，ＳＮＤ＿ＮＸＴ，オフセットＯＳＦＴの関係の他の一例を示す図解図である。
【図１１】図１実施例に適用されるＳＤＲＡＭ上での動作の一部を示す図解図である。
【図１２】図１実施例に適用されるＳＤＲＡＭ上での動作の他の一部を示す図解図である。
【図１３】図１実施例に適用されるＳＤＲＡＭ上での動作のその他の一部を示す図解図である。
【図１４】図１実施例に適用されるＣＰＵの動作の一部を示すフロー図である。
【図１５】図１実施例に適用されるＣＰＵの動作の他の一部を示すフロー図である。
【図１６】図１実施例に適用されるＣＰＵの動作のその他の一部を示すフロー図である。
【図１７】図１実施例に適用されるＣＰＵの動作のさらにその他の一部を示すフロー図である。
【図１８】図１実施例に適用されるＣＰＵの動作の他の一部を示すフロー図である。
【図１９】図１実施例に適用されるＣＰＵの動作のその他の一部を示すフロー図である。
【図２０】図１実施例に適用されるＣＰＵの動作のさらにその他の一部を示すフロー図である。
【図２１】図１実施例に適用されるＣＰＵの動作の他の一部を示すフロー図である。
【図２２】図１実施例に適用されるＣＰＵの動作のその他の一部を示すフロー図である。
【図２３】図１実施例に適用されるＣＰＵの動作のさらにその他の一部を示すフロー図である。
【図２４】図１実施例に適用されるＣＰＵの動作の他の一部を示すフロー図である。
【図２５】図１実施例に適用されるＣＰＵの動作のその他の一部を示すフロー図である。
【図２６】図１実施例に適用されるＣＰＵの動作のさらにその他の一部を示すフロー図である。
【図２７】図１実施例に適用されるＣＰＵの動作の他の一部を示すフロー図である。
【符号の説明】
【０１１２】
１０  …ディジタルカメラ
２０  …ＳＤＲＡＭ
２２  …通信Ｉ／Ｆ
２４  …ＣＰＵ
２６  …フラッシュメモリ
【図１】
2010055214.tif 000004
【図２】
2010055214.tif 000005
【図３】
2010055214.tif 000006
【図４】
2010055214.tif 000007
【図５】
2010055214.tif 000008
【図６】
2010055214.tif 000009
【図７】
2010055214.tif 000010
【図８】
2010055214.tif 000011
【図９】
2010055214.tif 000012
【図１０】
2010055214.tif 000013
【図１１】
2010055214.tif 000014
【図１２】
2010055214.tif 000015
【図１３】
2010055214.tif 000016
【図１４】
2010055214.tif 000017
【図１５】
2010055214.tif 000018
【図１６】
2010055214.tif 000019
【図１７】
2010055214.tif 000020
【図１８】
2010055214.tif 000021
【図１９】
2010055214.tif 000022
【図２０】
2010055214.tif 000023
【図２１】
2010055214.tif 000024
【図２２】
2010055214.tif 000025
【図２３】
2010055214.tif 000026
【図２４】
2010055214.tif 000027
【図２５】
2010055214.tif 000028
【図２６】
2010055214.tif 000029
【図２７】
2010055214.tif 000030