以下、本発明の実施の形態に係るマルチCPU装置およびCPU間通信方法を、図面に基づいて説明する。CPU間通信方法は、マルチCPU装置の動作の一部として説明する。
図1は、本発明の実施の形態に係るマルチCPU装置を示す装置構成図である。マルチCPU装置は、第一中央処理装置としてのフロントエンドチップ1と、第二中央処理装置としてのバックエンドチップ2との2つのICチップを有する。
フロントエンドチップ1は、中央処理装置11と、RAM12と、記憶デバイス13と、LVDS(Low Voltage Differential Signaling)I/F14と、これらを接続するシステムバス15と、を有する。また、バックエンドチップ2は、中央処理装置21と、RAM22と、記憶デバイス23と、LVDSI/F24と、これらを接続するシステムバス25と、を有する。
図2は、図1中のフロントエンドチップ1のRAM12にマッピングされるメモリ空間マップである。フロントエンドチップ1のRAM12は、16進数の「400000」番地から「500000」番地までのアドレスを有する。
図3は、図1中のバックエンドチップ2のRAM22にマッピングされるメモリ空間マップである。バックエンドチップ2のRAM22は、16進数の「100000」番地から「200000」番地までのアドレスを有する。
フロントエンドチップ1のLVDSI/F14は、バックエンドチップ2のLVDSI/F24と、通信路としての信号線3により接続される。LVDSI/F14,24は、送信するデータが供給されると、差動電圧信号を信号線3へ出力する。差動電圧信号は、たとえば約0.9V程度の振幅を有する正弦波が、送信データに応じて変調された信号であればよい。LVDSI/F14,24は、信号線3から差動電圧信号を受信する。LVDSI/F14,24は、受信した差動電圧信号から、受信データを生成する。
フロントエンドチップ1の記憶デバイス13は、フロントエンドAP(アプリケーション)プログラム31と、RTOS(リアルタイムオペレーティングシステム)ブリッジプログラム32と、RTOSプログラム33と、通信プロトコルハンドラプログラム34と、I/O(Input/Output)ドライバプログラム35と、を記憶する。
バックエンドチップ2の記憶デバイス23は、バックエンドAPプログラム41と、RTOSブリッジプログラム42と、RTOSプログラム43と、通信プロトコルハンドラプログラム44と、I/Oドライバプログラム45と、を記憶する。
フロントエンドチップ1の中央処理装置11は、記憶デバイス13に記憶されるこれらのプログラムをRAM12に読み込んで実行することで、各種の機能を実現する。バックエンドチップ2の中央処理装置21は、記憶デバイス23に記憶されるこれらのプログラムをRAM22に読み込んで実行することで、各種の機能を実現する。
図4は、図1のマルチCPU装置に実現される機能のスタック構造を示す図である。
フロントエンドチップ1の中央処理装置11は、具体的には、フロントエンドAPプログラム31をRAM12に読み込んで実行することで、フロントエンドAP部51を実現する。中央処理装置11は、RTOSブリッジプログラム32をRAM12に読み込んで実行することで、第一送信手段および第二送信手段としてのRTOSブリッジ部52を実現する。中央処理装置11は、RTOSプログラム33をRAM12に読み込んで実行することで、RTOS部53を実現する。中央処理装置11は、通信プロトコルハンドラプログラム34をRAM12に読み込んで実行することで、通信プロトコルハンドラ部54を実現する。中央処理装置11は、I/Oドライバプログラム35をRAM12に読み込んで実行することで、I/Oドライバ部55を実現する。
バックエンドチップ2の中央処理装置21は、具体的には、バックエンドAPプログラム41をRAM22に読み込んで実行することで、バックエンドAP部61を実現する。中央処理装置21は、RTOSブリッジプログラム42をRAM22に読み込んで実行することで、第一送信手段および第二送信手段としてのRTOSブリッジ部62を実現する。中央処理装置21は、RTOSプログラム43をRAM22に読み込んで実行することで、RTOS部63を実現する。中央処理装置21は、通信プロトコルハンドラプログラム44をRAM22に読み込んで実行することで、通信プロトコルハンドラ部64を実現する。中央処理装置21は、I/Oドライバプログラム45をRAM22に読み込んで実行することで、I/Oドライバ部65を実現する。
I/Oドライバ部55,65は、送信データをLVDSI/F14,24へ供給する。I/Oドライバ部55,65は、LVDSI/F14,24から受信データを供給される。
通信プロトコルハンドラ部54,64は、送信するデータが供給されると、そのデータを元データとして、元データを所定の通信プロトコルにより送信するための送信データを生成する。通信プロトコルハンドラ部54,64は、生成した送信データを、I/Oドライバ部55,65へ供給する。通信プロトコルハンドラ部54,64は、I/Oドライバ部55,65から受信データが供給されると、そのデータを所定の通信プロトコルにより処理し、元データを生成する。
RTOS部53,63は、中央処理装置11,21によるプログラムの実行を管理する。中央処理装置11,21は、上述した各種のプログラムを実行することで、タスクを生成する。RTOSを使用する場合、上述した各種のプログラムは、一般的に複数の関数の集合体として記述される。関数は、たとえば機能に対応する。中央処理装置11,21は、たとえばこの関数毎にタスクを生成する。
タスクの管理状態としては、実行状態、実行可能状態、待ち状態、休止状態などがある。タスクの実行状態とは、現在、そのタスクが中央処理装置11,21により実行されている状態である。タスクの実行可能状態とは、タスク側の実行準備が整っているが、中央処理装置11,21により実行されていない状態である。実行可能状態にあるタスクが複数ある場合において、実行状態のタスクの実行が終了すると、中央処理装置11,21は、その実行可能状態にあるタスクの中の最も優先度が高いタスクを実行する。タスクの待ち状態とは、タスク側の実行準備が整っていない状態である。たとえば、タスクが、イベントフラグのクリアを待っている状態である。タスクの休止状態とは、タスクが起動されていない状態である。一般的なタスクは、新しく生成されると、まずこの状態になる。
RTOS部53,63は、プログラムに基づいて中央処理装置11,21により生成されるタスクの状態を管理する。RTOS部53,63は、たとえば、待ち状態にあるタスクや休止状態にあるタスクを、実行可能状態にする。RTOS部53,63は、実行状態のタスクの実行が完了すると、実行可能状態にあるタスクの中から優先度が高いものを、次に実行するタスクとして選択する。中央処理装置11,21は、RTOS部53,63により選択されたタスクを実行する。RTOS部53,63は、実行が完了した不要なタスクを、休止状態にする。
また、RTOS部53,63は、タスク間通信機能を有する。タスク間通信機能には、たとえばタスク間メッセージや、イベントフラグなどがある。タスク間通信機能を用いることで、あるタスク(以下、タスクAとよぶ)は、他のタスク(以下、タスクBとよぶ)へデータを供給したり、そのタスクの状態を通知したりすることができる。
タスク間メッセージを使用する場合、たとえばRTOS部53は、図2に示すように、タスクBへ引き渡すパラメータデータを、パラメータブロックとして、RAM12のメモリ空間に書き込む。RTOS部53は、そのパラメータブロックの先頭アドレス(図2では16進数の「400100」)の情報などをパラメータとする、タスク間メッセージを生成する。RTOS部53は、生成したタスク間メッセージをタスクBへ供給する。タスクBを実行するとき、中央処理装置11は、タスク間メッセージにて指定される先頭アドレスから、パラメータデータを読み込む。中央処理装置11は、読み込んだパラメータデータを使用して、タスクBを実行する。
なお、供給元のタスクは、供給先のタスクへのタスク間メッセージの内容として、パラメータブロックの先頭アドレスの情報を通知する。タスク間メッセージにより、パラメータブロックのデータそのものは供給されない。そのため、供給元のタスクは、タスク間メッセージを使用することで、任意のデータ量のデータを供給先のタスクへ供給することができる。
以上のように、RTOSを実行する中央処理装置11,21は、プログラムを実行すると、そのプログラムに基づいてタスクを生成し、生成したタスクを所定の順番で実行する。また、RTOSを実行する中央処理装置11,21は、タスク間メッセージなどを使用して、タスク間で必要なデータを供給する。その結果、中央処理装置11,21は、プログラムを実行することで、そのプログラムにコード化されている機能を実現する。
また、RTOS部53,63は、例外管理部56,66と、受信手段としての割込ハンドラ部57,67と、を有する。
例外管理部56,66は、タスクの実行によりたとえばアドレスエラーなどの各種のエラーが発生したとき、例外処理を実行する。例外管理部56,66は、エラーに応じた例外処理を選択する。選択される例外処理には、そのエラーを回復するための復旧処理である場合や、装置全体を強制的にリセットする場合などがある。例外管理部56,66は、選択した例外処理を実行する。あるいは、例外管理部56,66は、選択した例外処理の実行を、その例外処理を実際に実行するタスクへ指示する。
割込ハンドラ部57,67は、中央処理装置11,21に割込要求があるとき、割込処理を実行する。中央処理装置11,21に割込要求をするものとしては、たとえばLVDSI/F14,24がある。LVDSI/F14,24から割込要求があると、割込ハンドラ部57,67は、通信プロトコルハンドラ部54,64およびI/Oドライバ部55,65を用いて、LVDSI/F14,24からデータを取得する。
なお、これらRTOS部53,63、例外管理部56,66、割込ハンドラ部57,67なども、中央処理装置11,21がRTOSプログラム33,43を実行することで実現される。そのため、中央処理装置11,21によりタスクとして実行される。ただし、RTOS部53,63のタスクは、一般的に、他のプログラムに基づく他のタスクより優先度が高いタスクとして、中央処理装置11,21により実行される。
また、例外管理部56,66、割込ハンドラ部57,67などは、RTOSプログラム33,43による他の機能と同様に、RTOSプログラム33,43において複数の関数の集合体として記述される。RTOS部53,63は、例外管理部56,66、割込ハンドラ部57,67などをRTOS部53,63の外部のプログラムから直接的あるいは間接的に呼び足すための、システムコールと呼ばれる関数を有する。
RTOSブリッジ部52,62は、システムコールで不足するAPI(アプリケーションプログラムインターフェイス)を、フロンドエンドAP部51あるいはバックエンドAP部61に提供する。RTOSブリッジ部52,62は、たとえば、RTOS部53,63により定義されていない、マルチCPU装置が組み込まれる機器で特有に使用する、新たな関数を提供する。この関数は、RTOSブリッジ部52,62の外部のプログラムから呼び出し可能な関数である。
RTOSブリッジ部52,62は、自分が動作するチップにおいて実行されないタスクへのタスク間メッセージが提供されたら、このタスク間メッセージを他のチップへ送信する機能を有する。RTOSブリッジ部52,62は、たとえば、自分が動作するチップにおいて実行されないタスクのIDリストを有し、そのIDリストを参照して、そのタスク間メッセージが自チップ内のタスクへのものであるか、他チップ内のタスクへのものであるかを判断すればよい。RTOSブリッジ部52,62は、タスク間メッセージに基づいてメッセージ構造体を生成し、それを通信プロトコルハンドラ部54,64へ供給する。
図5は、RTOSブリッジ部52,62が、タスク間メッセージに基づいて通信プロトコルハンドラ部54,64へ供給するメッセージ構造体のデータ構造を示す説明図である。メッセージ構造体は、複数のパラメータのデータを有する。そして、その複数のパラメータの中の1つのパラメータとして、パラメータブロックの先頭アドレスを有する。図5に例示するメッセージ構造体は、パラメータブロックの先頭アドレスとして、図2に示すパラメータブロックの先頭アドレスである「400100(16進数)」を有する。
RTOSブリッジ部52,62は、エラー処理手段としてのアドレスエラー処理部58,68を有する。アドレスエラー処理部58,68は、アドレスエラーが発生したときに、例外管理部56,66により呼び出される。たとえば、図2に示すフロントエンドチップ1のRAM12のメモリ空間は、16進数の「400000」番地から「500000」番地までのアドレスを有する。このメモリ空間に対して、あるタスクに基づいて中央処理装置11がたとえば16進数の「100100」を指定したメモリアクセスをすると、アドレスエラーが発生する。
アドレスエラー処理部58,68は、例外管理部56,66に呼び出されると、後述する所定のアドレスエラー処理を実行する。
フロントエンドAP部51およびバックエンドAP部61は、マルチCPU装置が組み込まれる機器で必要とする機能を実現する。たとえば、マルチCPU装置が組み込まれる機器において機能Aおよび機能Bの2つの機能が必要である場合、フロントエンドAP部51は機能Aを実現し、バックエンドAP部61は機能Bを実現する。
フロントエンドAP部51およびバックエンドAP部61は、RTOS部53,63により、機能毎にあるいは機能を更に細分化した関数毎に機能タスクが生成される。この機能タスクの実行は、RTOS部53,63により管理される。また、機能タスクは、RTOS部53,63およびRTOSブリッジ部52,62が提供するAPIとしての関数を使用し、タスク間メッセージなどを使用してタスク間通信を行う。
次に、以上の構成を有する、実施の形態に係るマルチCPU装置の動作を説明する。
図6は、フロントエンドチップ1で実行されるフロントエンドAP部51の、第一機能タスク手段としてのタスクAが、バックエンドチップ2で実行されるバックエンドAP部61の、第二機能タスク手段としてのタスクBへのタスク間メッセージを生成した場合の動作シーケンスを示す図である。
タスクAは、タスクBへのタスク間メッセージを生成する(ステップST1)と、このタスク間メッセージを、フロントエンドチップ1のRTOSブリッジ部52へ供給する(ステップST2)。
RTOSブリッジ部52は、タスク間メッセージの送信先タスクであるタスクBが、フロントエンドチップ1において実行されないタスクであると判断する。RTOSブリッジ部52は、タスク間メッセージに基づいて図5に示すようなメッセージ構造体を生成し、このメッセージ構造体を通信プロトコルハンドラ部54へ供給する。
フロントエンドチップ1の通信プロトコルハンドラ部54は、メッセージ構造体が供給されると、それを所定の通信プロトコルにより送信するための送信データを生成し、I/Oドライバ部55へ供給する。フロントエンドチップ1のI/Oドライバ部55は、送信データをLVDSI/F14へ供給する。フロントエンドチップ1のLVDSI/F14は、送信するデータに応じた差動電圧信号を、信号線3へ出力する。
フロントエンドチップ1のLVDSI/F14が出力した差動電圧信号は、バックエンドチップ2のLVDSI/F24により受信される。バックエンドチップ2のLVDSI/F24は、バックエンドチップ2の中央処理装置21に割込み要求を出力する。
バックエンドチップ2の中央処理装置21に割込要求があると、バックエンドチップ2の割込ハンドラ部67は、割込処理を実行する。割込ハンドラ部67は、通信プロトコルハンドラ部64およびI/Oドライバ部65を用いて、LVDSI/F24からデータを取得する。バックエンドチップ2のI/Oドライバ部65は、LVDSI/F24から受信データを供給されると、これを通信プロトコルハンドラ部64へ供給する。通信プロトコルハンドラ部64は、受信データを割込ハンドラ部67へ供給する。
これにより、フロントエンドチップ1のRTOSブリッジ部52は、バックエンドチップ2の割込ハンドラ部67へ、タスク間メッセージの内容を有するメッセージ構造体を送信する(ステップST3)。
メッセージ構造体を受信した割込ハンドラ部67は、メッセージ構造体の内容を解析する。そして、メッセージ構造体の送信先としてタスクBを特定する。割込ハンドラ部67は、タスク間メッセージを生成し、タスクBへ供給する(ステップST4)。
この割込ハンドラ部67が生成するタスク間メッセージには、メッセージ構造体に記述されるパラメータブロックの先頭アドレス(図5で言えば「400100(16進数)」)が情報として含まれる。
バックエンドAP部61のタスクBは、割込ハンドラ部67が生成したタスク間メッセージが供給されると、このタスク間メッセージで指定されたパラメータブロックの先頭アドレスにアクセスする(ステップST5)。
バックエンドチップ2のメモリ空間のアドレスは、図3に示すように、「100000」番地から「200000」番地までである。そのため、この「400100」番地へのアクセスにより、バックエンドチップ2では、アドレスエラーが発生する(ステップST6)。タスクBの処理は、アドレスエラーが発生した時点で中断される。
バックエンドチップ2の例外管理部66は、アドレスエラーがあると、それに応じたエラー処理としてアドレスエラー処理部68を選択する(ステップST7)。例外管理部66は、アドレスエラー処理部68に実行を指示する(ステップST8)。アドレスエラー処理部68は、所定のアドレスエラー処理を実行する。
バックエンドチップ2のアドレスエラー処理部68は、具体的には、まず、パラメータブロックのサイズ取得要求を生成し、この要求をフロントエンドチップ1のRTOSブリッジ部52へ送信する(ステップST9)。
パラメータブロックのサイズ取得要求は、実際には、バックエンドチップ2の通信プロトコルハンドラ部64、I/Oドライバ部65、LVDSI/F24、信号線3、フロントエンドチップ1のLVDSI/F14、I/Oドライバ部55、通信プロトコルハンドラ部54および割込ハンドラ部57を介して、フロントエンドチップ1のRTOSブリッジ部52へ送信される。
フロントエンドチップ1のRTOSブリッジ部52は、図2に示すメモリ空間に記憶されるパラメータブロックのサイズ情報を生成し、これをバックエンドチップ2のアドレスエラー処理部68へ送信する(ステップST10)。
フロントエンドチップ1のRAM12に記憶されるパラメータブロックのサイズ情報を取得すると、バックエンドチップ2のアドレスエラー処理部68は、次に、タスクBへ供給されたタスク間メッセージなどの退避処理を実行する(ステップST11)。
引き続き、アドレスエラー処理部68は、図3に示すバックエンドチップ2のRAM22のメモリ空間に、取得したパラメータブロックのサイズ情報に相当する記憶領域を確保する(ステップST12)。図3では、「100400(16進数)」番地から、パラメータブロックの記憶領域が確保されている。
バックエンドチップ2のRAM22のメモリ空間に、パラメータブロックの記憶領域が確保されると、フロントエンドチップ1は、バックエンドチップ2へ、パラメータブロックのデータをDMA(Direct Memory Access)転送する(ステップST13)。これにより、バックエンドチップ2のRAM22には、フロントエンドチップ1のRAM12に記憶されているパラメータブロックと同じ内容のデータが記憶される。
バックエンドチップ2のRAM22にパラメータブロックの内容が記憶され、DMA転送完了通知を受信する(ステップST14)と、バックエンドチップ2のアドレスエラー処理部68は、先に退避したタスクBへのタスク間メッセージのパラメータブロックの先頭アドレスを、先にバックエンドチップ2のRAM22に確保した記憶領域の先頭アドレス(図3で言えば「100400(16進数)」番地)へ変更する(ステップST15)。
バックエンドチップ2のアドレスエラー処理部68は、以上の一連のアドレスエラー処理が完了すると、その完了を例外管理部66に通知する(ステップST16)。例外管理部66は、タスクBに、処理の再開を指示する(ステップST17)。
バックエンドAP部61のタスクBは、アドレスエラーが発生して中断した処理から、処理を再開する。タスクBは、タスク間メッセージで指定されているパラメータブロックの先頭アドレスにアクセスする(ステップST18)。
タスク間メッセージで指定されているパラメータブロックの先頭アドレスは、アドレスエラー処理部68により、バックエンドチップ2のRAM22に確保した記憶領域の先頭アドレスへ変更されている。したがって、タスクBは、アドレスエラーを発生することなくパラメータブロックのデータを読み込み、中断した処理以降の処理を順番に処理することができる。
タスクBは、それによる処理がすべて終了すると、RTOSブリッジ部62に、パラメータブロックの開放を通知する(ステップST19)。RTOSブリッジ部62は、パラメータブロックの開放通知を、フロントエンドチップ1のRTOSブリッジ部52へ通知する(ステップST20)。
これにより、図3のバックエンドチップ2のRAM22に確保されていたパラメータブロックの記憶領域と、図2のバックエンドチップ2のRAM22に確保されていたパラメータブロックの記憶領域とが開放される。
なお、以上の説明では図6に基づいてフロントエンドチップ1のタスクAからバックエンドチップ2のタスクBへ、タスク間メッセージに対応するメッセージ構造体及びパラメータブロックのデータを送信する場合を説明している。逆に、バックエンドチップ2のタスクBからフロントエンドチップ1のタスクAへ、図6と同様の動作シーケンスにより、タスク間メッセージに対応するメッセージ構造体及びパラメータブロックのデータを送信することができる。
次に、図1のマルチCPU装置を組み込んだ組込機器の一例として、プリンタ複合機を説明する。
図7は、図1に示すマルチCPU装置をプリンタ複合機に適用する場合における、フロントエンドAP部51とバックエンドAP部61との機能切り分けの一例を示す図である。プリンタ複合機は、図示外のコンピュータに接続され、そのコンピュータからの印刷指示に基づいて画像を印刷する他にも、たとえばそれに装着された図示外のフラッシュメモリなどの半導体メモリに記憶される画像ファイルの画像を印刷する機能や、図示外のスキャナで読み込んだ画像を印刷する機能などを有するものである。
プリンタ複合機の中央処理装置は、アプリケーションプログラムを実行することで、基本的に、ファイルシステム管理部71、ユーザインタフェース部72、ファイルリスト管理部73、画像デコード部74、画像レイアウト部75、二値化処理部76、インターレース処理部77、データ処理コントローラ部78、カードプリントファンクション部79などを実現する必要がある。
ファイルシステム管理部71は、プリンタ複合機の図示外の画像ファイルを管理する。プリンタ複合機の画像ファイルは、たとえばプリンタ複合機に装着された半導体メモリに記憶される画像ファイルである。
ユーザインタフェース部72は、プリンタ複合機の図示外の入力デバイスおよび表示デバイスを制御する。ユーザインタフェース部72は、ユーザ操作により印刷する画像を選択したり、その画像を印刷する用紙やレイアウトを選択したりする。
ファイルリスト管理部73は、ユーザインタフェース部72が選択した印刷設定情報を保持する。印刷設定情報には、たとえば選択された画像ファイルのファイル名や、印刷する用紙のサイズやレイアウト、画像補正処理の要否などの印刷条件などが含まれる。
画像デコード部74は、印刷する画像ファイルのデータを読み込み、その読込データに基づいて画像データを生成する。
画像レイアウト部75は、ファイルリスト管理部73が保持する印刷設定情報を読み込み、用紙毎のデータを生成する。画像レイアウト部75は、読み込んだ印刷設定情報に基づいて用紙の印刷範囲などを特定し、その印刷範囲内に印刷する画像をレイアウトした印刷イメージデータを生成する。
二値化処理部76は、画像レイアウト部75が生成した印刷イメージデータを、二値化データへ変換する。
インターレース処理部77は、二値化処理部76が生成した二値化データを印刷エンジン80が印刷する順番に並べ替え、必要な制御コードを挿入し、印刷制御データを生成する。インターレース処理部77が生成した印刷制御データは、印刷エンジン80へ供給される。印刷エンジン80は、印刷制御データに基づいて用紙への印刷を実行する。
データ処理コントローラ部78は、画像レイアウト部75、画像デコード部74、二値化処理部76およびインターレース処理部77の間でのデータフローを管理し、制御する。たとえば、二値化処理部76が生成した二値化データは、インターレース処理部77へ供給される。データ処理コントローラ部78は、この二値化データなどのデータの流れを管理する。二値化データの場合、二値化処理部76は、生成した二値化データをデータ処理コントローラ部78へ供給する。データ処理コントローラ部78は、供給された二値化データをインターレース処理部77へ供給する。このようにデータフローを管理し、制御することで、データ処理コントローラ部78は、印刷処理のどの工程までの処理が完了しているか否かなどを一元的に管理することができる。
カードプリントファンクション部79は、データ処理コントローラ部78にデータフローの制御(ジョブの連続起動やキャンセル処理など)や動作条件などを設定したり、データ処理コントローラ部78から印刷の進捗状況情報を取得したりする。
図7のプリンタ複合機では、プリンタ用のアプリケーションプログラムに基づくこれらの基本的な機能を、フロントエンドチップ1とバックエンドチップ2とで分散して実行する。具体的には、フロントエンドAP部51は、ファイルシステム管理部71、ユーザインタフェース部72、ファイルリスト管理部73、カードプリントファンクション部79を有する。バックエンドAP部61は、画像デコード部74、画像レイアウト部75、二値化処理部76、インターレース処理部77、データ処理コントローラ部78を有する。
また、図7のプリンタ複合機において、フロントエンドチップ1およびバックエンドチップ2は共に、RTOS部53,63およびRTOSブリッジ部52,62を有する。バックエンドチップ2のRTOSブリッジ部62は、ファイルリスト取得ブリッジ部81と、ファイルシステムブリッジ部82と、を有する。フロントエンドチップ1のRTOSブリッジ部52は、データ処理コントローラブリッジ部83を有する。これらの各機能は、タスク単位で実行され、タスク間メッセージなどを用いたタスク間通信機能により、互いにデータを送受する。
ファイルリスト取得ブリッジ部81は、たとえば、フロントエンドチップ1のファイルリスト管理部73のタスクからタスク間メッセージが提供されたら、このタスク間メッセージによるメモリ空間へのアクセス処理を実行する。
ファイルシステムブリッジ部82は、たとえば、フロントエンドチップ1のファイルシステム管理部71のタスクからタスク間メッセージが提供されたら、このタスク間メッセージによるメモリ空間へのアクセス処理を実行する。
データ処理コントローラブリッジ部83は、たとえば、データ処理コントローラ部78のタスクからタスク間メッセージが提供されたら、このタスク間メッセージによるメモリ空間へのアクセス処理を実行する。
次に、図7のプリンタ複合機の動作について説明する。
フロントエンドチップ1のユーザインタフェース部72は、ユーザ操作により印刷する画像を選択したり、その画像を印刷する用紙やレイアウトを選択したりする。ファイルリスト管理部73は、その選択された印刷設定情報を保持する。ファイルリスト管理部73は、印刷を指示するタスク間メッセージを生成し、ファイルリスト取得ブリッジ部81へ送信する。
バックエンドチップ2のファイルリスト取得ブリッジ部81は、図示外のバックエンドチップ2の割込処理部を介してフロントエンドチップ1からタスク間メッセージが供給される。ファイルリスト取得ブリッジ部81は、供給されたタスク間メッセージに基づいて、バックエンドチップ2のRAM22にアクセスする。ファイルリスト取得ブリッジ部81は、このアクセスにおいて、タスク間メッセージにて指定されるフロントエンドチップ1のメモリ空間のアドレスを用いる。
フロントエンドチップ1のメモリ空間と、バックエンドチップ2のメモリ空間とは、アドレス範囲が互いに重ならない。そのため、バックエンドチップ2では、アクセスエラーが発生し、アドレスエラー処理部68が実行される。
バックエンドチップ2のアドレスエラー処理部68により、フロントエンドチップ1からバックエンドチップ2へ、タスク間メッセージにて指定されたパラメータブロックが転送される。アドレスエラー処理部68は、タスク間メッセージのアドレスを、この転送先のアドレスへ変更する。
ファイルリスト取得ブリッジ部81は、アドレスエラーにより中断した処理から処理を再開する。ファイルリスト取得ブリッジ部81は、転送されたパラメータブロックが格納されるアドレスにアクセスする。ファイルリスト取得ブリッジ部81は、アクセスエラーを発生することなく、バックエンドチップ2のRAM22に記憶されるパラメータブロックにアクセスする。ファイルリスト取得ブリッジ部81は、印刷する画像ファイルのリストなどを取得する。
ファイルリスト取得ブリッジ部81は、取得した画像ファイルのリストなどの印刷設定情報を、タスク間通信機能により、画像レイアウト部75へ供給する。画像レイアウト部75は、まず、ファイルシステムブリッジ部82へ印刷設定情報により指定されるファイル名を指定し、画像データの取得を指示する。印刷設定情報により指定されるファイル名としては、たとえば画像ファイルのファイル名や、レイアウト情報ファイルのファイル名などがある。
ファイルシステムブリッジ部82は、フロントエンドチップ1のファイルシステム管理部71に、画像レイアウト部75により指定されたファイル名のデータを要求する。
フロントエンドチップ1のファイルシステム管理部71は、たとえば画像ファイルのファイル名を指定した要求があると、フロントエンドチップ1の図示外のファイルシステムに記憶されている、そのファイル名の画像ファイルの先頭アドレスを、タスク間メッセージによりファイルシステムブリッジ部82へ通知する。
バックエンドチップ2のファイルシステムブリッジ部82は、ファイルシステム管理部71から供給されたタスク間メッセージに基づいて、バックエンドチップ2のRAM22にアクセスする。バックエンドチップ2では、アクセスエラーが発生し、アドレスエラー処理部68が実行される。アドレスエラー処理部68の処理により、フロントエンドチップ1からバックエンドチップ2へ、ファイルシステム管理部71がタスク間メッセージにて指定した画像ファイルが転送される。その後、ファイルシステムブリッジ部82は、中断した処理から処理を再開する。ファイルシステムブリッジ部82は、アドレスエラーを発生することなく画像データの取得を完了し、その旨を画像レイアウト部75へ通知する。
指定したファイル名のファイルのデータの取得完了などが通知されると、画像レイアウト部75は、画像の印刷レイアウトを決定する。画像レイアウト部75は、決定した印刷レイアウトに基づいて、タスク間通信機能により、印刷する画像のデコードを画像デコード部74に指示する。
画像デコード部74は、タスク間通信機能により、ファイルシステムブリッジ部82に画像ファイルの取得を指示する。ファイルシステムブリッジ部82は、先の画像レイアウト部75の指示の場合と同様の処理により、フロントエンドチップ1のファイルシステム管理部71とタスク間メッセージを用いて通信し、画像デコード部74により指示された画像ファイルを取得する。画像デコード部74は、ファイルシステムブリッジ部82が取得した画像ファイルのデータをデコードし、画像データを生成する。デコードが完了すると、画像デコード部74は、タスク間通信機能により、デコード完了を画像レイアウト部75に通知する。
タスク間通信機能によりデコード完了が通知されると、画像レイアウト部75は、先に決定している印刷レイアウトにデコードされた画像を割り付け、印刷イメージデータを生成する。
なお、画像デコード部74は、画像データのすべてを一度にデコードするものであっても、画像データを複数のエリアに分け、そのエリア毎にデコードするようにしてもよい。画像デコード部74が分割したエリア毎にデコードする場合、画像レイアウト部75は、そのデコードが済んだ画像データを順番に割り付けるようにしてもよい。
画像レイアウト部75が生成した印刷イメージデータは、タスク間通信機能により、データ処理コントローラ部78を介して、二値化処理部76へ供給される。二値化処理部76は、印刷イメージデータを、二値化データへ変換する。二値化データは、タスク間通信機能により、データ処理コントローラ部78を介して、インターレース処理部77へ供給される。インターレース処理部77は、二値化データから、プリンタの印刷する順番に並べ替え印刷制御データを生成する。印刷エンジン80は、印刷制御データに基づいて給紙した用紙に画像を印刷する。
また、フロントエンドチップ1のカードプリントファンクション部79は、必要に応じてデータ処理コントローラブリッジ部83に、印刷の進捗状況情報の取得などを指示する。データ処理コントローラブリッジ部83は、バックエンドチップ2のデータ処理コントローラ部78に、進捗状況情報の取得を要求する。
データ処理コントローラ部78は、印刷の進捗状況情報が記憶されているアドレスを指定したタスク間メッセージを生成し、これをデータ処理コントローラブリッジ部83に送信する。データ処理コントローラブリッジ部83は、タスク間メッセージが提供されると、そのタスク間メッセージに基づいて、フロントエンドチップ1のRAM12にアクセスする。
フロントエンドチップ1では、アクセスエラーが発生し、アドレスエラー処理部58が実行される。フロントエンドチップ1のアドレスエラー処理部58の処理により、バックエンドチップ2からフロントエンドチップ1へ、データ処理コントローラ部78がタスク間メッセージにて指定した進捗状況情報が転送される。その後、データ処理コントローラブリッジ部83は、中断した処理から処理を再開する。データ処理コントローラブリッジ部83は、アドレスエラーを発生することなく進捗状況情報の取得を完了し、その旨をカードプリントファンクション部79へ通知する。
カードプリントファンクション部79は、データ処理コントローラブリッジ部83が取得した進捗状況情報に基づいて所定の処理を実行する。
以上のように図7のプリンタ複合機においてフロントエンドチップ1およびバックエンドチップ2は協働して動作し、1つのチップにおいてアプリケーションプログラムを実行する場合と同様に、印刷処理を実行することができる。
また、ファイルリスト管理部73と画像レイアウト部75との間に、ファイルリスト取得ブリッジ部81を設け、ファイルシステム管理部71と画像レイアウト部75および画像デコード部74との間に、ファイルシステムブリッジ部82を設けている。このため、フロントエンドチップ1とバックエンドチップ2との間において、印刷する画像ファイルなどのデータは、1回送受されればよい。通信時間を必要最小限に抑えることができる。
これに対して、たとえば、バックエンドチップ2に二値化処理部76のみを実現した場合、フロントエンドチップ1とバックエンドチップ2との間では、印刷イメージデータと二値化データとの2つの大きなデータを送受することになる。通信時間がかかり、印刷時間の長期化の影響が大きくなってしまう。
以上のように、この実施の形態では、フロントエンドチップ1のフロントエンドAP部51のタスクと、バックエンドチップ2のバックエンドAP部61のタスクとは、メッセージ構造体により、タスク間メッセージの内容を互いに送受する。また、フロントエンドAP部51のタスクあるいはバックエンドAP部61のタスクが、他のチップのタスクへのタスク間メッセージを生成すると、RTOSブリッジ52,62が、メッセージ構造体を生成する。メッセージ構造体の送受信処理は、タスク間メッセージを送受する動作に隠蔽される。
したがって、フロントエンドAP部51とバックエンドAP部61は、タスク間メッセージにより、互いに必要なデータや指示を送受することができる。フロントエンドAP部51およびバックエンドAP部61として、1つのメモリ空間を使用する中央処理装置上で動作するプログラムを流用することができる。1つのメモリ空間を使用する中央処理装置上で動作するソフトウェア資産を流用することができる。
その結果、タスク間メッセージを送受することで1つの中央処理装置上で動作可能な複数の機能タスクを実現するプログラムを用いて、フロントエンドAP部51およびバックエンドAP部61を容易に実現し、マルチCPU装置で動作する複数の機能タスクを容易に実現することができる。また、フロントエンドAP部51と、バックエンドAP部61とは、フロントエンドチップ1とバックエンドチップ2とが共にアクセス可能な共用RAMを用いなくとも、データや指示の送受が可能である。
この実施の形態では、フロントエンドチップ1とバックエンドチップ2との間でのタスク間メッセージの送受に、割り込み処理を使用している。したがって、フロントエンドチップ1およびバックエンドチップ2として、割り込み処理機能を有する汎用的な中央処理装置を用いることができる。
この実施の形態では、タスク間メッセージに基づくメモリ空間へのアクセスによりアドレスエラーが発生したら、アドレスエラー処理部58,68は、そのタスク間メッセージのアドレスに格納されるデータを取得し、そのアドレスへのタスク間メッセージに基づくメモリ空間へのアクセスを再度実行させる。したがって、アドレスエラー処理部58,68は、受信したタスク間メッセージの送信先であるタスクに、アドレスエラーが発生した処理から、処理を再開させることができる。
この実施の形態では、タスク間メッセージの送信先のタスクが、パラメータブロックの開放を通知したら、RTOSブリッジ部52,62は、他方のチップのRTOSブリッジ部62,52に、パラメータブロックの開放を通知する。したがって、タスク間メッセージを送信したチップは、それを受信したチップにおけるメモリ空間の開放に同期して、それが使用するメモリ空間を開放することができる。
以上の実施の形態は、本発明の好適な実施の形態の例であるが、本発明は、これに限定されるものではなく、発明の要旨を逸脱しない範囲において種々の変形、変更が可能である。
上記実施の形態では、フロントエンドチップ1とバックエンドチップ2とは、LVDSI/F14,24を有し、差動電圧信号によりデータを送受している。この他にもたとえば、フロントエンドチップ1と、バックエンドチップ2とは、TTL(Transistor−Transistor Logic)I/Fを有し、0〜5Vの電圧を有するTTL信号によりデータを送受するようにしてもよい。
上記実施の形態では、フロントエンドチップ1とバックエンドチップ2とは、タスク間メッセージの内容を、図5に例示するメッセージ構造体により送受している。この他にもたとえば、フロントエンドチップ1とバックエンドチップ2とは、タスク間メッセージそのものを送受するようにしてもよい。また、上記実施の形態では、メッセージ構造体によりタスク間メッセージの内容を送受しているが、この他にもたとえばメッセージ構造体により、イベントフラグの内容などの所謂タスク間通信機能に用いる情報を送受してもよい。
上記実施の形態では、マルチCPU装置は、フロントエンドチップ1とバックエンドチップ2との2つのICチップにより構成されている。この他にもたとえば、マルチCPU装置は、3つ以上のICチップにより構成されていてもよい。また、中央処理装置とRAMとを有するCPUユニットが、1つのICチップ内に複数組実装されているICチップであってもよい。さらには、マルチCPU装置は、複数組のCPUユニットを有するICチップと、他のICチップとにより構成されていてもよい。
上記実施の形態では、マルチCPU装置を、プリンタ複合機へ応用した場合を例示している。この他にもたとえば、マルチCPU装置は、プリンタ、スキャナ、デジタルカメラ、プロジェクタ、携帯電話端末、その他のコンピュータ制御により動作する組込機器などに応用するようにしてもよい。
1 フロントエンドチップ(第一中央処理装置)、2 バックエンドチップ(第二中央処理装置)、51 フロントエンドAP部(第一機能タスク手段)、52,62 RTOSブリッジ部(第一送信手段、第二送信手段)、57,67 割込ハンドラ部(受信手段)、58,68 アドレスエラー処理部(エラー処理手段)、61 バックエンドAP部(第二機能タスク手段)