説明

データ圧縮プログラム

【課題】電子機器に搭載される制御部のファームウェア等のプログラムをデータ圧縮するデータ圧縮プログラムにおいて、命令コード長の特徴を利用して、従来のスライド辞書方式のデータ圧縮処理よりも高いデータ圧縮率を実現すると共に、単純なデータ展開処理により、高速にデータ展開可能な圧縮コードを生成する。
【解決手段】4バイト命令モードを有するCPUが実行するファームウェアのデータ圧縮処理において、非圧縮データ形式15a、第1圧縮データ形式15b、第2圧縮データ形式15cを用いる。このうち第2圧縮データ形式15cを、4バイト命令モードを有するCPUが実行するプログラム中に4バイト間隔で出現する割合が高いデータ列に対応したデータサイズが小さい圧縮データ形式としたことより、従来のスライド辞書方式よりも高いデータ圧縮率を実現することができる。また、圧縮コードの構成が単純になり、高速なデータ展開処理が可能となる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、電子機器等に搭載されるファームウェア等のデータをデータ圧縮するためのプログラムに関する。
【背景技術】
【0002】
現在、電子機器の多くは、CPU、メモリ(ROM、RAMなど)等を含むマイコンを搭載しており、電源投入時に各種デバイスの設定、状態チェック等の初期化処理などの所定の処理を行って、一連の処理完了後に使用可能状態になるようになっている。この際、予めROM等に格納されている初期化プログラムが、RAM等の主記憶装置上にロードされ、この初期化プログラムがCPUによって実行されることにより、電子機器を構成する各種デバイスの初期化がなされる。
【0003】
図8(a)は、従来の電子機器の制御部の構成を、(b)は、従来の電子機器に組み込まれるファームウェアの格納状態を示す。従来の電子機器の制御部は、CPU100、RAM200、ROM300及びこれらを結ぶバス400等からなり、予めROM300等に格納された初期化プログラムや動作プログラムに基いて、バス400やI/Oポート(不図示)等のインターフェースを介して、各種デバイス(不図示)と相互にデータの授受を行い、それぞれのデバイスに動作指令したり、状態監視等を行ったりしつつ、電子機器全体の制御を行うようになっている。
【0004】
また、こうした電子機器の多くは補助記憶装置を持たないので、予めROM300にIPL(イニシャルプログラムローダ)310とファームウェア311が一体として格納されている。IPL310は、起動時にCPU100が最初に自動的に実行する領域に設けられているので、電子機器の電源が投入されると、まずIPL310が実行されて、IPL310内のロードプログラム312によりROM300上に格納されたファームウェア311は、RAM200上にロードされる。そして、RAM200上にロードされたファームウェア311は、CPU100によって実行されて機器の起動処理や動作制御が行われる。
【0005】
一般的に、ROMは、RAMと比較して、容量あたりの価格が高く、また速度も遅いという欠点がある。また、近年では、電子機器の高機能化に伴い、機器を制御するファームウェア等のプログラムが大規模化し、プログラムサイズが大きくなる傾向がある。サイズの大きいプログラムをそのままROM上に置くことは、高価なROMを大量に使うことになるため、機器のコストアップに繋がるという問題があった。こうした問題に対して、予めプログラムをデータ圧縮し、圧縮済プログラムをROM上に格納しておき、圧縮済プログラムをデータ展開するルーチンを備えたIPLによって、起動時に圧縮済プログラムを展開してRAM上に配置して、プログラムを起動・実行するという手法がとられるようになっている。
【0006】
しかし、この一方で、プログラムをデータ圧縮することにより、機器の起動時にROM上に格納された圧縮済プログラムをRAM上にデータ展開するのに必要な処理時間が長くなり、機器の起動が遅くなってしまうという問題があった。
【0007】
電子機器等に搭載するプログラムにおけるこれらの問題の改善にあたって、例えば特許文献1では、プログラムの展開速度を高めるために、予めROMに格納した圧縮済システムプログラムを装置起動時にCPU及びデータ展開ハードウェア(CODEC)を用いて展開し、RAM上に配置する構成としている。また、特許文献2では、CPUのマシンコードを、コードが意味する命令の性質によって複数のタイプに区分し、タイプ毎に異なる圧縮アルゴリズムを使用してマシンコードを圧縮して、ROMに保存するプログラムの圧縮率を高めている。この他に、プログラムコードの圧縮率を高める手法として、漢字コードやカラーコード等の入力データ長の規則性を柔軟に取込んで、複数バイト長のデータを効率よく圧縮する手法(特許文献3)、RISC CPUにおいて、拡張命令コードで置換することにより、コードの冗長フィールドを除去したうえで、プログラムを圧縮する手法(特許文献4)、プログラムのコードを並べ替えることによって、プログラム境界の圧縮率の低下を抑える手法(特許文献5)等が、知られている。
【特許文献1】特開2002−366362号公報
【特許文献2】特開平10−320172号公報
【特許文献3】特開平05−128100号公報
【特許文献4】特開2000−222203号公報
【特許文献5】特開2004−328097号公報
【発明の開示】
【発明が解決しようとする課題】
【0008】
これらのプログラムが搭載される電子機器において、プログラムのROM上の容量、及び起動時のRAM上へのデータ展開速度は、いずれも機器のコストや性能に重要な影響を与えるものであり、トレードオフの関係にある両者を総合的な観点からバランスよく構成することが重要である。特許文献1及び2〜5に例示した手法は、いずれか一方に重点が置かれているもので、専用ハードウェアを用いることによってデータ展開処理速度の向上と引き換えにコスト上昇を招いたり、複雑なルールによりプログラムコードの圧縮率を高めたために、データ展開プログラムが複雑化し、データ展開に時間がかかったりして、コストと性能(データ展開速度)をバランスよく構成することが困難であった。
【0009】
本発明は、上記の点に鑑みてなされたもので、電子機器に搭載されるマイコンのファームウェア等のプログラムコードをデータ圧縮するデータ圧縮プログラムにおいて、プログラムコードを搭載する機器のCPUの命令コード長の特徴を利用して、従来のスライド辞書方式のデータ圧縮処理よりも高いデータ圧縮率を実現すると共に、単純なデータ展開処理により、高速にデータ展開可能な圧縮コードを生成することが可能なデータ圧縮プログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
上記目的を達成するために請求項1の発明は、4バイト命令モードを有するCPUが実行する機器制御用ファームウェアをデータ圧縮するために、コンピュータを、前記機器制御用ファームウェアを保持するデータ保持手段、前記機器制御用ファームウェアのデータ列のうち、現在データ圧縮処理の対象になっているデータ列(検索データ列)の一部を順次保持するパターン検索バッファ、前記機器制御用ファームウェアのデータ列のうち、既にデータ圧縮処理の対象になったデータ列の一部又は全部であるスライド辞書用のデータを保持するスライド辞書バッファ、前記パターン検索バッファの検索データ列と一致する一致データ列を前記スライド辞書バッファ内のデータから検索するパターン検索手段、及び前記パターン検索手段による検索結果を用いて、スライド辞書方式により前記制御機器用ファームウェアをデータ圧縮するデータ圧縮手段として機能させるためのデータ圧縮プログラムにおいて、前記データ圧縮手段は、前記機器制御用ファームウェアのデータを、第1のデータ形式、第2のデータ形式、及び第3のデータ形式に変換し、前記第1乃至第3の各データ形式は、データ形式識別用の識別データ領域を有し、前記第1のデータ形式は、1ビットの識別データ領域に加えて、データを非圧縮で保持する8ビットのデータ領域を有し、前記第2のデータ形式は、2ビットの識別データ領域に加えて、前記一致データ列の相対位置を示す10ビットの位置データ領域と、前記一致データ列のデータ長を示す2ビットのデータ長領域とを有し、前記第3のデータ形式は、2ビットの識別データ領域に加えて、前記一致データ列の相対位置を示す6ビットの位置データ領域と、前記一致データ列のデータ長を示す2ビットのデータ長領域とを有し、前記データ圧縮手段は、前記パターン検索手段を用いて、前記スライド辞書バッファ内のデータから前記パターン検索バッファの検索データ列と一致するデータ列を全て検索して、前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から2バイトのデータ列と一致するデータ列がない場合には、前記検索データ列のうちの先頭のバイトのデータに基いて、前記第1のデータ形式でデータを生成し、前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から2バイトのデータ列と一致するデータ列がある場合には、前記一致データ列のうち最長のデータ列について、現在の検索位置からの相対位置が4の倍数となる位置にあるものが存在するか否かを判定して、前記判定の結果、存在するときは、前記最長の一致データ列に基いて、前記第3のデータ形式でデータを生成し、前記判定の結果、存在しないときには、前記最長の一致データ列に基いて、前記第2のデータ形式でデータを生成して、順次、前記機器制御用ファームウェア内のデータの圧縮処理を行うこととした。
【0011】
請求項2の発明は、機器制御用プログラムをデータ圧縮するために、コンピュータを、前記機器制御用プログラムを保持するデータ保持手段、前記機器制御用ファームウェアのデータ列のうち、現在データ圧縮処理の対象になっているデータ列(検索データ列)の一部を順次保持するパターン検索バッファ、前記機器制御用ファームウェアのデータ列のうち、既にデータ圧縮処理の対象になったデータ列の一部又は全部であるスライド辞書用のデータを保持するスライド辞書バッファ、前記パターン検索バッファの検索データ列と一致する一致データ列を前記スライド辞書バッファ内のデータから検索するパターン検索手段、及び前記パターン検索手段による検索結果を用いて、スライド辞書方式により前記制御機器用プログラムをデータ圧縮するデータ圧縮手段として機能させるためのデータ圧縮プログラムにおいて、前記データ圧縮手段は、前記機器制御用プログラムのデータを、非圧縮でデータを保持する非圧縮データ形式と、符号化してデータを保持する複数の圧縮データ形式とに変換し、前記非圧縮データ形式及び前記複数の圧縮データ形式は、いずれもデータ形式識別用の識別データ領域を有し、前記複数の圧縮データ形式は、それぞれ前記一致データ列の相対位置を示す位置データ領域と、前記一致データ列のデータ長を示すデータ長領域とを有し、前記データ圧縮手段は、前記パターン検索手段を用いて、前記スライド辞書バッファ内のデータから前記パターン検索バッファの検索データ列と一致するデータ列を全て検索して、前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から2バイトのデータ列と一致するデータ列がない場合には、前記検索データ列のうちの先頭のバイトのデータに基いて、前記非圧縮データ形式でデータを生成し、前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から2バイトのデータ列と一致するデータ列がある場合には、前記一致データ列のうち最長のデータ列について、現在の検索位置からの相対位置に応じて、所定の圧縮データ形式を選択して、この圧縮データ形式で、前記最長の一致データ列に基いてデータを生成して、順次、前記機器制御用プログラム内のデータの圧縮処理を行うこととした。
【発明の効果】
【0012】
請求項1の発明によれば、高速処理が可能なスライド辞書方式のデータ圧縮処理において、4バイト命令モードを有するCPUが実行するプログラム中に4バイト間隔で出現する割合が高いデータ列について、データサイズが小さい圧縮データ形式(第3のデータ形式)を用いて高いデータ圧縮率で符号化し、その他のデータ列でデータ圧縮可能なものについては、従来のスライド辞書方式と同様な圧縮データ形式(第2のデータ形式)でデータ圧縮するようにした。これにより従来のスライド辞書方式のデータ圧縮処理よりも高いデータ圧縮率を実現することができる。また、圧縮コードの構成を3種類のデータ形式からなる単純なものとしたので、単純なデータ展開処理により、高速なデータ展開処理が可能となる。
【0013】
請求項2の発明によれば、CPUの命令単位や処理単位等の特徴により、プログラム中に所定間隔で出現する割合が高いデータ列に対して、現在の検索位置からの相対位置に応じた複数の圧縮データ形式を設定し、これらの圧縮データ形式を用いてプログラムをデータ圧縮することにより、圧縮コードの構成が単純な構成となり、従来のスライド辞書方式のデータ圧縮処理と同等以上のデータ圧縮率を実現すると共に、単純なデータ展開処理により、高速なデータ展開処理が可能となる。
【発明を実施するための最良の形態】
【0014】
以下、本発明の一実施の形態に係る機器制御用ファームウェアのデータ圧縮を行うデータ圧縮プログラムについて、図1乃至図7を参照して説明する。まず、データ圧縮プログラムを動作させる装置、及びデータ圧縮された圧縮済ファームウェア5を搭載する電子機器の構成について図1を用いて説明する。図1(a)は、データ圧縮プログラム3を動作させるコンピュータ1の構成である。図1(b)は、コンピュータ1において生成された圧縮済ファームウェア5を搭載する電子機器8の制御部の構成である。
【0015】
コンピュータ1は、演算処理を行うCPU2と、HDD(ハードディスク)6とを備えている。このHDD6には、CPU2が実行するデータ圧縮プログラム3、データ圧縮の対象となる機器制御用ファームウェアとしてのファームウェア4、及び作成される圧縮済ファームウェア5が格納される。また、コンピュータ1は、処理中のデータを一時的に保存し、実行時にデータ圧縮プログラムがロードされるRAM7(データ保持手段)を備える。
【0016】
データ圧縮プログラム3により生成された圧縮済ファームウェア5は、電子機器8の制御部において、電子機器8のROM9にIPL10と共に格納され、起動時に電子機器8に搭載されたARM CPU11によって、RAM12上にデータ展開されて、実行処理されるようになっている。なお、ARM CPU11は、ARM Mode命令とThumb Mode命令の2種類の命令モードを有しており、ARM Mode命令は、4バイト命令であり、この命令モードによるプログラムは、プログラムデータ中に4バイト毎に同一のデータ列が現れることが多くなるという特徴がある。
【0017】
データ圧縮プログラム3は、実行時にHDD6からRAM7上にロードされる。データ圧縮プログラム3により使用されるRAM7上のメモリ空間には、データ圧縮処理の対象となるファームウェア4を格納するためのファームウェア格納領域7a、パターン検索バッファ7b、スライド辞書バッファ7c、圧縮済ファームウェア格納領域7dが配され、ファームウェア4は、HDD6からファームウェア格納領域7aにロードされる。
【0018】
なお、データ圧縮プログラム3は、データ圧縮手法として、スライド辞書方式を採用している。このデータ圧縮プログラム3とCPU2とは、請求項におけるデータ圧縮手段及びパターン検索手段に相当する。
【0019】
次に、本実施形態におけるスライド辞書方式によるデータ圧縮について図2を参照して説明する。図2は、データ圧縮対象となるファームウェア4と、スライド辞書方式に用いるデータの関係及び構成を示す。スライド辞書方式によるデータ圧縮は、ファームウェア4の一部をスライド辞書領域4aとし、スライド辞書領域の後ろに続く一部の領域をデータ圧縮処理対象領域4bとして、データ圧縮処理対象領域4bの検索データ列13と同一のデータ列をスライド辞書領域4aから検索し、一致データ列14が見つかった場合は、一致データ列14の相対位置(データ圧縮処理対象領域4bの先頭から一致データ列14の先頭までのバイト数)と、一致データ列14のデータ長を所定のデータ形式に変換し、検索データ列13の単位圧縮データとするもので、スライド辞書領域4a及びデータ圧縮処理対象領域4bを、順次後方に移動させて、ファームウェア4全体についてデータ圧縮処理を行い、圧縮済ファームウェア5を生成する。
【0020】
本実施形態では、スライド辞書領域4aをスライド辞書バッファ7cに、データ圧縮処理対象領域4bをパターン検索バッファ7bに、それぞれセットして処理を行う。なお、スライド辞書領域4aは、領域サイズが2バイト〜1024バイトで、FIFO(First−In First−Out)方式としており、処理開始時には、領域サイズが2バイトで、処理の進行に伴い、最終的には1024バイトとなり、それ以後は、最初のデータが順次押し出されるようになっている。
【0021】
次に、第1〜第3のデータ形式15a、15b、15cについて、図3を参照して説明する。図3(a)、(b)、(c)は各々、データ圧縮処理において検索データ列13が変換される3種類のデータ形式の構造をあらわす。データ圧縮処理においては、検索データ列13を第1〜第3のデータ形式への変換し、単位圧縮データを生成する処理をデータ処理単位としており、単位圧縮データ毎の処理を繰返して、ファームウェア4全体のデータ圧縮を行っている。
【0022】
各々のデータ形式15a〜15cは、それぞれのデータ形式を識別するための識別データ領域IDを有している。第1のデータ形式としての非圧縮データ形式15aは、全体で9ビットのデータ領域を有し、データ領域の先頭から順に、1ビットの識別データ領域IDと、ファームウェア4を非圧縮で格納する8ビットのコピーデータ領域CPとを有する。
【0023】
非圧縮データ形式15aの識別データ領域IDは常に「0」がセットされており、この後のコピーデータ領域CPにファームウェア4内の1バイト(8ビット)のデータがそのまま格納されるようになっている。
【0024】
第2のデータ形式としての第1圧縮データ形式15bは、全体で14ビットのデータ領域を有し、データ領域の先頭から順に、2ビットの識別データ領域IDと、最長の一致データ列14の相対位置を示す10ビットの位置データ領域POSと、そのデータ長を示す2ビットのデータ長領域LNとを有する。第1圧縮データ形式15bの識別データ領域IDは、常に「10」がセットされる。位置データ領域POSには、最長の一致データ列14の相対位置、すなわち検索データ列13の先頭から、最長の一致データ先頭位置までのバイト数が相対位置データとして格納される。なお、位置データ領域POSを10ビットとしているので、最小値を1バイト(「0000000000」)として、最大1024バイト(「1111111111」)までの相対位置を格納することができる。データ長領域LNは、2ビットであるので、最長の一致データ列14のデータ長を2バイト(「00」)〜5バイト(「11」)の範囲で保持できるようになっている。従って、第1圧縮データ形式15bでは、最長の一致データ列14のデータ長に応じて、14/16〜14/40の範囲のデータ圧縮率を得ることができる。
【0025】
第3のデータ形式としての第2圧縮データ形式15cは、全体で10ビットのデータ領域を有し、データ領域の先頭から順に、2ビットの識別データ領域IDと、最長の一致データ列14の相対位置を示す6ビットの位置データ領域POSと、そのデータ長を示す2ビット長のデータ長領域LNとを有する。第2圧縮データ形式15cの識別データ領域IDは、常に「11」がセットされる。位置データ領域POSには、最長の一致データ列14の相対位置、すなわち検索データ列13の先頭から、最長の一致データ列14の先頭位置までのバイト数が相対位置データとして格納される。なお、第2圧縮データ形式15cは、検索データ列13の先頭からの最長の一致データ列14の相対位置が4、8、12、…、256バイトのように4の倍数となっている場合にのみ用いられる。従って、位置データ領域POS内の6ビットの位置データは、最小値を4バイト(「000000」)として、4バイト刻みに最大値256バイト(「111111」)までの相対位置データを格納することができる。データ長領域LNは、2ビットであるので、最長の一致データ列14のデータ長を2バイト(「00」)〜5バイト(「11」)の範囲で保持できるようになっている。従って、このデータ形式では、最長の一致データ列14のデータ長に応じて、10/16〜10/40の範囲の圧縮率を得ることができる。
【0026】
次に、データ圧縮プログラム3の処理の全体の流れについて、図4を参照して説明する。以下の処理は、データ圧縮プログラム3に基いてCPU2が実行する。
【0027】
まず、S1における初期化処理として、CPU2は、スライド辞書バッファ7c及びパターン検索バッファ7b等の初期化を行う。データ圧縮処理は2バイト以上の最長の一致データ列14を対象として行うので、最初のスライド辞書領域4aは、ファームウェア4の先頭から2バイトの領域となる。そしてこのスライド辞書領域4aの直後に続く5バイトの領域が最初のデータ圧縮処理対象領域4bとなり、それぞれの領域のデータが、スライド辞書バッファ7c及びパターン検索バッファ7bにセットされる。
【0028】
次に、CPU2は、S2に示される一致データ列(一致バイト列)検出処理を行う。具体的には、CPU2は、パターン検索バッファ7bの先頭2バイトの検索データ列13と、スライド辞書バッファ7c内のデータ列を順次比較して一致データ列14の検出を行う。一致データ列14が検出された場合、引き続き順次検索データ列13を、パターン検索バッファ7bの先頭から最大5バイトまで1バイトずつ増やし、最長の一致データ列14を全て検索し、抽出する。この処理によって、最長の一致データ列14の相対位置と、データ長が得られる。
【0029】
次に、CPU2は、S3に示されるように、上記の検出処理で得られた結果から、上記の検出処理が完了した検索データ列13を変換するデータ形式を選択し、選択されたデータ形式に変換された単位圧縮データを圧縮済ファームウェア格納領域7dの最後尾に追加する。そして、CPU2は、スライド辞書領域4aの最後尾を処理が完了したデータ圧縮処理対象領域4bの検索データ列末部まで移動させ、スライド辞書バッファ7cの内容をこのスライド辞書領域4aに対応した内容に更新する。
【0030】
次に、CPU2は、S4に示されるパターン検索バッファ更新処理を実行する。具体的には、次の一致データ列検出処理におけるデータ圧縮処理対象領域4bは、パターン検索処理が完了した検索データ列13の直後から5バイトの領域となるので、パターン検索バッファ7bに検索データ列13の直後から5バイトの領域の内容がセットされる。
【0031】
そして、CPU2は、ファームウェア4の最後までデータ圧縮処理が完了すると(S5でYES)、データ圧縮処理を終了し、そうでない場合は(S5でNO)、S2の処理に戻る。
【0032】
以後、S2〜S5の処理を繰返し、圧縮済ファームウェア5が、圧縮済ファームウェア格納領域7dに生成される。
【0033】
次に、上記S2における一致データ列14の検出処理について再度図2を参照して説明する。CPU2は、スライド辞書バッファ7c内にパターン検索バッファ7bの検索データ列13と一致する一致データ列14があるかどうかを検索し、検索結果を所定の形式に従って出力する。一致データ列14の検索においては、パターン検索バッファ7b中の検索データ列13について最長となる一致データ列14を全て検索する。この場合において、検索データ列13は、常にパターン検索バッファ7bの先頭データから始まるデータ列としている。なお、最長の一致データ列14が複数検出された場合、その相対位置が256バイト以下のときには、相対位置が4の倍数となるものが優先的に選択される。
【0034】
次に、上記S3に示されるデータ圧縮処理とスライド辞書更新処理の流れについて、図5を参照して説明する。図5は、データ圧縮処理を行って単位圧縮データを生成し、スライド辞書更新する工程を示す。
【0035】
まず、CPU2は、上記一致データ列検出処理の結果、一致データ列14のデータ長が、2バイト以上であるかどうかにより、データを圧縮処理するかどうかの判定を行う。CPU2は、上記一致データ列検出処理の結果、一致データ列14のデータ長が2バイト未満の場合は(S11でNO)、検索データ列13の先頭バイトのデータを非圧縮データ形式15aに変換し(S13)、データ長が2バイト以上の場合は(S11でYES)、第1圧縮データ形式15b又は第2圧縮データ形式15cへ変換する(S12)。
【0036】
第1圧縮データ形式15b又は第2圧縮データ形式15cに変換する場合、上記一致データ列検出処理で検出された最長の一致データ列14の相対位置によって、いずれかの圧縮データ形式が選択される。すなわち、CPU2は、最長の一致データ列14の相対位置が、4の倍数であり、かつ256バイト以下である場合は(S12でYES)、第2圧縮データ形式15cの圧縮データ形式を選択し(S15)、これ以外の場合は(S12でNO)、第1圧縮データ形式15bの圧縮データ形式を選択する(S14)。
【0037】
非圧縮データ形式15aが選択された場合、CPU2は、パターン検索バッファ7bの先頭の1バイトを、非圧縮データ形式15aのコピーデータ領域CPにセットし、生成した単位圧縮データを圧縮済ファームウェア格納領域7dの最後尾に追加する。
【0038】
第1圧縮データ形式15bが選択された場合、CPU2は、最長の一致データ列14の相対位置及びデータ長を、それぞれ位置データ領域POS及びデータ長領域LNにセットし、生成した単位圧縮データを圧縮済ファームウェア格納領域7dの最後尾に追加する。
【0039】
第2圧縮データ形式15cが選択された場合、CPU2は、最長の一致データ列14の相対位置及びデータ長を、それぞれ位置データ領域POS及びデータ長領域LNにセットし、生成した単位圧縮データを圧縮済ファームウェア格納領域7dの最後尾に追加する。
【0040】
最後に、CPU2は、スライド辞書領域4aを後方にスライドさせて、スライド辞書領域4aの最後尾を処理が完了したデータ圧縮処理対象領域4bの検索データ列13の末部に移し、スライド辞書バッファ7cの内容をこれに合わせて更新する(S16)。
【0041】
次に、上記のデータ圧縮プログラム3により生成され、図1(b)に示す電子機器のROM9上に搭載された圧縮済ファームウェア5のRAM12へのデータ展開処理の流れについて、図6、図7を参照して説明する。図6は、圧縮済ファームウェア5のデータ展開の処理の流れを示す。図7(a)〜(c)は、圧縮済ファームウェア5の単位圧縮データのデータ展開処理について、展開データの対応付けをデータ形式毎に示す。
【0042】
圧縮済ファームウェア5のデータ展開処理は、圧縮済ファームウェア5の先頭から最後まで、順に単位圧縮データ毎に処理される。なお、以下の処理は、IPL10内のデータ展開処理プログラムに基き、ARM CPU11が実行する。
【0043】
まず、ARM CPU11は、初期化処理として、現在の処理位置を示すリードポインタの初期値のセット、データ展開後のファームウェア4のサイズ等を取得する(S21)。
【0044】
次に、ARM CPU11は、リードポインタが指し示す単位圧縮データの第1ビットが「0」であるか否かを判定し、第1ビットが「0」である場合(S22でYES)、単位圧縮データが非圧縮データ形式15aであると判定して、非圧縮データ展開処理(S24)に移り、第1ビットが「0」でない場合は(S22でNO)、次の判定処理を行う(S23)。
【0045】
更にARM CPU11は、この単位圧縮データについて、第2ビットが「0」であるか否かを判定し、第2ビットが「0」である場合(S23でYES)、単位圧縮データが、第1圧縮データ形式15bであると判定し、第1圧縮データ展開処理(S25)に移り、第2ビットが「0」でない場合(S23でNO)、単位圧縮データが、第2圧縮データ形式15cであると判定し、第2圧縮データ展開処理(S26)に移る。
【0046】
上記S24の処理において、ARM CPU11は、非圧縮データ形式15aのデータについては、図7(a)に示すように、単位圧縮データ中のコピーデータ領域CPから非圧縮データのみを抽出し、このデータ列D0をRAM12上のファームウェア格納領域12aの最後尾に追加する。
【0047】
上記S25の処理において、ARM CPU11は、第1圧縮データ形式15bのデータについては、以下のように展開処理を行う。すなわち、図7(b)に示すように、ファームウェア格納領域12aにおいて、現在処理中の単位圧縮データ(図中の15bのデータ)中の位置データ領域POS及びデータ長領域LNに格納された相対位置、データ長に基き、データ展開済のデータの最後尾を起点として、(相対位置+1)バイト分手前の位置を先頭とし、(データ長+2)バイト分のデータ列D1を抽出して、抽出されたデータ列D1をファームウェア格納領域12aの最後尾に追加する。
【0048】
上記S26の処理において、ARM CPU11は、第2圧縮データ形式15cのデータについては、以下のように展開処理を行う。すなわち、図7(c)に示すように、ファームウェア格納領域12aにおいて、現在処理中の単位圧縮データ(図中の15cのデータ)中の位置データ領域POS及びデータ長領域LNに格納された相対位置、データ長に基き、データ展開済のデータの最後尾を起点として、[4×(相対位置+1)]バイト分手前の位置を先頭とし、(データ長+2)バイト分のデータ列D2を抽出して、抽出されたデータ列D2をファームウェア格納領域12aの最後尾に追加する。
【0049】
現在処理中の単位圧縮データのデータ展開処理が完了すると、圧縮済ファームウェア5の最後までデータ展開処理が完了したかを判定し(S27)、最後まで完了していない場合は(S27でNO)、リードポインタを次の単位圧縮データに更新し、S22に戻る。
【0050】
そして、ARM CPU11は、圧縮済ファームウェア5の最後に至るまで順次単位圧縮データのデータ展開処理を行い、圧縮済ファームウェア5の最後まで到達した時点で(S27でYES)、データ展開処理を終了する。このようにして、ARM CPU11は、ROM9上にデータ圧縮されて格納されていた圧縮済ファームウェア5を、RAM12上にデータ展開する。データ展開されたファームウェア4がARM CPU11によって実行されることにより、電子機器8の初期化等が行われ、使用可能状態となる。
【0051】
以上のようにして、本発明に係るデータ圧縮プログラム3によって、ファームウェア4をデータ圧縮することにより、次のような効果を得ることができる。すなわち、電子機器8の制御部に搭載されたARM CPU11の有する命令モード(4バイトのARM Mode命令)の特徴により、ARM CPU11が実行するプログラムコード中には、4バイト単位に同じデータが出現する割合が高いので、相対位置を4ビット単位とする位置データ領域を持つ第2圧縮データ形式15cを用いることにより、位置データ領域のデータ量(ビット数)を少なく抑えることができると共に、データ圧縮率を高めることができる。また、ARM CPU11が実行する命令コードでは、Conditionビットやオペコード固有のビット列は、上位側のビットに集中しているため、4バイト単位のデータの出現頻度は更に高まり、データ圧縮率を更に高めることができる。そして、出現頻度の低い命令その他のコードについては、従来のスライド辞書方式と同様な第1圧縮データ形式15bを用いてデータ圧縮することとしているので、全体として従来のスライド辞書方式のデータ圧縮処理よりも高いデータ圧縮率(約63%)を実現することができる。
【0052】
しかも、データ圧縮に用いるデータ形式はこれら2個の圧縮データ形式15b、15cに加えて、非圧縮データ形式15aの3データ形式として、データ形式数を限定し、生成される圧縮コードは単純な構造となるように構成されているので、データ展開処理を行うに際しても簡単なアルゴリズムの処理ルーチンにより展開処理することができるので、高速なデータ展開処理を行うことができる。
【0053】
また、ARM CPU11の4バイト命令モードによらず、複数種類の命令モードや処理単位を有するCPUの処理特徴によって、プログラムコード中に所定間隔で出現する割合が高いデータ列に対して、現在の検索位置からの相対位置に応じた複数の圧縮データ形式を設定し、これらの圧縮データ形式を用いてプログラムをデータ圧縮することにより、圧縮コードの構成が単純な構成となり、従来と同等以上のデータ圧縮率を実現すると共に、簡単なアルゴリズムの処理ルーチンにより展開処理することができるので、高速なデータ展開処理を行うことができる。
【0054】
なお、本発明は、上記各実施形態の構成に限られず、発明の趣旨を変更しない範囲で種々の変形が可能である。
【図面の簡単な説明】
【0055】
【図1】(a)は、本発明の実施形態に係るデータ圧縮プログラムを動作させるコンピュータの構成図、(b)は、同コンピュータにおいて生成された圧縮済ファームウェアを搭載する電子機器の制御部の構成図。
【図2】データ圧縮対象であるファームウェアと、スライド辞書方式に用いるデータの関係及び構成を示す図。
【図3】(a)は、データ圧縮処理で使用する非圧縮データ形式のデータ構造を示す図、(b)は、同第1圧縮データ形式のデータ構造を示す図、(c)は、同第2圧縮データ形式のデータ構造を示す図。
【図4】データ圧縮プログラムによるデータ圧縮処理の流れを示すフローチャート。
【図5】データ圧縮処理、及びスライド辞書更新処理のフローチャート。
【図6】圧縮済ファームウェアのデータ展開処理のフローチャート。
【図7】(a)は、非圧縮データ形式のデータ展開における展開データとの対応付けを示す図、(b)は、第1圧縮データ形式の同対応付けを示す図、(c)は、第2圧縮データ形式の同対応付けを示す図。
【図8】(a)は、従来の電子機器の制御部の構成図、(b)は、従来の組込み機器のファームウェアの格納状態を示す図。
【符号の説明】
【0056】
1 コンピュータ
2 CPU
3 データ圧縮プログラム
4 ファームウェア(機器制御用ファームウェア)
4a スライド辞書領域
4b データ圧縮処理対象領域
5 圧縮済ファームウェア
7a ファームウェア格納領域
7b パターン検索バッファ
7c スライド辞書バッファ
8 電子機器
13 検索データ列
14 一致データ列
15a 非圧縮データ形式(第1のデータ形式)
15b 第1圧縮データ形式(第2のデータ形式)
15c 第2圧縮データ形式(第3のデータ形式)
ID 識別データ領域
CP コピーデータ領域
POS 位置データ領域
LN データ長領域

