(57)【要約】      （修正有）【課題】起動の開始を指示されてからユーザ操作の受付を開始するまでの時間を短縮する。【解決手段】記録装置のコントローラは、ブートモード時のメモリマップで、リード及びライト可能な不揮発性メモリに格納された記録装置起動用のブートプログラムを通常モード時のメモリマップに割り当てられた同じアドレスの揮発性メモリ上の領域に格納を開始するとともに、ブートプログラムの揮発性メモリへの格納が行なわれている間、不揮発性メモリに格納されたブートプログラムを不揮発性メモリ上で実行し、格納が終わると、ブートモード時のメモリマップから通常モード時のメモリマップへの切り替えを行い、揮発性メモリに格納されたブートプログラムを揮発性メモリ上で実行する。【選択図】図２
2013117932.tif 000002
【特許請求の範囲】
【請求項１】
リード及びライト可能な不揮発性メモリに格納された記録装置起動用のブートプログラムを揮発性メモリに格納し、当該揮発性メモリに格納されたブートプログラムを実行する記録装置のコントローラであって、
前記ブートプログラムの前記揮発性メモリへの格納が終わると、ブートモード時のメモリマップから通常モード時のメモリマップへの切り替えを行なう切替手段と、
前記通常モード時のメモリマップにおいて、前記ブートモード時のメモリマップで前記ブートプログラムに割り当てられたアドレスと同じアドレスの前記揮発性メモリ上の領域に前記ブートプログラムを格納する格納手段と、
前記ブートプログラムの前記揮発性メモリへの格納が行なわれている間、前記不揮発性メモリに格納された前記ブートプログラムを前記不揮発性メモリ上で実行し、前記揮発性メモリへの格納が終わり前記メモリマップの切り替えが行なわれると、前記揮発性メモリに格納された前記ブートプログラムを前記揮発性メモリ上で実行する制御手段と
を具備することを特徴とするコントローラ。
【請求項２】
前記制御手段は、
前記ブートプログラムの前記揮発性メモリへの格納が行なわれている間、前記不揮発性メモリ上での前記ブートプログラムの実行と並行して、オペレーティングシステムを起動させ、操作手段を介したユーザ操作の受け付けを開始する
ことを特徴とする請求項１記載のコントローラ。
【請求項３】
前記制御手段は、
前記ブートプログラムの前記揮発性メモリへの格納が行なわれている間、予め登録されたプログラムのみを実行し、前記ブートプログラムの前記揮発性メモリへの格納が終わり前記メモリマップの切り替えが行なわれると、全てのプログラムの実行を行なう
ことを特徴とする請求項１又は２記載のコントローラ。
【請求項４】
前記格納手段は、Ｈ／Ｗリセット解除後に前記格納処理を開始する
ことを特徴とする請求項１から３のいずれか１項に記載のコントローラ。
【請求項５】
前記揮発性メモリは、ＤＲＡＭであり、
前記不揮発性メモリは、ＮＯＲ型のフラッシュＲＯＭ又はマスクＲＯＭである
ことを特徴とする請求項１から４のいずれか１項に記載のコントローラ。
【請求項６】
請求項１から５のいずれか１項に記載のコントローラを内蔵し、記録媒体に対して記録を行なう記録装置。
【請求項７】
リード及びライト可能な不揮発性メモリに格納された記録装置起動用のブートプログラムを揮発性メモリに格納し、当該揮発性メモリに格納されたブートプログラムを実行する記録装置のコントローラの処理方法であって、
格納手段が、通常モード時のメモリマップにおいて、ブートモード時のメモリマップで前記ブートプログラムに割り当てられたアドレスと同じアドレスの前記揮発性メモリ上の領域に前記ブートプログラムを格納する工程と、
制御手段が、前記ブートプログラムの前記揮発性メモリへの格納が行なわれている間、前記不揮発性メモリに格納された前記ブートプログラムを前記不揮発性メモリ上で実行し、前記揮発性メモリへの格納が終わり前記ブートモード時のメモリマップから前記通常モード時のメモリマップへの切り替えが行なわれると、前記揮発性メモリに格納された前記ブートプログラムを前記揮発性メモリ上で実行する工程と
を含むことを特徴とする処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コントローラ、記録装置及びその処理方法に関する。
【背景技術】
【０００２】
ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）及びＭＰＵ（Micro-Processing Unit）等を有する組込機器が知られている。一般に、このような組込機器においては、処理の高速化を図るため、ＲＯＭ上のプログラムをＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ）に展開し、ＭＰＵにより当該ＲＡＭに展開されたプログラムをフェッチすることによって各種動作を行なう。このような展開を行なうのは、アナログデバイスであるＲＯＭよりもクロック同期で動作するＤＲＡＭ系の方が圧倒的にリード／ライトのスループットが高いためである。
【０００３】
実際に、このような技術が使用されている例として、特許文献１では、シリアルＲＯＭ内のプログラムをＤＲＡＭ上に展開して動作するプリンタについて言及されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２４０６９３号公報
【特許文献２】特開２００７−２６４９７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、上述した動作を行なうためにはいくつかの問題がある。第１に、プログラムをＲＡＭに展開するまでの間（おおよそ数秒の時間）、ＭＰＵは通常動作を行なうことができない。
【０００６】
これは、プログラム上の全関数が本来あるべき位置（ＲＡＭ上の固定アドレス）に配置されない限り、ＭＰＵがコールしても良い関数（すなわち、プログラム・カウンタ）の分岐先が限定されてしまうためである。
【０００７】
特に、最近の組込機器では、μｉ−Ｔｒｏｎ等のＯＳ（Operating System）を実装しているものが多く、これが起動できないと製品として何もできない場合が多い。実際の製品の動きで説明すると、電源投入後、プログラムをＲＡＭに展開するまでの数秒間、パワーオン等のキー操作が受け付けられないため、ユーザは、機器が応答可能になるまで操作できず、待機しなければならない。
【０００８】
このような問題に対処するため、特許文献２には、ＭＰＵを含むＬＳＩの電源投入時に、ＭＰＵへ内部リセットをかけつつ、ＬＳＩ内のＤＭＡでプログラムをＲＡＭに展開する仕組みが開示されている。更に、この技術では、ある程度のサイズのプログラムを展開した後、ＭＰＵの内部リセットを解除し、且つ全プログラムをロードするまでＤＭＡを継続している。これにより、特許文献２の技術では、プログラムのＲＡＭ展開とＭＰＵの起動とを効率的且つ高速に行なっている。
【０００９】
しかし、この手法では、最低でもＯＳ部分をロードし終えなければ、ＭＰＵの内部リセットを解除できず、これは相当なサイズのＤＭＡ転送が必要となる（すなわち、起動が速まるとは言い難い）。また更に、ＯＳを起動した後も、全プログラムを転送し終えたわけではないので、キック可能なタスクが限定されてしまう。そのため、タスクのコールに制限をかける必要があると考えられる。
【００１０】
本発明は、上記課題に鑑みてなされたものであり、起動の開始を指示されてからユーザ操作の受付を開始するまでの時間を短縮できるようにした技術を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するため、本発明の一態様は、リード及びライト可能な不揮発性メモリに格納された記録装置起動用のブートプログラムを揮発性メモリに格納し、当該揮発性メモリに格納されたブートプログラムを実行する記録装置のコントローラであって、前記ブートプログラムの前記揮発性メモリへの格納が終わると、ブートモード時のメモリマップから通常モード時のメモリマップへの切り替えを行なう切替手段と、前記通常モード時のメモリマップにおいて、前記ブートモード時のメモリマップで前記ブートプログラムに割り当てられたアドレスと同じアドレスの前記揮発性メモリ上の領域に前記ブートプログラムを格納する格納手段と、前記ブートプログラムの前記揮発性メモリへの格納が行なわれている間、前記不揮発性メモリに格納された前記ブートプログラムを前記不揮発性メモリ上で実行し、前記揮発性メモリへの格納が終わり前記メモリマップの切り替えが行なわれると、前記揮発性メモリに格納された前記ブートプログラムを前記揮発性メモリ上で実行する制御手段とを具備する。
【発明の効果】
【００１２】
本発明によれば、起動の開始を指示されてからユーザ操作の受付を開始するまでの時間を短縮できる。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施の形態に係わる組込機器のメモリマップの一例を示す図。
【図２】本実施形態に係わる起動処理の概要を説明するための図。
【図３】本実施形態に係わる組込機器の構成の一例を示す図。
【図４】本実施形態に係わる組込機器の構成の変形例を示す図。
【図５】図３に示すデコードモード選択信号とアドレスデコーダとの制御の関係の一例を示すテーブル。
【図６】組込機器の処理の流れの一例を示すフローチャート。
【図７】実施形態２に係わる組込機器の処理の流れの一例を示すフローチャート。
【図８】実施形態３に係わる組込機器の処理の流れの一例を示すフローチャート。
【図９】各タスクの起動関係の一例を示す図。
【図１０】実施形態４に係わる組込機器の構成の一例を示す図。
【図１１】図１０に示すデコードモード選択信号とアドレスデコーダとの制御の関係の一例を示すテーブル。
【図１２】記録装置の制御系の構成の一例を示す図。
【発明を実施するための形態】
【００１４】
以下、本発明の一実施の形態について添付図面を参照して詳細に説明する。
【００１５】
（実施形態１）
まず、本実施形態の基本的な原理について説明する。図１は、本発明の一実施の形態に係わる組込機器のメモリマップの一例を示す図である。ここでは、ＭＰＵは、３２ｂｉｔに対応しており、４ＧＢのアドレス空間を有している場合について説明する。
【００１６】
アドレス０ｘｃ０００＿００００〜０ｘｆｆｆｆ＿ｆｆｆｆは、ＩＯエリア１０４（ＬＳＩ（Large Scale Integration）内外に含まれるＨ／Ｗ（Hardware）回路用のレジスタ領域）を示している。アドレス０ｘ８０００＿００００〜０ｘｂｆｆｆ＿ｆｆｆｆは、何もアサインされていないリザーブ領域１０３を示している。
【００１７】
アドレス０ｘ４０００＿００００〜０ｘ７ｆｆｆ＿ｆｆｆｆは、ＬＳＩ内に含まれるＳＲＡＭ（Static RAM）エリア１０２を示している。この領域は、ＭＰＵのスタックやＯＳ（オペレーティングシステム）用のタスク・コントロール・ブロック（ＴＣＢ）等に使用される。
【００１８】
アドレス０ｘ００００＿００００〜０ｘ３ｆｆｆ＿ｆｆｆｆは、ＤＲＡＭ（Dynamic RAM）エリア１０１を示しており、通常モード時（通常動作時）とブートモード時（ブート動作時）とでアサイン関係が異なってくる。具体的に説明すると、この領域は、通常モードでは、領域全体をＤＤＲ ＳＤＲＡＭ（Double-Data-Rate Synchronous Dynamic ＲＡＭ）やＳＤＲＡＭ等といったＤＲＡＭ（ダイナミックＲＡＭ）エリア１０１となる。ＤＲＡＭは、ＬＳＩ内部のＳＲＡＭとは異なり、８／１６／３２ＭＢと非常に大きなサイズのものが実装可能であるので、通常、この領域は、組込機器におけるメインメモリとなる。
【００１９】
また、ブートモード時には、通常モード時でのＤＲＡＭエリア１０１の一部がＲＯＭエリア１００として用られる。本実施形態においては、アドレス０ｘ００００＿００００〜０ｘ０ｆｆｆ＿ｆｆｆｆをＲＯＭエリア１００として用いる。この領域は、サイズ的な制約はないが、ブートモード時のＲＯＭエリア１００は、ＭＰＵのリセットベクタアドレスを含む。
【００２０】
このように本実施形態においては、ブートモード時のメモリマップでＲＯＭエリア１００にあるプログラム（ブートプログラム）が、通常モード時のメモリマップではＤＲＡＭエリア１０１にある。当然、ＲＯＭエリア１００とＤＲＡＭエリア１０１とにあるプログラムは、（少なくとも実行部分に関しては）同じものである必要があり、且つブートモードと通常モードとの間においてメモリマップ上の絶対アドレスも同じでなければならない。
【００２１】
また、組込機器の立ち上げ当初には、ＤＲＡＭエリア１０１にプログラムが実装されていない。つまり、このような構成を実現するためには、ＲＯＭエリア１００からＤＲＡＭエリア１０１にプログラムを格納（展開）する必要がある。そこで、図２を用いて、この処理のメカニズムについて説明する。
【００２２】
通常モード時にプログラムが配置されている領域は、ブートモード時にはＲＯＭエリア１００となるので、直接同じアドレスにプログラムを格納（展開）できない。そこで、通常、組込機器等で使用されているシステムのメモリマップには、ミラー／ゴースト／シャドウ等と言われる仕組み（以降、ミラーと呼ぶ）があるので、本実施形態においては、それを利用することでこの問題を解決する。
【００２３】
具体的な説明を行なうために、前提条件として、本実施形態に係わる組込機器においては、ＤＲＡＭとして１６ＭＢのメモリ領域が実装されており、ＲＯＭとして８ＭＢのメモリ領域が実装されているものとする。このような場合、例えば、ＲＯＭにおいては、ＲＯＭエリア１００の大きさよりも実際のデバイスの記憶サイズが小さいため、メモリマップ内では、同じデータが実ＲＯＭの容量毎に折り返されて見える。
【００２４】
例えば、ＲＯＭエリア１００のサイズが２５６ＭＢの時に８ＭＢのＲＯＭを接続すると、図２のブートモード側に示すように、同じコンテンツが見えるミラー領域が３２面存在する。同様に、ＤＲＡＭのサイズが１６ＭＢの場合、ブートモード時のメモリマップではＤＲＡＭエリア１０１のサイズが７６８ＭＢであるので、ミラー領域が４８面、通常モードでは６４面のミラー領域が存在する。
【００２５】
このとき、ブートモード時と通常モード時とにおけるメモリマップでのＤＲＡＭのミラー領域は、同じ記憶領域となる。そのため、ブートモードにおいて、例えば、ＲＯＭ領域＃０からＤＲＡＭ領域＃０に展開（複製）すれば、それは通常モード時のＤＲＡＭ領域＃０にデータを転送していることと同じこととなる。
【００２６】
すなわち、上記原理に従えば、ブートモードにおいて、ＲＯＭ内のプログラムをＤＲＡＭに展開しつつ、当該プログラムをＲＯＭ上で実行可能となり、且つ、ＤＲＡＭ上へのプログラムの展開が終わった後は、当該プログラムをＲＡＭで実行することができる。このとき、実行プログラムの絶対アドレスがブートモード時と通常モード時とにおいて変更されないため、起動する関数／タスクに制限が存在しない。なお、本実施形態において、ＲＯＭとは、リード及びライト可能な不揮発性メモリを指し、ＲＡＭとは、当該ＲＯＭよりもリード及びライト速度の速い揮発性メモリを指す。
【００２７】
当然、ブートモード時には、ＤＲＡＭよりもリード／ライトの速度で劣るＲＯＭ上でのプログラムの実行になるため、通常モード時の実行性能には及ばないが、ユーザのパワーキー操作を受け付ける程度の軽度のプロセスを行なう上では何の支障もない。
【００２８】
図３は、本実施形態に係わる組込機器の構成の一例を示す図である。ＬＳＩ３０１は、組込機器における動作を統括制御する。ＭＰＵ３００は、ＬＳＩ３０１上に設けられる各部を制御する。ＭＰＵ３００は、例えば、ＲＯＭ（この場合、ＲＯＭデバイス３１８）内のプログラムをＲＡＭ（この場合、ＤＲＡＭデバイス３２０）に展開し、そのプログラムをフェッチして各部の制御を行なう。なお、ＭＰＵ３００は、バス（マスタ部分）３０２を介して各スレーブにアクセスする。ＤＭＡ３０３は、ＬＳＩの電源投入時に、ＭＰＵ３００の実行プログラムをＲＯＭからＤＲＡＭに展開（複製）する。
【００２９】
バス（マスタ部分）３０２には、ＭＰＵ３００以外のバスマスタとしてＤＭＡ３０３が実装されている。そのため、バス（マスタ部分）３０２には、少なくとも２つのバスマスタが存在することになるので、互いのアクセスを調停するためのバスアービタ３０４が設けられている。
【００３０】
バスアービタ３０４においては、バスの使用権を得たバスマスタのアドレス信号３０５（どのスレーブへアクセスするかを示す情報）をアドレスデコーダ３０６へ送信する。アドレスデコーダ３０６は、当該送られてきたアドレス信号３０５に基づいてスレーブ選択信号３０７（使用権を持つバスマスタをどのスレーブに接続するかを示す情報３０７）を生成し、それをバスＭＵＸ３０８へ送信する。
【００３１】
バスＭＵＸ３０８は、スレーブ選択信号３０７に基づいて、バスの使用権を持つバスマスタの情報を、バス（マスタ部分）３０２、バス（スレーブ部分）３０９、選択されたバススレーブへと送信する。
【００３２】
ここで、バス（スレーブ部分）３０９には、複数のスレーブが接続されている。図２に示す各スレーブは、図１のメモリマップ内に記載されているスレーブとリンクしている。
【００３３】
まず、ＤＲＡＭエリア１０１に該当するスレーブがＤＲＡＭデバイス３２０であり、ＤＲＡＭＩ／Ｆコントローラ３１９が、当該デバイス３２０にアクセスするためのＩ／Ｆ制御を行なう。
【００３４】
ＲＯＭエリア１００に該当するスレーブがＲＯＭデバイス３１８であり、ＲＯＭＩ／Ｆコントローラ３１７が、当該デバイス３１８にアクセスするためのＩ／Ｆ制御を行なう。
【００３５】
ＬＳＩ内部ＳＲＡＭエリア１０２に該当するスレーブがＬＳＩ内部ＳＲＡＭ３１６となる。なお、本実施形態における処理との関係性が薄いため、ＬＳＩ内部ＳＲＡＭ３１６制御用のＩ／Ｆコントローラについての図示は省略している。
【００３６】
最後に、ＩＯエリア１０４に該当するスレーブは２つ存在し、１つ目がＬＳＩ内部ＩＯ空間（レジスタ）３１３であり、もう１つがＬＳＩ外部のＩＯ空間、すなわち、ＡＤＣや外付けＵＳＢ２．０ホスト等のＬＳＩ外部デバイス３１５である。ＬＳＩ外部ＩＯ空間Ｉ／Ｆコントローラ３１４が、当該デバイス３１５にアクセスするためのＩ／Ｆ制御を行なう。
【００３７】
ここで、リマップ部３１１について説明する。リマップ部３１１は、例えば、ＬＳＩ内部ＩＯ空間（レジスタ）３１３に含まれる１ｂｉｔのレジスタＦＦ（ＬＳＩ内部ＩＯ空間（レジスタ）３１３との関係を接続線３１２として記載）等で実現される。リマップ部３１１は、デコードモード選択信号３１０を生成し、それをアドレスデコーダ３０６へと送信する。
【００３８】
図５は、デコードモード選択信号３１０とアドレスデコーダ３０６との制御の関係を示すテーブルである。ここに示されるように、リマップ部３１１によって、本システムはブートモードと通常モードとのメモリマップを切り変え可能に構成されている。
【００３９】
以上が、組込機器の構成の一例についての説明である。なお、図３に示す構成は、シェアードバスなどと呼ばれるものであり、昨今の流行りであるインタコネクト構成の場合は、構成要素の追加が更に必要となる。インタコネクト構成については、後述する実施形態において説明する。
【００４０】
また、上述した説明では、ＤＭＡ３０３は、ＭＰＵ３００の実行プログラムをＲＯＭエリア１００からＤＲＡＭエリア１０１に展開を行なうＨ／Ｗ構成として説明したが、この展開制御自体は、ＭＰＵ３００自体で行なっても特に問題はない。昨今のＯＳは、プリエンプティブのマルチタスクが当たり前に実装されているため、ユーザのパワーキー操作受け付け処理をしながら、実行プログラムの展開処理を行なう程度であれば普通に実行可能である。
【００４１】
また、上述した構成の他、図４に示す構成を採っても良い。図３に示す構成と、図４に示す構成との相違点としては、ＤＭＡ３０３の違いが挙げられる。具体的には、図３の構成では、ＲＯＭエリア１００からＤＲＡＭエリア１０１へのデータ転送時に、ＤＭＡ３０３がＲＯＭＩ／Ｆコントローラ３１７を介してＲＯＭデバイス３１８のデータをリードする。その後、ＤＭＡ３０３がＤＲＡＭＩ／Ｆコントローラ３１９を介しＤＲＡＭデバイス３２０に同データをライトするといった手続きを行なう。
【００４２】
これに対し、図４では、フライバイと呼ばれる形式が採用されている。具体的には、ＲＯＭＩ／Ｆコントローラ３１７内の制御回路で自発的にＲＯＭデバイス３１８のデータをリードし、それをフライバイ用バス３２１経由でＤＭＡ３０３へと転送する。その後、ＤＭＡ３０３がＤＲＡＭＩ／Ｆコントローラ３１９を介しＤＲＡＭデバイス３２０に同データをライトするといった手続きを行なう。これにより、ＤＭＡ３０３がＭＰＵ３００とシェアしているバス部分（３０２、３０９）を使用する回数が半分となり、システムとして効率が良いため、昨今ではこちらの形式の方が主流となってきている。
【００４３】
次に、図６を用いて、図３（又は図４）に示す構成における処理の流れの一例について説明する。
【００４４】
ユーザが、組込機器に電源を投入すると、ＬＳＩ３０１内においてＨ／Ｗリセット解除が行なわれる（Ｓ１００）。このとき、リマップ部３１１は、ブートモード時のメモリマップを設定する（Ｓ１０１）。
【００４５】
Ｈ／Ｗリセット解除後、ＭＰＵ３００が自動的に起動し、ＭＰＵ３００によってシステムの初期化が行なわれる（Ｓ１０２）。システムの初期化としては、例えば、ＭＰＵ３００内のスタックポインタの初期化、ＲＯＭＩ／Ｆコントローラ３１７の初期化、ＤＲＡＭＩ／Ｆコントローラ３１９の初期化、ＬＳＩ３０１の駆動クロック周波数の初期化（図３では不図示）等が最低限行なわれる。
【００４６】
続いて、ＤＭＡ３０３は、ＭＰＵ３００の制御に従って、ＲＯＭエリア１００からＤＲＡＭエリア１０１へのプログラムの展開（複製）を開始する（Ｓ１０３）。上述したように、ブートモード時のメモリマップにおいては、通常モード時にプログラムが配置されるべきエリアは不可視であるので、ＤＲＡＭのミラー領域に格納処理（展開処理）が行なわれる。また、この展開処理の間、ＭＰＵ３００においては、ＲＯＭエリア１００に格納されたプログラムのフェッチを行なう。
【００４７】
ここで、ＬＳＩ３０１内においては、通常の処理をこなしていく「通常ルーチン」と、Ｓ１０３で開始されたＤＭＡ３０３の転送終了を待機する「割込ルーチン」とに分かれて処理が行なわれる（Ｓ１０４）。
【００４８】
通常ルーチンの処理では、Ｓ１０３でのＤＭＡ３０３起動後、ＭＰＵ３００は、スタートタスクでＯＳを起動し（Ｓ１０５）、その後、組込機器のユーザ向けサービスを開始する（Ｓ１０６）。この通常ルーチンの処理は、ＲＯＭエリア１００上でのプログラムの実行と並行して行なわれる。
【００４９】
ここで、ユーザ向けサービスとは、ボタンやテンキー等（操作手段）を介したキー操作の受付や、最近流行りのタッチパネル（操作手段）からの入力の受付等をいう。その後、ＭＰＵ３００は、同期待ち状態に入る（Ｓ１１０）。すなわち、割込ルーチンによる既定の処理が終了するまでの間、処理を待機する（Ｓ１１０でＮＯ）。
【００５０】
一方、割込ルーチンの処理では、ＤＭＡ３０３の処理が終了し、割込信号がＭＰＵ３００に入力されるまで待機する（Ｓ１０７でＮＯ）。割込信号が発生すると（Ｓ１０７でＹＥＳ）、リマップ部３１１は、メモリマップを通常モードに変更する（Ｓ１０８）。この変更により、Ｓ１０３の処理でＲＯＭエリア１００からＤＲＡＭエリア１０１に展開されたプログラムを、通常モード時のメモリマップに移動することができる。すなわち、このタイミングで既に起動されている通常ルーチンの処理を、速度の遅いＲＯＭ実行から速度の速いＲＡＭ実行に変更できる。
【００５１】
そして、通常ルーチンと割込ルーチンとの同期がとれると（Ｓ１１０でＹＥＳ）、ＭＰＵ３００は、フェッチ対象デバイスをＤＲＡＭデバイス３２０に変更し、ＤＲＡＭエリア１０１に展開されたプログラムのフェッチを行なう（Ｓ１１１）。
【００５２】
ここで、割込ルーチンを実行するためのプログラム（ＩＳＲ）のアドレス割り当てについて補足する。一般には、プログラム（ＩＳＲ）を、ブートモード時に参照できるＤＲＡＭ上のいずれかのアドレスにマップし、その絶対アドレスを用いてプログラムを実行する。このとき、プログラム（ＩＳＲ）を、図１に示すブートモード時のＲＯＭエリア１００に配置しない。その理由としては、実行プログラムのフェッチメモリをＲＯＭデバイス３１８からＤＲＡＭデバイス３２０に変更しようとする時に、それを実行するコード自身がＲＯＭデバイス３１８にあることになる。そのため、意図せぬタイミングでＭＰＵのフェッチ対象デバイスが変わることになり、誤動作する場合があるからである。他の手法としては、ＭＰＵコアの端子に付いているＨＡＬＴ／ＲＥＴＲＹといった信号を使う手段もあるが（公知）、その方法の詳細については本実施形態の要部ではないため、ここでは、その説明については省略する。
【００５３】
その後、ＭＰＵ３００は、同期待ち状態となっている通常ルーチン側の処理と合流した後（Ｓ１１０でＹＥＳ）、通常動作の動作を実行する。
【００５４】
以上説明したように実施形態１によれば、ブートモード時のメモリマップと、通常モード時のメモリマップとを切替可能な構成を有する。そして、通常モード時のメモリマップにおいて、ブートモード時のメモリマップでブートプログラムに割り当てられたアドレスと同じアドレスのＲＡＭ上の領域にＲＯＭに格納されたブートプログラムを展開する。すなわち、ブートモード時と通常モード時とにおけるプログラム自体の絶対アドレスを同じにする。
【００５５】
そのため、ＲＯＭに格納されたプログラムをＲＡＭに展開しつつ、当該プログラムをＲＯＭ上（不揮発性メモリ上）で実行することができる。また、ＲＡＭへのプログラムの展開が終わった後は、当該プログラムをＲＡＭ上（揮発性メモリ上）で実行することができる。
【００５６】
これにより、ＲＯＭ内のプログラムをＲＡＭに展開している段階でＯＳを起動できるため、起動の開始を指示されてからユーザ操作の受付（キー操作の受付等）を開始するまでの時間を短縮できる。
【００５７】
（実施形態２）
次に、実施形態２について説明する。実施形態１との相違点としては、実施形態１を説明した図６のＳ１０１〜Ｓ１０４の処理が挙げられる。具体的に説明すると、実施形態２においては、図７に示すように、Ｓ１００の処理の直後に、ＤＭＡ３０３による展開処理が実行される（Ｓ２００）。
【００５８】
すなわち、このような処理は、ＲＯＭエリア１００のＤＭＡソースアドレスと、ＤＲＡＭエリア１０１のディスティネーションアドレスとが、ＬＳＩ内部Ｈ／Ｗに実装されているため行なえる。
【００５９】
また、フローチャート上でのＤＭＡの起動位置が早まるので、それに伴い、通常ルーチンと、ＤＭＡ３０３の転送終了を待機する割込ルーチンの分岐位置も変更される（Ｓ２０１）。
【００６０】
以上説明したように実施形態２によれば、ＭＰＵ３００がＤＭＡ３０３を起動する手間を省けるため、実施形態１の場合よりも更に、起動の開始を指示されてからユーザ操作の受付（キー操作の受付等）を開始するまでの時間を短縮できる。
【００６１】
（実施形態３）
次に、実施形態３について説明する。ここで、組込機器がＲＡＭ実行を行なうのは、ＭＰＵ３００の処理速度を上げたいがためである。そのため、ＲＯＭ実行が行なわれる期間が少しでも存在してしまうと、その間、数秒程度ではあるが、ＭＰＵ３００による処理速度が上がらない。例えば、組込機器が記録装置であるとすると、記録開始までの速度が上がらない可能性がある。また、表示装置を持つ組込機器であれば、アニメーション等の表示が通常モード時よりも遅くなる可能性がある。このように組込機器を制御する上では、たとえ数秒であるとはいえ、このような時間ロスが無いのが望ましい。
【００６２】
一方で、組込機器の制御においては、ユーザからのパワーキー操作の受付や、ＬＥＤの点灯等、ＭＰＵ３００の処理速度を要求しない処理が多々ある。また、Ｈ／Ｗ起動直後に、ＲＯＭエリア１００からＤＲＡＭエリア１０１へ展開を行なう段階で、ユーザが行なう処理としては、このような軽度の処理が多い。
【００６３】
そこで、実施形態３においては、図８に示すように、ＲＯＭ実行の間、高速処理が開始されないようガードをかける。これにより、上記望ましくない状態を回避する。ここで、図８に示す処理において、実施形態１を説明した図６に示す処理との相違点としては、Ｓ３００及びＳ３０１の処理が挙げられる。
【００６４】
つまり、ＭＰＵ３００が、ＲＯＭ実行の間には、一部（処理の軽い）のタスクのみが起動され（Ｓ３００）、ＲＯＭエリア１００からＤＲＡＭエリア１０１への展開が終了した（Ｓ１１０に示す同期ＯＫ）後、全タスクを制限なしに実行する（Ｓ３０１）。
【００６５】
ここで、図９を用いて、この処理の概要について更に詳細に説明する。図９には、各タスクの起動関係を示す図が示される。
【００６６】
まず、電源投入Ｔ３００が行なわれる。この処理は、図８のＳ１００に示す処理が該当する。その後、ブートプログラムＴ３０１がコールされる。ブートプログラムのコールＴ３０１は、図８のＳ１０１〜Ｓ１０３の処理が該当する。
【００６７】
また、Ｔ３０１の処理は、ＤＭＡ３０３によりＲＯＭエリア１００からＤＲＡＭエリア１０１への展開処理の開始（Ｓ１０３）を含むので、このポイントで通常タスクと、割込タスクとに分岐する。この処理は、図８のＳ１０４の処理が該当する。
【００６８】
更に、Ｔ３０１の処理では、ＯＳ側に処理を移管するが、この移管はＴ３０１からＴ３０２の間に示す処理（コール）を示している。起動後、ＯＳ（Ｔ３０２）が最初にコールするルーチンは予め決められており、ここでは、その処理をスタートタスク（Ｔ３０３）と呼ぶ。従来の組込機器においては、このスタートタスク（Ｔ３０３）で必要なタスクを全て起動してしまうが、本実施形態においては、この処理に制限をかける。具体的には、予め登録された所定の処理（タスク（プログラム））のみスタートタスク（Ｔ３０３）で実施する。その概要が、Ｔ３０３とＴ３０４〜Ｔ３０６との処理の間のコールであり、この処理は、図８のＳ３００が該当する。この場合、キー操作管理タスク（Ｔ３０４）やパネル操作管理タスク（Ｔ３０５）が所定の処理として予め登録されている。これら所定の処理は、比較的軽い処理負荷しか掛からないため、スタートタスク（Ｔ３０３）において直接起動される。それ以外の処理負荷が重い処理（高速処理タスク）は、同期専用タスク（Ｔ３０６）を介してコールする仕組みとなっている。
【００６９】
ここで、同期専用タスク（Ｔ３０６）においてどのような処理を行なうかというと、当該処理では、まず、どのような組込機器用のリアルタイムＯＳにも実装されているＷＡＩＴ命令を使用し、ＤＭＡ終了のフラグ待ちをする。要は、この処理が、図８に示すＳ１１０の処理（同期確認）となる。
【００７０】
ＤＭＡ終了のフラグは、割込タスクにおけるＤＭＡ割込ルーチン（ＩＳＴ）内で設定される（フラグオン）。ＤＭＡ割込ルーチン（ＩＳＴ）は、ＲＯＭエリア１００からＤＲＡＭエリア１０１への展開処理の終了時にコールされるタスクであり、図８に示すＳ１１０の処理（同期確認）が該当する。
【００７１】
ＷＡＩＴ命令による同期（Ｓ１１０）が完了した後、同期専用タスク（Ｔ３０６）は、残りの高速処理タスクのコールを行なう。この処理が、Ｔ３０６から記録タスクＴ３０７及び読取タスクＴ３０８へのコールに該当する。
【００７２】
以上説明したように実施形態３によれば、ＭＰＵ３００がＲＯＭ実行中の場合には、予め登録された所定の処理（処理負荷の軽い処理）のみ実行され、高速処理（処理負荷の重い処理）は実行されない。そのため、実施形態１の場合よりも更に、起動の開始を指示されてからユーザ操作の受付（キー操作の受付等）を開始するまでの時間を短縮できる。
【００７３】
（実施形態４）
次に、実施形態４について説明する。実施形態１においては、シェアードバスと呼ばれるアーキテクチャを基にしたＬＳＩ３０１の構成を例に挙げて説明した。上述した通り、昨今の流行りはインタコネクト、若しくはクロスバースイッチと呼ばれる構成である。そこで、実施形態４においては、それら構成に対して上記制御を適用した場合について説明する。
【００７４】
ここでまず、インタコネクトについて簡単に説明する。例えば、上述した図３の構成においては、ＤＭＡ３０３がＤＲＡＭデバイス３２０に書き込みを行なうのと同時のタイミングで、ＭＰＵ３００がＲＯＭデバイス３１８からプログラムをフェッチすることができなかった。これは、バスアービタ３０１やバスＭＵＸ３０８等のＨ／Ｗ回路部分が、バスマスタであるＭＰＵ３００とＤＭＡ３０３とで共有しているために制限が生じるためである。本来は、スレーブであるＤＲＡＭデバイス３２０及びＲＯＭデバイス３１８は、物理的に別のＨ／Ｗであるため、双方への同時アクセスが可能な構成も取り得るはずである。これを実現したアーキテクチャがインタコネクトであり、一般に流布されているバスプロトコルとしては、ＡＲＭ社のＡＭＢＡ３．０（ＡＸＩ）やＴＥＮＳＩＬＩＣＡ社のＰＩＦ３．０等が挙げられる。
【００７５】
図１０は、実施形態４に係わるＬＳＩ３０１（シェアードバス）の構成の一例を示す図である。実施形態１を説明した図３との相違点としては、シェアードバス構成時には、ＭＰＵ３００及びＤＭＡ３０３で共有されていたバスＨ／Ｗ部を、マスタ別、若しくはスレーブ別に実装しただけである。これにより、使用上の便宜性は著しく向上する。
【００７６】
最初に用語の定義について説明する。シェアードバス構成時に共有されていたバスＨ／Ｗ回路を、マスタに付加した場合マスタコンポネントと呼び、スレーブに付加した場合スレーブコンポネントと呼ぶ。
【００７７】
まず、ＭＰＵ３００用のマスタコンポネント４００について説明する。ＭＰＵ３００用のマスタコンポネント４００には、ＭＰＵ３００の他、アドレスデコーダ４０２とスレーブＭＵＸ４０３とが設けられる。アドレスデコーダ４０２は、メモリ空間へのアクセス時にＭＰＵ３００が出力するアドレス信号４０１を検出し、どのスレーブに転送するかを示すスレーブ選択信号４０４をスレーブＭＵＸ４０３へ出力する。スレーブＭＵＸ４０３は、ＭＰＵ３００専用のマスタバス４６０を介して、ＭＰＵ３００が出力するバス転送情報を、スレーブ選択信号４０４によって選択されたスレーブへと転送する。
【００７８】
この構成は、ＤＭＡ３０３についても同様であり、マスタコンポネント４１０には、アドレスデコーダ４１１、スレーブＭＵＸ４１２が設けられている。ＤＭＡ３０３は、アドレス信号４１３を送信し、それによってアドレスデコーダ４１１は、スレーブ選択信号４０４をスレーブＭＵＸ４１２へ出力する。また、ＤＭＡ３０３専用のマスタバス４７０も設けられている。
【００７９】
次に、ＤＲＡＭデバイス３２０用のスレーブコンポネント４５０について説明する。スレーブコンポネント４５０には、ＤＲＡＭＩ／Ｆコントローラ３１９の他、マスタアービタ４５１とマスタＭＵＸ４５２とが設けられる。上述した通り、図１０に示す構成によれば、ＤＭＡ３０３がＤＲＡＭデバイス３２０にアクセス中であっても、ＭＰＵ３００がＲＯＭデバイス３１８に転送可能である。しかし、ＤＭＡ３０３とＭＰＵ３００のＤＲＡＭデバイス３２０へのアクセスを同時のタイミングで許可することはできない。そのため、複数のマスタアクセスの競合を調停する機構がスレーブ毎に必要となり、マスタアービタ４５１は、ＤＲＡＭデバイス３２０用として実装されている。
【００８０】
どのマスタを選択するかの判断は、バス権制御信号（４５４、４５５）に基づいて行なわれる。バス権制御信号は、例えば、公知のＲＥＱＵＥＳＴ−ＡＣＫ、若しくはＶＡＬＩＤ−ＲＥＡＤＹ信号によるハンドリング（双方、名前の違いだけでメカニズムは同じ）等で実現される。また、このバス権制御信号は、バスマスタ別、且つスレーブ毎に実装されており、ＭＰＵ３００のＤＲＡＭデバイス３２０に関するバス権制御信号を符号４５４とし、ＤＭＡ３０３のＤＲＡＭデバイス３２０に関するバス権制御信号を符号４５５として示している。マスタアービタ４５１は、バス権制御信号（４５４、４５５）に基づき、どのマスタがＤＲＡＭデバイス３２０にアクセスして良いのかを判断し、その出力結果であるマスタ選択信号４５３がマスタＭＵＸ４５２に入力される。マスタＭＵＸ４５２は、マスタ選択信号４５３に従って、マスタ選択信号４５３によって選択されたマスタのバス情報をＤＲＡＭＩ／Ｆコントローラ３１９に転送する。
【００８１】
この構成は、他のスレーブに関しても同様である。すなわち、スレーブコンポーネント４２０、４３０、４４０も同様の構成で実現される。ここで、スレーブコンポネント４２０について補足する。ＬＳＩ内部ＩＯ空間（レジスタ）３１３及びＬＳＩ外部デバイス３１５は、電気的に別の構成であるため、本来であれば、別々のスレーブコンポネントを構成しても良い。しかし、双方ともにアクセス頻度が低いため、同時アクセス可能な構成とするメリットが低いので、Ｈ／Ｗ資源節約のためにも、同一のスレーブコンポネントとしている。このようにインタコネクトは、同時アクセスを許可する／しないと言った括り込みにより、スレーブコンポネントを構成することが可能である。
【００８２】
ここで、リマップ部３１１は、実施形態１を説明した図３と同様に、ＬＳＩ内部ＩＯ空間（レジスタ）３１３に含まれる１ｂｉｔのレジスタＦＦ（ＬＳＩ内部ＩＯ空間（レジスタ）３１３との関係を接続線３１２として記載）等で実現される。
【００８３】
リマップ部３１１は、デコードモード選択信号３１０を生成する。この信号は、各マスタコンポネント内に含まれるアドレスデコーダに転送される。具体的に説明すると、図１０の場合、デコードモード選択信号３１０は、マスタコンポネント４００のアドレスデコーダ４０２と、マスタコンポネント４１０のアドレスデコーダ４１１とに転送される。
【００８４】
図１１は、デコードモード選択信号３１０とアドレスデコーダ４０２とアドレスデコーダ４１１との制御の関係を示すテーブルである。ここに示されるように、リマップ部３１１によって、本システムはブートモードと通常モードとのメモリマップを切り変え可能に構成されている。なお、ＭＰＵ３００による処理の流れは、実施形態１を説明した図６のフローチャートと同様となる。
【００８５】
以上説明したように実施形態４によれば、インタコネクト構成においても、上記実施形態１と同様の処理が行なえる。
【００８６】
（実施形態５）
次に、実施形態５について説明する。実施形態５においては、上述した実施形態１〜４で説明したＬＳＩ３０１を有する組込機器を記録装置１０のコントローラとして適用（内蔵）した構成の一例について説明する。
【００８７】
図１２は、記録装置１０の制御系の構成の一例を示す図である。
【００８８】
記録装置１０は、ホスト装置４０と接続されている。ホスト装置４０は、画像データの供給源となるコンピュータ（或いは、画像読取用のリーダやデジタルカメラなど）で実現される。ホスト装置４０と記録装置１０との間では、インタフェース（以下、Ｉ／Ｆと呼ぶ）１１を介して画像データ、コマンド等の授受が行なわれる。
【００８９】
コントローラ２０には、上述した、ＬＳＩ３０１、ＬＳＩ外部デバイス３１５、ＲＯＭデバイス３１８、ＤＲＡＭデバイス３２０が設けられる。なお、ＤＲＡＭデバイス３２０は、例えば、プリントバッファと共用して使用されても良い。また、ＲＯＭデバイス３１８は、マルチパス記録等に際して使用されるテーブル（間引きテーブル）等が格納される領域であっても良い。
【００９０】
この他、コントローラ２０には、画像処理部２１や記録ヘッド制御部２２等も設けられる。画像処理部２１は、ホスト装置４０からＩ／Ｆ１１を介して受信した画像データに対して各種画像処理を行なう。また、記録ヘッド制御部２２は、各種制御信号（ＣＬＫ、ＤＡＴＡ等）を記録ヘッド１２に向けて送信し、それにより、記録ヘッド１２の動作を制御する。
【００９１】
記録ヘッド１２は、記録ヘッド制御部２２から転送されてきた信号に基づいて記録ヘッド１２内の各吐出口からインクを吐出させる。これにより、記録媒体に画像が記録される。
【００９２】
ここで、記録装置１０の起動時には、上述した図６等に示す処理が実行される。すなわち、ＲＯＭ（ＲＯＭデバイス３１８）に格納されたプログラム（記録装置起動用のプログラム）をＲＡＭ（ＤＲＡＭデバイス３２０）に展開しつつ、当該プログラムをＲＯＭ上で実行することができる。また、ＲＡＭへのプログラムの展開が終わった後は、当該プログラムをＲＡＭ上で実行することができる。
【００９３】
以上説明したように実施形態５によれば、上述した組込機器を記録装置に適用することができる。なお、記録装置は、必ずしも記録ヘッドを有する必要はなく、記録ヘッドを用いずに記録を行なう形態であっても良い。また、記録方式もインクジェット方式に限られず、どのような方式（例えば、レザー方式）であっても良い。その他、組込機器は、記録装置以外にも、表示装置等幅広く適用できることは言うまでもない。
【００９４】
以上が本発明の代表的な実施形態の一例であるが、本発明は、上記及び図面に示す実施形態に限定することなく、その要旨を変更しない範囲内で適宜変形して実施できるものである。
【００９５】
例えば、上述した実施形態においては、ＲＡＭがＤＲＡＭである場合について説明したが、ＲＡＭは、ＲＯＭに比べて速いアクセス速度（リード／ライト速度）を有するメモリであれば良く、例えば、ＳＤＲＡＭ、ＤＤＲ、ＤＤＲ２、ＤＤＲ３等であっても良い。また、ＲＯＭとしては、例えば、パラレルＦＬＡＳＨ ＲＯＭやシリアルＦＬＡＳＨ ＲＯＭ等のＮＯＲ型のフラッシュＲＯＭであれば良い。その他、ＲＯＭとしては、パラレルＭＡＳＫ ＲＯＭやシリアルＭＡＳＫ ＲＯＭ等のマスクＲＯＭであっても良い。
【図１】
2013117932.tif 000003
【図２】
2013117932.tif 000004
【図３】
2013117932.tif 000005
【図４】
2013117932.tif 000006
【図５】
2013117932.tif 000007
【図６】
2013117932.tif 000008
【図７】
2013117932.tif 000009
【図８】
2013117932.tif 000010
【図９】
2013117932.tif 000011
【図１０】
2013117932.tif 000012
【図１１】
2013117932.tif 000013
【図１２】
2013117932.tif 000014