【特許請求の範囲】
【請求項1】
4バイト命令モードを有するCPUが実行する機器制御用ファームウェアをデータ圧縮するために、コンピュータを、
前記機器制御用ファームウェアを保持するデータ保持手段、
前記機器制御用ファームウェアのデータ列のうち、現在データ圧縮処理の対象になっているデータ列(検索データ列)を順次保持するパターン検索バッファ、
前記機器制御用ファームウェアのデータ列のうち、既にデータ圧縮処理の対象になったデータ列の一部又は全部であるスライド辞書用のデータを保持するスライド辞書バッファ、
前記パターン検索バッファの検索データ列と一致する一致データ列を前記スライド辞書バッファ内のデータから検索するパターン検索手段、及び
前記パターン検索手段による検索結果を用いて、スライド辞書方式により前記制御機器用ファームウェアをデータ圧縮するデータ圧縮手段として機能させるためのデータ圧縮プログラムにおいて、
前記データ圧縮手段は、前記機器制御用ファームウェアのデータを、第1のデータ形式、第2のデータ形式、及び第3のデータ形式に変換し、
前記第1乃至第3の各データ形式は、データ形式識別用の識別データ領域を有し、
前記第1のデータ形式は、1ビットの識別データ領域に加えて、データを非圧縮で保持する8ビットのデータ領域を有し、
前記第2のデータ形式は、2ビットの識別データ領域に加えて、前記一致データ列の相対位置を示す10ビットの位置データ領域と、前記一致データ列のデータ長を示す2ビットのデータ長領域とを有し、
前記第3のデータ形式は、2ビットの識別データ領域に加えて、前記一致データ列の相対位置を示す6ビットの位置データ領域と、前記一致データ列のデータ長を示す2ビットのデータ長領域とを有し、
前記データ圧縮手段は、
前記パターン検索手段を用いて、前記スライド辞書バッファ内のデータから前記パターン検索バッファの検索データ列と一致するデータ列を全て検索して、
前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から2バイトのデータ列と一致するデータ列がない場合には、前記検索データ列のうちの先頭のバイトのデータに基いて、前記第1のデータ形式でデータを生成し、
前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から2バイトのデータ列と一致するデータ列がある場合には、前記一致データ列のうち最長のデータ列について、現在の検索位置からの相対位置が4の倍数となる位置にあるものが存在するか否かを判定して、
前記判定の結果、存在するときは、前記最長の一致データ列に基いて、前記第3のデータ形式でデータを生成し、
前記判定の結果、存在しないときには、前記最長の一致データ列に基いて、前記第2のデータ形式でデータを生成して、
順次、前記機器制御用ファームウェア内のデータの圧縮処理を行うことを特徴とするデータ圧縮プログラム。
【請求項2】
機器制御用プログラムをデータ圧縮するために、コンピュータを、
前記機器制御用プログラムを保持するデータ保持手段、
前記機器制御用ファームウェアのデータ列のうち、現在データ圧縮処理の対象になっているデータ列(検索データ列)の一部を順次保持するパターン検索バッファ、
前記機器制御用ファームウェアのデータ列のうち、既にデータ圧縮処理の対象になったデータ列の一部又は全部であるスライド辞書用のデータを保持するスライド辞書バッファ、
前記パターン検索バッファの検索データ列と一致する一致データ列を前記スライド辞書バッファ内のデータから検索するパターン検索手段、及び
前記パターン検索手段による検索結果を用いて、スライド辞書方式により前記制御機器用プログラムをデータ圧縮するデータ圧縮手段として機能させるためのデータ圧縮プログラムにおいて、
前記データ圧縮手段は、前記機器制御用プログラムのデータを、非圧縮でデータを保持する非圧縮データ形式と、符号化してデータを保持する複数の圧縮データ形式とに変換し、
前記非圧縮データ形式及び前記複数の圧縮データ形式は、いずれもデータ形式識別用の識別データ領域を有し、
前記複数の圧縮データ形式は、それぞれ前記一致データ列の相対位置を示す位置データ領域と、前記一致データ列のデータ長を示すデータ長領域とを有し、
前記データ圧縮手段は、
前記パターン検索手段を用いて、前記スライド辞書バッファ内のデータから前記パターン検索バッファの検索データ列と一致するデータ列を全て検索して、
前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から2バイトのデータ列と一致するデータ列がない場合には、前記検索データ列のうちの先頭のバイトのデータに基いて、前記非圧縮データ形式でデータを生成し、
前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から2バイトのデータ列と一致するデータ列がある場合には、前記一致データ列のうち最長のデータ列について、現在の検索位置からの相対位置に応じて、所定の圧縮データ形式を選択して、この圧縮データ形式で、前記最長の一致データ列に基いてデータを生成して、
順次、前記機器制御用プログラム内のデータの圧縮処理を行うことを特徴とするデータ圧縮プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2007−293461(P2007−293461A)
【公開日】平成19年11月8日(2007.11.8)
【国際特許分類】
【出願番号】特願2006−118544(P2006−118544)
【出願日】平成18年4月21日(2006.4.21)
【出願人】(000201113)船井電機株式会社 (7,855)
【Fターム(参考)】