JP2007156899A - 電子装置及びその制御方法 - Google Patents

電子装置及びその制御方法 Download PDF

Info

Publication number
JP2007156899A
JP2007156899A JP2005352329A JP2005352329A JP2007156899A JP 2007156899 A JP2007156899 A JP 2007156899A JP 2005352329 A JP2005352329 A JP 2005352329A JP 2005352329 A JP2005352329 A JP 2005352329A JP 2007156899 A JP2007156899 A JP 2007156899A
Authority
JP
Japan
Prior art keywords
program
volatile memory
program module
control
function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2005352329A
Other languages
English (en)
Other versions
JP4845497B2 (ja
JP2007156899A5 (ja
Inventor
Takeshi Ogawa
武志 小川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2005352329A priority Critical patent/JP4845497B2/ja
Publication of JP2007156899A publication Critical patent/JP2007156899A/ja
Publication of JP2007156899A5 publication Critical patent/JP2007156899A5/ja
Application granted granted Critical
Publication of JP4845497B2 publication Critical patent/JP4845497B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Studio Devices (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】電子装置の起動時間が長くなること及びレスポンスの低下を抑制しつつ、プログラムを圧縮して、必要なROMの容量増大を抑制すること。
【解決手段】デジタルカメラのROM302は、制御プログラムとして、リロケータブルオブジェクトの単位で圧縮された圧縮済みモジュール801,802,804を保持する。ROM302はまた、初期化プログラム901、SWI伸長ハンドラ902、エントリアドレステーブル702を保持する。デジタルカメラに電源が投入されると、CPUはSWI伸長ハンドラ902をRAM303に転送し、また、エントリアドレステーブル702を参照して複数のSWI命令をRAM303に配置する。CPUが制御プログラムを実行する際に、実行対象であるプログラムがRAM303に転送されていなければ、SWI伸長ハンドラ902が呼ばれ、実行対象であるプログラムがRAM303に転送される。
【選択図】図13

Description

本発明は、半導体メモリに格納される電子装置の制御プログラムを圧縮・伸長する技術に関する。
デジタルカメラなどの電子装置は、CPU及び半導体メモリ(ROMやRAM)を備え、ROMが保持する制御プログラムをCPUが実行することにより電子装置を制御することが一般的である。このような電子装置では、例えばCPUとしての32ビットRISCプロセッサや大容量のRAMを小型の電池によって駆動しなければならない。したがって、電子装置を使用しない時は電源をOFFにしておくことが望ましい。一方、例えばデジタルカメラにおいては、シャッターチャンスを逃さないために、電源を投入してから撮像可能となるまでの時間である、起動時間を短くしなければならない。
なお、RISCは、”Reduced Instruction Set Computer”の略であり、ROMは、”Read Only Memory”の略であり、RAMは、”Random Access Memory”の略である。
近年の電子装置は、ユーザインタフェースとしてウインドウシステムを使ったGUI(グラフィカルユーザインタフェース)を採用する場合が多い。また、電子装置の制御プログラムは、TCP/IPなどに代表されるネットワークアーキテクチャの通信プログラムを含むなど、高機能化が進んでいる。そのため、ROMに格納される制御プログラムのサイズが増大しつつある。
制御プログラムの大規模化に伴い、電子装置が備えるROMも大容量化しなければならない。しかしながら、ROMはRAMに比べて記憶容量あたりのコストが高い傾向にある。また、ROMの設計上の制約により、ROMを大容量化する場合、容量が4Mバイトの次は8Mバイトといったように、容量を倍にする必要がある。したがって、ROMの大容量化に伴うコストの増大は深刻な問題である。
そこで、制御プログラムを圧縮(以下、特に断らなければ、圧縮とは可逆圧縮を意味する)してROMに格納する技術が提案されている(特許文献1参照)。特許文献1に記載の技術によれば、あらかじめ圧縮された制御プログラムと、圧縮された制御プログラムを伸長する伸長プログラムをROMに格納する。制御プログラムを実行する際は、伸長プログラムが圧縮された制御プログラムをRAM上に伸長してから実行する。
また、特許文献1は、制御プログラムをいくつかのパーツに分割して圧縮してROMに格納し、実行するパーツだけをRAMに展開するという技術も開示している。この技術によれば、伸長プログラムを制御する管理プログラムは、制御プログラムのパーツを実行する順番を知っている。制御プログラムのあるパーツの実行が終了すると、伸長プログラムは、終了したパーツが占有していたRAMの領域に、これから実行するパーツを伸長して上書きし、次いで、RAMに伸長されたパーツが実行される。このように、RAMに伸長されたパーツが終了するたびに、管理プログラムは、再び別のパーツを伸長するということを繰り返す。
これにより、ROMに格納される制御プログラムのサイズが小さくなり、ROMの容量増大を抑制することができる。
以下に、特許文献1に記載の、制御プログラムをいくつかのパーツに分割して圧縮してROMに格納し、実行するパーツだけをRAMに展開するという技術(以下、単に「従来技術」と呼ぶ)を詳細に説明する。
図1は、従来技術におけるROM101とRAM102に格納されるデータの例を示す図である。ROM101は、管理プログラム103、伸長プログラム104、圧縮されたプログラム105〜108を保持する。RAM102は、伸長されたプログラムが格納される領域109、管理プログラム103、伸長プログラム104、領域109に伸長されたプログラムなどがワークエリアとして使用する領域110を備える。
図2は、従来技術において制御プログラムが実行される手順を示すフローチャートである。
ステップS201で電子装置に電源が投入されると、ステップS202で、電子装置のCPUは管理プログラム103を実行する。管理プログラム103は、伸長プログラム104を起動する。
ステップS203で、CPUは伸長プログラム104を実行し、圧縮されたプログラム105を伸長して領域109に展開する。
ステップS204で、CPUは再び管理プログラム103を実行し、管理プログラム103はステップS203で伸長された制御プログラムを起動する。
ステップS205で、CPUはステップS203で伸長された制御プログラムを実行する。
ステップS206〜S209では、ステップS202〜S205と同様に、CPUは圧縮されたプログラム106を伸長して実行する。
圧縮されたプログラム106の処理が終了すると、ステップS210で、CPUは再び管理プログラム103を実行する。図示を省略するが、ステップS210とS211の間で、CPUは必要に応じて圧縮されたプログラム105〜108のいずれかを伸長して実行する。
CPUがこのような処理を繰り返し実行することにより、圧縮されたプログラム105〜108が適宜実行され、必要な処理が終了すると、ステップS211で、CPUは電子装置をシャットダウンする。
なお、ステップS202〜S209において、CPUは圧縮されたプログラム105、106を順に伸長して実行したが、この順に限定されるものではない。
特開平5−217005号公報
特許文献1に記載の技術は、制御プログラムを高速に実行する必要の無い電子装置においては有効であった。しかしながら、デジタルカメラなどの電子装置は、前述のように、電源を投入してから使用可能になるまでの起動時間を短くする必要がある。
デジタルカメラなどの電子装置に、特許文献1に記載の、制御プログラムを圧縮してROMに格納する技術を適用すると、電源投入時に制御プログラムの伸長に長い時間を要し、起動時間が長くなる。
また、制御プログラムをいくつかのパーツに分割して圧縮した場合、起動時間は短縮されるが、デジタルカメラのレスポンスが低下するという問題がある。なぜなら、デジタルカメラの制御プログラムにはGUIや撮像に関するパーツが多数含まれ、これらのパーツは通常、頻繁に実行されるからである。したがって、単に制御プログラムを分割して圧縮するだけでは、例えば撮像を行うたびに撮像に関するパーツを伸長することとなり、レスポンスの低下を招く。
本発明はこのような状況に鑑みてなされたものであり、電子装置の起動時間が長くなること及びレスポンスの低下を抑制しつつ、プログラムを圧縮して、必要なROMの容量増大を抑制することを目的とする。
上記課題を解決するために、本発明の電子装置は、プロセッサ、前記プロセッサが実行する制御プログラムを格納するための不揮発性メモリ、及び、前記プロセッサが前記制御プログラムを実行する際に使用する揮発性メモリとを備える電子装置であって、前記不揮発性メモリには、<a>前記プロセッサが実行可能な制御プログラムを構成するプログラムモジュール群;ここで、各プログラムモジュールは少なくとも1つの関数プログラムを含み、前記プログラムモジュールのうち少なくとも1つは可逆圧縮されている;と、<b>各プログラムモジュールごとに、前記揮発性メモリ上の展開開始アドレス情報、各関数プログラムのうち他のプログラムモジュールから参照される関数プログラムの実行開始アドレス情報、及び、非圧縮状態か圧縮状態かを示す格納状態情報と、が記憶されており、前記電子装置の電源投入時に、前記不揮発性メモリを参照することで、<i>各プログラムモジュールに含まれる各関数プログラムの実行開始アドレス情報に基づき、前記揮発性メモリ上の各関数プログラムの実行開始アドレス位置に、該関数プログラムを含むプログラムモジュールを前記揮発性メモリへ展開させる制御命令コードを書き込む制御コード書き込み手段と、<ii>前記制御プログラムを開始させるため、前記揮発性メモリの実行開始位置から処理を開始させる実行開始手段と、<iii>前記実行開始手段で処理が開始された後、前記制御命令コードを実行した際に、前記不揮発性メモリ内の該当する注目プログラムモジュールを特定することで、前記注目プログラムモジュールの展開開始アドレス情報と格納状態情報とを取得し、取得した格納状態情報が非圧縮状態であることを示す場合には、前記注目プログラムモジュールを前記揮発性メモリの展開開始アドレス位置に展開し、取得した格納状態情報が圧縮状態であることを示す場合には、前記注目プログラムモジュールを伸長してから、前記揮発性メモリの展開開始アドレス位置に展開し、前記注目プログラムモジュールの揮発性メモリへの展開が完了した後、前記制御命令コードを実行したアドレス位置から処理を再開させる制御手段と、を備えることを特徴とする。
また、本発明の他の電子装置は、プロセッサ、前記プロセッサが実行する制御プログラムを格納するための不揮発性メモリ、及び、前記プロセッサが前記制御プログラムを実行する際に使用する揮発性メモリとを備える電子装置であって、前記不揮発性メモリには、<a>前記プロセッサが実行可能な制御プログラムを構成するプログラムモジュール群;ここで、各プログラムモジュールは少なくとも1つの関数プログラムを含み、前記プログラムモジュールはすべて可逆圧縮されている;と、<b>各プログラムモジュールごとに、前記揮発性メモリ上の展開開始アドレス情報、及び、各関数プログラムのうち他のプログラムモジュールから参照される関数プログラムの実行開始アドレス情報と、が記憶されており、前記電子装置の電源投入時に、前記不揮発性メモリを参照することで、<i>各プログラムモジュールに含まれる各関数プログラムの実行開始アドレス情報に基づき、前記揮発性メモリ上の各関数プログラムの実行開始アドレス位置に、該関数プログラムを含むプログラムモジュールを前記揮発性メモリへ展開させる制御命令コードを書き込む制御コード書き込み手段と、<ii>前記制御プログラムを開始させるため、前記揮発性メモリの実行開始位置から処理を開始させる実行開始手段と、<iii>前記実行開始手段で処理が開始された後、前記制御命令コードを実行した際に、前記不揮発性メモリ内の該当する注目プログラムモジュールを特定することで、前記注目プログラムモジュールの展開開始アドレス情報を取得し、前記注目プログラムモジュールを伸長してから、前記揮発性メモリの展開開始アドレス位置に展開し、前記注目プログラムモジュールの揮発性メモリへの展開が完了した後、前記制御命令コードを実行したアドレス位置から処理を再開させる制御手段と、を備えることを特徴とする。
また、本発明の制御方法は、プロセッサ、前記プロセッサが実行する制御プログラムを格納するための不揮発性メモリ、及び、前記プロセッサが前記制御プログラムを実行する際に使用する揮発性メモリとを備える電子装置を制御する方法であって、前記不揮発性メモリには、<a>前記プロセッサが実行可能な制御プログラムを構成するプログラムモジュール群;ここで、各プログラムモジュールは少なくとも1つの関数プログラムを含み、前記プログラムモジュールのうち少なくとも1つは可逆圧縮されている;と、<b>各プログラムモジュールごとに、前記揮発性メモリ上の展開開始アドレス情報、各関数プログラムのうち他のプログラムモジュールから参照される関数プログラムの実行開始アドレス情報、及び、非圧縮状態か圧縮状態かを示す格納状態情報と、が記憶されており、前記電子装置の電源投入時に、前記不揮発性メモリを参照することにより実行される、<i>各プログラムモジュールに含まれる各関数プログラムの実行開始アドレス情報に基づき、前記揮発性メモリ上の各関数プログラムの実行開始アドレス位置に、該関数プログラムを含むプログラムモジュールを前記揮発性メモリへ展開させる制御命令コードを書き込む制御コード書き込み工程と、<ii>前記制御プログラムを開始させるため、前記揮発性メモリの実行開始位置から処理を開始させる実行開始工程と、<iii>前記実行開始工程で処理が開始された後、前記制御命令コードを実行した際に、前記不揮発性メモリ内の該当する注目プログラムモジュールを特定することで、前記注目プログラムモジュールの展開開始アドレス情報と格納状態情報とを取得し、取得した格納状態情報が非圧縮状態であることを示す場合には、前記注目プログラムモジュールを前記揮発性メモリの展開開始アドレス位置に展開し、取得した格納状態情報が圧縮状態であることを示す場合には、前記注目プログラムモジュールを伸長してから、前記揮発性メモリの展開開始アドレス位置に展開し、前記注目プログラムモジュールの揮発性メモリへの展開が完了した後、前記制御命令コードを実行したアドレス位置から処理を再開させる制御工程と、を備えることを特徴とする。
また、本発明の他の制御方法は、プロセッサ、前記プロセッサが実行する制御プログラムを格納するための不揮発性メモリ、及び、前記プロセッサが前記制御プログラムを実行する際に使用する揮発性メモリとを備える電子装置を制御する方法であって、前記不揮発性メモリには、<a>前記プロセッサが実行可能な制御プログラムを構成するプログラムモジュール群;ここで、各プログラムモジュールは少なくとも1つの関数プログラムを含み、前記プログラムモジュールはすべて可逆圧縮されている;と、<b>各プログラムモジュールごとに、前記揮発性メモリ上の展開開始アドレス情報、及び、各関数プログラムのうち他のプログラムモジュールから参照される関数プログラムの実行開始アドレス情報と、が記憶されており、前記電子装置の電源投入時に、前記不揮発性メモリを参照することにより実行される、<i>各プログラムモジュールに含まれる各関数プログラムの実行開始アドレス情報に基づき、前記揮発性メモリ上の各関数プログラムの実行開始アドレス位置に、該関数プログラムを含むプログラムモジュールを前記揮発性メモリへ展開させる制御命令コードを書き込む制御コード書き込み工程と、<ii>前記制御プログラムを開始させるため、前記揮発性メモリの実行開始位置から処理を開始させる実行開始工程と、<iii>前記実行開始工程で処理が開始された後、前記制御命令コードを実行した際に、前記不揮発性メモリ内の該当する注目プログラムモジュールを特定することで、前記注目プログラムモジュールの展開開始アドレス情報を取得し、前記注目プログラムモジュールを伸長してから、前記揮発性メモリの展開開始アドレス位置に展開し、前記注目プログラムモジュールの揮発性メモリへの展開が完了した後、前記制御命令コードを実行したアドレス位置から処理を再開させる制御工程と、を備えることを特徴とする。
なお、その他の本発明の特徴は、添付図面及び以下の発明を実施するための最良の形態の記載によっていっそう明らかになるものである。
以上の構成により、本発明によれば、電子装置の起動時間が長くなること及びレスポンスの低下を抑制しつつ、プログラムを圧縮して、必要なROMの容量増大を抑制することが可能となる。
以下、添付図面を参照して、本発明の上位概念、中位概念および下位概念の理解に役立つ実施形態を示す。なお、以下の実施形態に含まれる概念について、そのすべてが特許請求の範囲に記載されているとは限らない。ただし、これは特許発明の技術的範囲から意識的に除外したのではないことを理解していただきたい。
<デジタルカメラ300のハードウェア構成>
図3は、本発明を適用したデジタルカメラ300のハードウェア構成を示すブロック図である。なお、本実施形態ではデジタルカメラ300を例に本発明を説明するが、本発明は例えば携帯電話やPDAなど、CPUが制御プログラムを実行するすべての電子装置に適用することが可能である。
デジタルカメラ300はシステムバス311と、システムバス311に接続される以下の要素を備える。
CPU301は、ROM302が保持する制御プログラムを実行することにより、デジタルカメラ300全体を制御する。厳密には、本実施形態では、後述する初期化プログラムを除き、CPU301はROM302が保持する制御プログラムをRAM303に転送して実行する。
ROM302は、上述の制御プログラムなどを保持する不揮発性メモリである。厳密には、本実施形態では、制御プログラムの大部分が分割されて圧縮されている。
RAM303は、ROM302から転送された制御プログラムを格納する揮発性メモリである。RAM303はまた、制御プログラムのワークエリアや、撮像した画像データを記憶媒体309に記録する前に一時的にバッファリングする領域としても使用される。
撮像部304は、光学レンズ、CCD、A/D変換器などから構成され、光学レンズから入射した光をデジタル電気信号に変換し、RAM303に格納する。
信号処理部305は、撮像部304がRAM303に格納したデジタル電気信号に対し、JPEG符号化やMPEG符号化などの信号処理を施し、画像データを生成する。生成された画像データは、記憶媒体309に記録される。また、画像再生時には、信号処理部305は記憶媒体309に記録される画像データを再生(復号化)する。信号処理部305は、一般に専用のハードウェア回路を用いて実現されるが、CPU301が制御プログラムを実行することにより実現してもよい。
操作部306は、電源ボタンやシャッターボタンなどから構成され、デジタルカメラ300のユーザは操作部306を介してデジタルカメラ300に指示を与えることができる。
表示部307は、画像データの再生時に画像を表示するためのものであり、TFT LCDなどにより構成される。表示部307はまた、撮像部304が捉えた画像を逐次表示する電子ビューファインダとしても使用可能である。
記憶媒体制御部308は、次に説明する記憶媒体309を制御する。
記憶媒体309は、画像データを記録するためのものであり、例えば、デジタルビデオカセット、DVD−R、コンパクトフラッシュ(登録商標)、ハードディスクなどを用いることができる。
通信I/F310は、外部装置と通信するためのインタフェースであり、例えばUSB、IEEE1394、イーサネット(登録商標)などである。通信I/F310はまた、デジタルカメラ300が再生する画像データのアナログ信号(例えば、RGBコンポジット信号)を送信可能なアナログインタフェースを含んでもよい。
<デジタルカメラ300が行う処理の概要>
図20は、デジタルカメラ300が行う処理の流れの概要を示すフローチャートである。図20は、極めて基本的な処理のみを示しており、通常は、デジタルカメラ300はその他の多様な処理を実行可能であることに注意されたい。
ステップS2001で、CPU301は初期化処理を行う。具体的には、表示部307の表示をONにしたり、撮像部304に含まれる光学レンズを繰り出したりする。
ステップS2002で、CPU301は、操作部306を介して設定されているデジタルカメラ300の動作モードを判定する。動作モードが撮像モードであればステップS2003に進み、再生モードであればステップS2004に進む。
ステップS2003及びステップS2004では、CPU301は、それぞれ、画像の撮像及び再生に必要な処理を行う。
本フローチャートにおいて重要なことは、本発明の特徴は、ステップS2001〜S2004で説明したデジタルカメラ300の処理そのものではなく、この処理を行うための制御プログラムにあるということである。制御プログラムにある本発明の特徴を、以下に詳細に説明する。
<機械語バイナリ生成処理の概要>
図4〜図6を参照して、ソースファイルから機械語バイナリを生成する処理の概要を説明する。なお、ここで説明する機械語バイナリ501(図5)は、分割も圧縮もされていない。なお、本実施形態ではC言語でソースコードを記述するものとして説明するが、実際にはC++言語やJAVA(登録商標)など、任意の言語を使用可能であり、これらの言語が混在していても構わない。
図4は、本実施形態におけるソースファイルを概念的に示す図である。デジタルカメラ300の制御プログラムは、撮像、通信、GUIなどを実現する種々の機能を含む。これらの機能は別々のソースファイルに記述されるのが一般的である。ソースファイル401とソースファイル402はこのようなソースファイルを模式的に示したものである。
ソースファイル401は関数403及び関数404を含む。ソースファイル402は関数405及び関数406を含む。図4に示すように、ソースファイル402に含まれる関数405は、異なるソースファイルであるソースファイル401に含まれる関数403から呼び出されている。また、図示しないが、関数403及び関数406も異なるソースファイルに含まれる関数から呼び出されうるものとする。一方、ソースファイル401に含まれる関数404は、同じソースファイル401に含まれる関数からしか呼び出されないものとする。
図5は、ソースファイル401とソースファイル402から生成される機械語バイナリ501とシンボルテーブル502を示す図である。
複数のソースファイル(ここではソースファイル401とソースファイル402)は、コンパイラによってコンパイルされた後、リンカによって1つの機械語バイナリ501に結合される。
リンカは、複数のソースファイルに記述されたプログラムを結合する際に、シンボルテーブル502を用いる。シンボルテーブルとは、ソースファイルに記述された関数の名前と、機械語バイナリにおいてその関数が存在するアドレスの対応表である。
どの関数がどのアドレスに配置されるかは、実際に機械語バイナリを生成するまでは不明である。そこで、リンカはまず、呼び出す関数のアドレスを確定させないままコンパイルされたプログラムを結合し、その際にそれぞれの関数が配置されたアドレスを参照してシンボルテーブル502を生成する。次いで、リンカは、シンボルテーブル502を参照して、確定させていなかったアドレスを確定させ、機械語バイナリ501を生成する。
図5の例では、ソースファイル401に対応するプログラムAは0x10000番地から配置され、続いてソースファイル402に対応するプログラムBが配置される。その結果、関数403、関数405、関数406はそれぞれ、0x10000番地、0x10300番地、0x10500番地に配置されることが明らかになる。そこで、関数405を呼び出すCALL命令503には、呼び出し先アドレスとして0x10300を与える。また、関数404を呼び出すCALL命令504は、プログラムAに含まれるため、リンカはシンボルテーブル502を参照することなく、呼び出し先アドレスとして0x10200を与える。
なお、シンボルテーブルに記載されるアドレスの数は、例えば4メガバイト程度のプログラムであれば1万5千程度となるのが一般的である。一万5千のアドレスをテーブルとしてROMに搭載すると60キロバイト程度となるのが一般的である。
図6は、C言語などに代表される高級言語ソースファイル601から機械語バイナリ607を生成する処理を概略的に示す図である。
高級言語ソースファイル601は、1又は複数のファイル群である。コンパイラ602は、高級言語ソースファイル601をコンパイルし、高級言語ソースファイル601と同数のアセンブラ言語ソースファイル603を生成する。なお、プログラマはアセンブラ言語を用いたプログラミングによって直接アセンブラ言語ソースファイル603を生成してもよい。あるいは、コンパイラ602によってコンパイルされた高級言語ソースファイル601とプログラマが直接生成したアセンブラ言語ソースファイルを合わせてアセンブラ言語ソースファイル603としてもよい。
アセンブラ604は、アセンブラ言語ソースファイル603をアセンブルし、アセンブラ言語ソースファイル603と同数のリロケータブルオブジェクト605を生成する。リロケータブルオブジェクト605は、機械語とリロケーション情報やデバッグの情報などを保持する。リロケータブルオブジェクト605のフォーマットとしてはCOFFやELFが知られているが、いずれのフォーマットを採用してもよい。
リンカ606は、リロケータブルオブジェクト605から1つの機械語バイナリ607を生成する。機械語バイナリ607が4Mバイト程度のプログラムであれば、高級言語ソースファイル601は数百のファイルからなることが一般的である。
リンカ606が機械語バイナリ607を生成する際に、同時に、マップファイル608とデバッグ用オブジェクト609を生成することもできる。
マップファイル608は、高級言語ソースファイル601のそれぞれのファイルが機械語バイナリ607上に配置されたアドレスを含む。マップファイル608はまた、高級言語ソースファイル601に含まれる関数が機械語バイナリ607上のどのアドレスに配置されるかに関する情報(すなわち、シンボルテーブル)を含む。
デバッグ用オブジェクト609は、機械語バイナリ607のデバッグを行う際に利用されるものであるが、本発明の特徴ではないため、説明を省略する。
<機械語バイナリ607の圧縮>
図7は、機械語バイナリ607を圧縮して圧縮済み機械語バイナリ703を生成する処理を概略的に示す図である。図7において、図6と同一の要素には同一の符号を付し、説明を省略する。
圧縮プログラム701は、機械語バイナリ607とマップファイル608を読み込み、エントリアドレステーブル702と圧縮済み機械語バイナリ703を出力する。
エントリアドレステーブル702は、圧縮済み機械語バイナリ703がRAM303上に伸長された際に、機械語バイナリ607に含まれる各関数がRAM303上のどのアドレスに配置されるかを示すテーブルである。すなわち、エントリアドレステーブル702は、各関数の実行開始アドレス情報を含む。圧縮プログラム701は、マップファイル608を参照して、エントリアドレステーブル702を生成することができる。したがって、マップファイル608が保持するシンボルテーブル502(図5)に含まれない関数、すなわち関数404(図4)のように他のソースファイルから呼び出されない関数はエントリアドレステーブル702に含まれない。
圧縮済み機械語バイナリ703は、機械語バイナリ607をリロケータブルオブジェクト605の単位で分割して圧縮した複数のモジュールを含む(詳細は図8を参照して後述)。圧縮済み機械語バイナリ703は、マップファイル608を参照することにより、機械語バイナリ607をリロケータブルオブジェクト605の単位で分割することができる。圧縮プログラム701はまた、機械語バイナリ607に含まれる変数のうち、初期値が設定されているものをまとめて圧縮する。
圧縮のアルゴリズムとしては、LZWなどよく知られた可逆圧縮のアルゴリズム(例えば特開2001−267930号公報)などが使用されるが、本発明の特徴ではないので説明を省略する。
また、圧縮プログラム701に指示ファイル704を入力することにより、例えば一部のモジュールを圧縮しないなど、圧縮に関して細かい指示を行うことができる。これにより、例えば、デジタルカメラ300の起動時に実行される制御プログラムのパーツを含むモジュールは圧縮せずに、起動時間を短縮することが可能となる。
図21は、指示ファイル704に含まれる、モジュールを圧縮するか否かに関する指示をユーザが設定するためのインタフェースを示す図である。
制御プログラムは通常、例えばPCなど、デジタルカメラ300とは別の装置で生成されるのが一般的である。そこで、図21には、PCのディスプレイに表示されるGUI(グラフィカルインタフェース)を示した。PCはマップファイル608を参照して、機械語バイナリ607に含まれるモジュールを抽出し、GUI上にチェックボックスと共に表示する。指示ファイル704は、図21において、チェックボックスがチェックされているモジュールに含まれる制御プログラムのパーツを圧縮し、それ以外は圧縮しないという指示を含むように生成される。
なお、図21を参照して説明した指示ファイル704の生成方法は一例に過ぎず、例えば全モジュールの合計容量が所定の目標値になるように、各モジュールの圧縮・非圧縮を指示するように生成するなど、任意の方法で生成してよい。
図8は、圧縮済み機械語バイナリ703の構造を概略的に示す図である。
圧縮済み機械語バイナリ703は、圧縮モジュール801、802、804や、非圧縮モジュール803、圧縮済み初期化データ805を含む。このように、本実施形態の圧縮済み機械語バイナリ703は、圧縮されたモジュールと非圧縮のモジュールを混在して扱うことができる。圧縮モジュール801などは、前述のように、リロケータブルオブジェクト605単位に分割された機械語バイナリを圧縮したものである。したがって、圧縮又は非圧縮の各プログラムモジュールは、例えば関数403として示されるような、関数プログラムを少なくとも1つ含む。
圧縮済み初期化データ805は、前述のように、機械語バイナリ607に含まれる変数のうち、初期値が設定されているものをまとめて圧縮したものである。変数の初期値の容量は、制御プログラムのサイズが4Mバイト程度の場合、非圧縮の状態で100Kバイトから300Kバイト程度であることが一般的である。
圧縮モジュール801などの各モジュールは、ブロックサイズ806、開始アドレス807、圧縮済みフラグ808、及びプログラム領域809を備える。
ブロックサイズ806は、圧縮モジュールのサイズを示す。ブロックサイズ806は、制御プログラム実行時に、必要な圧縮モジュールを検索する際に、あるモジュールを調べた後に次のモジュールの位置を調べるために使用される。
開始アドレス807は、圧縮モジュールに含まれるプログラムを伸長してRAM303上に配置する際のアドレス情報(展開開始アドレス情報)を示す。
圧縮済みフラグ808は、モジュールに含まれるプログラムが圧縮されているか否かを示す、格納状態情報である。したがって、例えば圧縮モジュール801の圧縮済みフラグ808は真(TRUE)であり、非圧縮モジュール803の圧縮済みフラグ808は偽(FALSE)である。
プログラム領域809は、圧縮済み又は非圧縮のプログラムを格納する領域である。
なお、ブロックサイズ806、開始アドレス807、圧縮済みフラグ808は、各プログラムモジュールに含まれている必要は無く、ROM302上の他の領域に記憶されていてもよい。
また、各プログラムモジュールをすべて圧縮モジュールとする場合(すなわち、非圧縮モジュールの存在を認めない場合)は、圧縮済みフラグ808は不要である。この場合、以下の説明において、圧縮済みフラグ808を参照してプログラムを伸長するか否かを決定する部分を、圧縮済みフラグ808を参照することなく一律にプログラムを伸長するものとして読み替える。
<ROM302に格納されるデータの構造>
図9は、圧縮済み機械語バイナリ703などが格納されたROM302の状態を示す図である。図3、図7、及び図8と同一の要素には同一の符号を付し、説明を省略する。
初期化プログラム901は、デジタルカメラ300に電源が投入された際にCPU301が最初に実行するプログラムである。
SWI伸長ハンドラ902は、SWI命令によって呼び出されるハンドラプログラムである。SWIは、”SoftWare Interruption”、すなわち、「ソフトウェア割り込み」の略である。詳細は後述するが、簡単に説明すると、CPU301が制御プログラムを実行している際にまだRAM303上に配置されていない関数が呼び出されると、呼び出された先のアドレスにSWI命令が配置されている。SWI命令はSWI伸長ハンドラ902を呼び出し、SWI伸長ハンドラ902は適切な圧縮(又は非圧縮)モジュールに含まれるプログラムをRAM303上に配置する。
なお、初期化プログラム901及びSWI伸長ハンドラ902は圧縮されていない機械語バイナリである。
<デジタルカメラ300の初期化>
図10〜12を参照して、CPU301が初期化プログラム901を実行することによりデジタルカメラ300を初期化(起動準備)する処理を説明する。
図10及び図11は、デジタルカメラ300の初期化の過程でRAM303に種々のデータが展開されていく様子を示す図である。図10及び図11において、図9と同一の要素には同一の符号を付し、説明を省略する。
図12は、CPU301が初期化プログラム901を実行することによりデジタルカメラ300を初期化する処理の流れを示すフローチャートである。
ステップS1201でデジタルカメラ300に電源が投入されると、ステップS1202で、CPU301は、圧縮済み初期化データ805を伸長してRAM303上の伸長された初期化データ領域1001に転送する(図9参照)。CPU301はまた、初期値の設定されていない変数領域としてBSS領域1002をRAM303上に確保し、0で埋める。
ステップS1203で、CPU301は、SWI伸長ハンドラ902をRAM303に転送する。CPU301は、CPU301内部のレジスタのSWI割り込みベクタに、SWI伸長ハンドラ902のアドレスを登録する。
ステップS1204で、CPU301はエントリアドレステーブル702を参照して、制御命令コードとしてのSWI命令をRAM303に埋め込む(書き込む)。SWI命令は、図10において、SWI命令1101で示される長方形を始めとする、多数の長方形で表現される。本実施形態では、SWI命令1102は図4の関数403に対応し、SWI命令1103は関数405、SWI命令1104は関数406にそれぞれ対応するものとして説明する。SWI命令1102〜1104が埋め込まれるアドレスは、図5のシンボルテーブル502から、それぞれ0x10000番地、0x10300番地、0x10400番地となる。
ステップS1205で、CPU301は初期化プログラム901の実行を終了する。これにより、デジタルカメラ300を初期化する処理が終了する。次に、CPU301は、いずれかの圧縮モジュールに含まれる最初のプログラムを実行するように、実行するプログラムのアドレスをCPU301内のプログラムカウンタに設定する。ここでは、プログラムカウンタに0x10000番地を設定するものとする。これにより、CPU301は、実行開始位置である0x10000番地から制御プログラムを実行開始する。
<SWI伸長ハンドラ902による制御プログラムの伸長>
図13〜16を参照して、SWI伸長ハンドラ902によって圧縮(又は非圧縮)モジュールに含まれる制御プログラムをRAM303に転送しつつ、CPU301が制御プログラムを実行する一連の制御を説明する。なお、ROM302からRAM303に制御プログラム等のデータを転送することを、「展開する」と言う場合もある。
図13は、圧縮モジュール801のプログラム領域809に含まれる制御プログラムが伸長されてRAM303に転送された状態を示す図である。図14は、圧縮モジュール801に加えて、圧縮モジュール802のプログラム領域809に含まれる制御プログラムが伸長されてRAM303に転送された状態を示す図である。図13及び図14において、図11と同一の要素には同一の符号を付し、説明を省略する。
図15は、SWI伸長ハンドラ902が実行されているときの、スタックの状態を示す図である。図15のスタックでは、上に行くほど先にプッシュされたデータを、下に行くほど後にプッシュされたデータを示す。また、SPはスタックポインタの略である。
図16は、SWI伸長ハンドラ902が行う処理の流れを示すフローチャートである。
図12のステップS1205で説明したように、CPU301は0x10000番地のアドレスから制御プログラムの実行を開始する。この時点では、0x10000番地には制御プログラムの実体は存在せず、SWI命令1102が存在するだけである。そこで、CPU301はSWI伸長ハンドラ902を呼び出し、図16に示す処理が開始する。
ステップS1601で、SWI伸長ハンドラ902の処理を開始する直前に、CPU301は、リターンアドレス1501とステータスレジスタ1502をスタックにプッシュし、割り込み前の状態を保存する(図15参照)。
ステップS1602で、CPU301は、SWI伸長ハンドラ902が使用するレジスタ(R0〜R4)をプッシュし、割り込み前の状態を保存する。
ステップS1603で、CPU301は、ROM302に格納されている圧縮(又は非圧縮)モジュールから、呼び出された関数を含むモジュールを検索し、発見されたモジュールを注目プログラムモジュールとして特定する。モジュールの検索は、次のように行われる。
SPが示すアドレスから、ステップS1601とS1602でプッシュした回数分のアドレスを引いた場所から、CPU301はリターンアドレス1501を取得する。次に、CPU301は、圧縮(又は非圧縮)モジュールの開始アドレス807を参照して、リターンアドレス1501と一致するモジュールを検索する。本実施形態では、圧縮モジュール801の開始アドレス807が0x10000番地であるため、リターンアドレス1501と一致し、モジュールの検索が完了する。
ただし、開始アドレス807がリターンアドレス1501と一致するモジュールが見つからない場合もある。例えば、SWI命令1104によってSWI伸長ハンドラ902が呼び出された場合、リターンアドレス1501は0x10500番地である。しかし、図4及び図5から明らかなように、圧縮モジュール802に対応するソースファイル402の機械語バイナリは、0x10300番地から始まっており、圧縮モジュール802の開始アドレス807は0x10300番地である。そこで、開始アドレス807がリターンアドレス1501と一致するモジュールが見つからない場合は、リターンアドレス1501よりも上位(小さい)で、最も近いアドレスを含むモジュールを注目プログラムモジュールとする。
ステップS1604で、CPU301は、ステップS1603で検索したモジュールの圧縮済みフラグ808を参照して、そのモジュールが圧縮されているか否かを判定する。
圧縮されていればステップS1606に進み、圧縮されていなければステップS1605に進む。
ステップS1605で、CPU301は、ステップS1603で検索したモジュールのプログラム領域809に含まれるプログラムをそのままRAM303に転送する。転送先のアドレスは、開始アドレス807が示すアドレスである。
ステップS1606で、CPU301は、ステップS1603で検索したモジュールのプログラム領域809に含まれるプログラムを伸長し、RAM303に転送する。転送先のアドレスは、ステップS1605の場合と同様、開始アドレス807が示すアドレスである。
ステップS1606で圧縮モジュール801に含まれるプログラムがRAM303に転送されると、RAM303は図13に示す状態になる。図13において、領域1301に転送されたプログラムが格納される。圧縮モジュール802に含まれるプログラムがRAM303に転送されると、RAM303は図14に示す状態になる。図14において、領域1401に転送されたプログラムが格納される。なお、圧縮モジュール802に含まれるプログラムをRAM303に転送すると、SWI命令1103及びSWI命令1104の2つのSWI命令が上書きされる。しかし、上書きされたSWI命令が存在するアドレスはいずれも圧縮モジュール802に含まれるプログラムが保持する関数の先頭アドレスである。そのため、これらの関数が他の関数から呼ばれた場合はSWI伸長ハンドラ902が呼ばれること無く既に転送されている関数が実行されるため、制御プログラムの実行は正常に行われる。
ステップS1607で、CPU301は、スタックにあるリターンアドレス1501のアドレスを1命令文戻す。これは、次の理由による。通常のソフトウェア割り込みの場合、割り込み処理が完了すると、割り込み命令の次のアドレスからプログラムの実行が継続する。しかし、本実施形態では、例えばSWI命令1102を圧縮モジュール801に含まれるプログラムで上書きし、SWI命令1102が存在したアドレスから、上書きしたプログラムを実行するからである。
さらに説明すると、通常リターンアドレス1501はSWI命令が存在したアドレスの次の命令が存在するアドレスを示し、割り込み処理が終了するとCPU301は次の命令を実行する。しかし、本実施形態の場合は、SWI伸長ハンドラ902の処理が終了した時点で、伸長された本来あるべきプログラムから処理を行い。そのため、SWI伸長ハンドラ902が呼び出される前にSWI命令が存在していたアドレスへ戻るようにスタックのリターンアドレス1501を操作する。
ステップS1608で、CPU301は、スタックからレジスタ(R0〜R4)をポップし、レジスタの状態をSWI伸長ハンドラ902実行前の状態に戻す。
ステップS1609で、CPU301は、スタックからステータスレジスタ1502とリターンレジスタ1501をポップし、モジュールから転送されたプログラムに処理を戻す。
図17は、SWI伸長ハンドラ902が何度も呼ばれ、多くのモジュールがRAM303に転送された状態を示す図である。図に示すように、RAM303において斜線で表現される領域が増えている。このように、本実施形態では、まだRAM303に転送されていない関数が呼ばれるたびにSWI命令がSWI伸長ハンドラ902を呼び出し、呼ばれた関数に相当するプログラムがRAM303に転送される。転送されたプログラムは、デジタルカメラ300の電源がOFFになるまでRAM303に保持されるため、最終的にはすべての制御プログラムが伸長されてRAM303に転送された状態になりうる。
図18は、SWI伸長ハンドラ902が行う処理を、関数を呼び出す側のプログラムから見た様子を模式的に示す図である。関数Aが符号1801に示す時点で関数Bを呼び出したとする。
関数Bに相当するプログラムがまだRAM303に転送されていない場合、本来関数Bが配置されるアドレスにはSWI命令が存在するため、符号1802に示す時点でSWI伸長ハンドラ902が呼び出される。SWI伸長ハンドラ902は符号1803の時点で関数Bを伸長して(非圧縮の場合伸長せずに)RAM303に転送し、IRET命令により関数Bの先頭に戻る(符号1804)。関数Bの実行が終了すると、RET命令により、関数Aにおいて関数Bを呼び出した次の命令に戻る(符号1805)。
一方、関数Bに相当するプログラムが既にRAM303に転送されている場合、符号1802の時点ではSWI伸長ハンドラ902が呼ばれること無く関数Bが実行される。関数Bの実行が終了すると、RET命令により、関数Aにおいて関数Bを呼び出した次の命令に戻る(符号1805)。
このように、関数Aから見ると、関数Bが存在する場合でも存在しない場合でも、関数Bを呼び出す処理は同じである。そのため、本実施形態には、プログラマが呼び出し元の関数を生成する際に、呼び出し先の関数の状態を意識することなく生成可能であるという利点がある。
<実施形態のまとめ>
以上説明したように、本実施形態によれば、デジタルカメラ300のROM302は、制御プログラムとして、リロケータブルオブジェクトの単位で分割されて圧縮された複数のモジュールを含む圧縮済み機械語バイナリ703を保持する。モジュールの中には、圧縮されていないものが含まれていても構わない。ROM302はまた、初期化プログラム901、SWI伸長ハンドラ902、エントリアドレステーブル702を保持する。デジタルカメラ300に電源が投入されると、CPU301はSWI伸長ハンドラ902をRAM303に転送し、また、エントリアドレステーブル702を参照して複数のSWI命令をRAM303に配置する。CPU301が制御プログラムを実行する際に、実行対象であるプログラムがRAM303に転送されていなければ、SWI伸長ハンドラ902が呼ばれ、実行対象であるプログラムがRAM303に転送される。
これにより、デジタルカメラ300の起動時間が長くなること及びレスポンスの低下を抑制しつつ、制御プログラムを圧縮して、必要なROM302の容量増大を抑制することが可能となる。
[その他の実施形態]
<バックグラウンド伸張>
デジタルカメラ300の起動時間には、アナログデバイスの安定待ち時間やステッピングモーターの駆動の待ち時間など、制御プログラムの実行とは無関係な待ち時間が多く含まれる。そこで、これらの待ち時間を利用して、まだ、RAM303に転送されていないプログラムをバックグラウンドで伸長することができる。
これにより、制御プログラムのより多くのパーツ(モジュール)を事前にRAM303に転送しておくことができるため、デジタルカメラ300のレスポンスを向上させることができる。
図19は、バックグラウンドで動作する伸長プログラムの処理の流れを示すフローチャートである。この伸長プログラムは、バックグラウンド展開手段として機能し、初期化プログラム901やSWI伸長ハンドラ902と同様に、圧縮されていない状態でROM302に含まれる。そして、デジタルカメラ300のオペレーティングシステムが管理するプログラムのうち、最もプライオリティが低いタスクとして実行される。
ステップS1701で伸長プログラムの実行がスタートすると、ステップS1702で、CPU301はROM302上の複数のモジュールにおける最初のモジュールを転送対象とする。この段階では実際の転送は行われない。
ステップS1903で、CPU301は、転送対象モジュールのプログラム領域809が含むプログラムが既にRAM303に転送されているか否かを判定する。ここでの判定は、転送対象モジュールの開始アドレス807にSWI命令が存在するか否かを判定することにより行われる。SWI命令が存在しなければプログラムが既に転送されているため、ステップS1904に進む。SWI命令が存在すればプログラムはまだ転送されていないためステップS1905に進む。また、すべてのモジュールのプログラム領域809が含むプログラムが既にRAM303に転送されていれば、ステップS1911に進み、処理を終了する。
ステップS1904で、CPU301は、転送対象モジュールのブロックサイズ806を参照して、転送対象モジュールを次のモジュールに変更する。次いでステップS1902に戻り、同様の処理を繰り返す。
ステップS1905で、CPU301は、転送対象モジュールの圧縮済みフラグ808を参照して、転送対象モジュールのプログラム領域809が含むプログラムが圧縮されているか否かを判定する。圧縮されている場合はステップS1906に進み、圧縮されていない場合はステップS1907に進む。
ステップS1906で、CPU301は、転送対象モジュールのプログラム領域809が含むプログラムを伸長して、RAM303上の開始アドレス807が示すアドレスに転送する。ただし、SWI命令が配置されているアドレスは上書きせず、そのアドレスに転送されるべきプログラムはワークエリアに保存する。プログラムを転送している途中で、転送中のプログラムに含まれる関数が呼び出された場合に、SWI命令が存在しないと不完全なプログラムが実行されてしまうからである。SWI命令が存在すれば、伸長プログラムによるバックグラウンドでの転送処理は中断され、前述したSWI伸長ハンドラ902による処理が行われる。
ステップS1907における処理は、プログラムの伸長が行われないことを除き、ステップS1906における処理と同様である。
ステップS1908で、CPU301は、割り込みを禁止する。これにより、割り込みはもちろんのこと、タスクの切り替えも行われなくなり、伸長プログラムがCPU301を占有することになる。
ステップS1909で、CPU301は、ステップS1906又はS1907でワークエリアに保存しておいた、SWI命令が存在したアドレスに転送されるべき本来のプログラムを、SWI命令が存在したアドレスに転送する。
ステップS1910で、CPU301は、割り込みを許可する。次いでステップS1904に戻り、同様の処理を繰り返す。ステップS1903からステップS1910の処理を繰り返し実行すると、やがてROM302上のすべてのモジュールに含まれるプログラムがRAM303に転送されるため、ステップS1911に進み、伸長プログラムは処理を終了する。
このように、バックグラウンドで伸長プログラムを実行することにより、制御プログラムのより多くのパーツ(モジュール)を事前にRAM303に転送しておくことができるため、デジタルカメラ300のレスポンスを向上させることができる。
<リンク順序のコントロール>
上述のように、伸長プログラムを用いて圧縮されたプログラムをバックグラウンドで伸長する場合、そのままではプログラムの実行順序とは無関係に伸長を行うことになる可能性がある。すなわち、プログラムが実行される順番ではなく、プログラム(厳密には圧縮又は非圧縮のモジュール)がROM302に配置されている順番で、プログラムがRAM303に転送される。
そこで、リンカ606に与えるコマンドにより、プログラムが実行される順番に並ぶようにリロケータブルオブジェクト605を結合するように指示してもよい。
こうすることにより、実行されるプログラムが既にRAM303に転送されている可能性が高くなり、デジタルカメラ300のレスポンスを向上させることができる。
<圧縮率のコントロール>
ROM302のサイズを大容量化する場合、前述の通り、2Mバイトの次は4Mバイト、その次は8Mバイトといったように、倍のサイズになる。したがって、プログラムを圧縮した結果、例えばROM302に格納されるデータが3Mバイトになったとしても、ROM302の容量は4Mバイトとせざるを得ず、1Mバイトの無駄が生じる。
そこで、指示ファイル704により、ROM302の目標必要量を圧縮プログラム701に指示してもよい。初期化プログラム901等も含めたROM302に格納されるデータの容量が、必要目標量に達しない場合は、必要目標量を超えない範囲で、モジュールの一部を圧縮から非圧縮に変更する。
前述のように、プログラムが実行される順番に並ぶようにリンクされている場合は、先頭に配置されているモジュールから順に非圧縮とすることが好ましい。
これにより、デジタルカメラ300の起動時間をさらに短縮することが可能となる。
<分割の単位>
前述のように、図6の機械語バイナリ607を分割する際の単位は、リロケータブルオブジェクト605の単位であった。すなわち、図8における圧縮(又は非圧縮)モジュールの数は、リロケータブルオブジェクト605の数に等しい。
しかし、機械語バイナリ607を関数の単位で分割してもよい。すなわち、各圧縮(又は非圧縮)モジュールのプログラム領域809には、必ず1つの関数のみに対応するプログラムが含まれる。
これにより、各圧縮モジュールのサイズが小さくなるため、SWI命令がSWI伸長ハンドラ902を呼び出した際に圧縮された機械語バイナリを伸長する時間が短くなり、デジタルカメラ300のレスポンスが向上する。この効果は、プログラマが1つの高級言語ソースファイル601に多くの関数を記述する場合に、より顕著になる。
なお、機械語バイナリ607を関数の単位で分割する場合は、図4の関数404のように、他のソースファイルから呼び出されない関数についても対応するSWI命令をRAM303に配置する必要がある。そのため、図5のシンボルテーブル502は、他のソースファイルから呼び出されない関数を含む、すべての関数の名前とアドレスを含むように構成される。
<その他>
上述した実施の形態の処理は、各機能を具現化したソフトウェアのプログラムコードを記録した記憶媒体をシステム或は装置に提供してもよい。そして、そのシステム或は装置のコンピュータ(又はCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行することによって、前述した実施形態の機能を実現することができる。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フロッピィ(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスクなどを用いることができる。或いは、CD−ROM、CD−R、磁気テープ、不揮発性のメモリカード、ROMなどを用いることもできる。
また、コンピュータが読み出したプログラムコードを実行することにより、前述した各実施の形態の機能が実現されるだけではない。そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)などが実際の処理の一部又は全部を行い、その処理によって前述した各実施の形態の機能が実現される場合も含まれている。
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書きこまれてもよい。その後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によって前述した各実施の形態の機能が実現される場合も含むものである。
従来技術におけるROM101とRAM102に格納されるデータの例を示す図である。 従来技術において制御プログラムが実行される手順を示すフローチャートである。 本発明を適用したデジタルカメラ300のハードウェア構成を示すブロック図である。 本実施形態におけるソースファイルを概念的に示す図である。 ソースファイル401とソースファイル402から生成される機械語バイナリ501とシンボルテーブル502を示す図である。 C言語などに代表される高級言語ソースファイル601から機械語バイナリ607を生成する処理を概略的に示す図である。 機械語バイナリ607を圧縮して圧縮済み機械語バイナリ703を生成する処理を概略的に示す図である。 圧縮済み機械語バイナリ703の構造を概略的に示す図である。 圧縮済み機械語バイナリ703などが格納されたROM302の状態を示す図である。 デジタルカメラ300の初期化の過程でRAM303に種々のデータが展開されていく様子を示す図である。 デジタルカメラ300の初期化の過程でRAM303に種々のデータが展開されていく様子を示す図である。 CPU301が初期化プログラム901を実行することによりデジタルカメラ300を初期化する処理の流れを示すフローチャートである。 圧縮モジュール801のプログラム領域809に含まれる制御プログラムが伸長されてRAM303に転送された状態を示す図である。 圧縮モジュール801に加えて、圧縮モジュール802のプログラム領域809に含まれる制御プログラムが伸長されてRAM303に転送された状態を示す図である。 SWI伸長ハンドラ902が実行されているときの、スタックの状態を示す図である。 SWI伸長ハンドラ902が行う処理の流れを示すフローチャートである。 SWI伸長ハンドラ902が何度も呼ばれ、多くのモジュールがRAM303に転送された状態を示す図である。 SWI伸長ハンドラ902が行う処理を、関数を呼び出す側のプログラムから見た様子を模式的に示す図である。 バックグラウンドで動作する伸長プログラムの処理の流れを示すフローチャートである。 デジタルカメラ300が行う処理の流れの概要を示すフローチャートである。 指示ファイル704に含まれる、モジュールを圧縮するか否かに関する指示をユーザが設定するためのインタフェースを示す図である。
符号の説明
300 デジタルカメラ
301 CPU
302 ROM
303 RAM
502 シンボルテーブル
608 マップファイル
702 エントリアドレステーブル
901 初期化プログラム
902 SWI伸長ハンドラ
1101 SWI命令

Claims (11)

  1. プロセッサ、前記プロセッサが実行する制御プログラムを格納するための不揮発性メモリ、及び、前記プロセッサが前記制御プログラムを実行する際に使用する揮発性メモリとを備える電子装置であって、
    前記不揮発性メモリには、
    <a>前記プロセッサが実行可能な制御プログラムを構成するプログラムモジュール群;ここで、各プログラムモジュールは少なくとも1つの関数プログラムを含み、前記プログラムモジュールのうち少なくとも1つは可逆圧縮されている;と、
    <b>各プログラムモジュールごとに、前記揮発性メモリ上の展開開始アドレス情報、各関数プログラムのうち他のプログラムモジュールから参照される関数プログラムの実行開始アドレス情報、及び、非圧縮状態か圧縮状態かを示す格納状態情報と、
    が記憶されており、
    前記電子装置の電源投入時に、前記不揮発性メモリを参照することで、
    <i>各プログラムモジュールに含まれる各関数プログラムの実行開始アドレス情報に基づき、前記揮発性メモリ上の各関数プログラムの実行開始アドレス位置に、該関数プログラムを含むプログラムモジュールを前記揮発性メモリへ展開させる制御命令コードを書き込む制御コード書き込み手段と、
    <ii>前記制御プログラムを開始させるため、前記揮発性メモリの実行開始位置から処理を開始させる実行開始手段と、
    <iii>前記実行開始手段で処理が開始された後、前記制御命令コードを実行した際に、前記不揮発性メモリ内の該当する注目プログラムモジュールを特定することで、前記注目プログラムモジュールの展開開始アドレス情報と格納状態情報とを取得し、
    取得した格納状態情報が非圧縮状態であることを示す場合には、前記注目プログラムモジュールを前記揮発性メモリの展開開始アドレス位置に展開し、取得した格納状態情報が圧縮状態であることを示す場合には、前記注目プログラムモジュールを伸長してから、前記揮発性メモリの展開開始アドレス位置に展開し、
    前記注目プログラムモジュールの揮発性メモリへの展開が完了した後、前記制御命令コードを実行したアドレス位置から処理を再開させる制御手段と、
    を備えることを特徴とする電子装置。
  2. プロセッサ、前記プロセッサが実行する制御プログラムを格納するための不揮発性メモリ、及び、前記プロセッサが前記制御プログラムを実行する際に使用する揮発性メモリとを備える電子装置であって、
    前記不揮発性メモリには、
    <a>前記プロセッサが実行可能な制御プログラムを構成するプログラムモジュール群;ここで、各プログラムモジュールは少なくとも1つの関数プログラムを含み、前記プログラムモジュールはすべて可逆圧縮されている;と、
    <b>各プログラムモジュールごとに、前記揮発性メモリ上の展開開始アドレス情報、及び、各関数プログラムのうち他のプログラムモジュールから参照される関数プログラムの実行開始アドレス情報と、
    が記憶されており、
    前記電子装置の電源投入時に、前記不揮発性メモリを参照することで、
    <i>各プログラムモジュールに含まれる各関数プログラムの実行開始アドレス情報に基づき、前記揮発性メモリ上の各関数プログラムの実行開始アドレス位置に、該関数プログラムを含むプログラムモジュールを前記揮発性メモリへ展開させる制御命令コードを書き込む制御コード書き込み手段と、
    <ii>前記制御プログラムを開始させるため、前記揮発性メモリの実行開始位置から処理を開始させる実行開始手段と、
    <iii>前記実行開始手段で処理が開始された後、前記制御命令コードを実行した際に、前記不揮発性メモリ内の該当する注目プログラムモジュールを特定することで、前記注目プログラムモジュールの展開開始アドレス情報を取得し、
    前記注目プログラムモジュールを伸長してから、前記揮発性メモリの展開開始アドレス位置に展開し、
    前記注目プログラムモジュールの揮発性メモリへの展開が完了した後、前記制御命令コードを実行したアドレス位置から処理を再開させる制御手段と、
    を備えることを特徴とする電子装置。
  3. 前記制御手段は、前記制御命令コードが配置されているアドレスと、各プログラムモジュールそれぞれに対応する前記展開開始アドレス情報とを比較し、
    前記制御命令コードが配置されているアドレスと前記展開開始アドレス情報とが一致するプログラムモジュールが存在すれば、該プログラムモジュールを前記注目プログラムモジュールとして特定し、
    前記制御命令コードが配置されているアドレスと前記展開開始アドレス情報とが一致するプログラムモジュールが存在しなければ、前記展開開始アドレス情報として、前記制御命令コードが配置されているアドレスよりも上位でかつ最も近いアドレスを示すプログラムモジュールを前記注目プログラムモジュールとして特定することを特徴とする請求項1又は2に記載の電子装置。
  4. さらに、前記プロセッサのアイドル時間に、前記プログラムモジュールのうち前記制御手段によって前記揮発性メモリに展開されていないプログラムモジュールを、前記展開開始アドレス情報を参照して、前記揮発性メモリの前記展開開始位置に展開するバックグラウンド展開手段を備えることを特徴とする請求項1乃至3のいずれか1項に記載の電子装置。
  5. 前記プログラムモジュールはすべて単一の関数プログラムから構成され、前記実行開始アドレス情報はすべての関数プログラムに対応する実行開始アドレス位置を含むことを特徴とする請求項1乃至4のいずれか1項に記載の電子装置。
  6. プロセッサ、前記プロセッサが実行する制御プログラムを格納するための不揮発性メモリ、及び、前記プロセッサが前記制御プログラムを実行する際に使用する揮発性メモリとを備える電子装置用の、前記不揮発性メモリに格納するための制御プログラムを、当該制御プログラムを生成する際にリンカによって生成されたマップファイルを用いてコンピュータに可逆圧縮させるための圧縮プログラムであって、
    前記リンカによって生成された実行形式のプログラムを構成する、1以上の関数プログラムを含むプログラムモジュール群について、圧縮対象とするプログラムモジュールを指定する指定手段と、
    前記指定手段で指定されたプログラムモジュールを可逆圧縮する圧縮手段と、
    各プログラムモジュールの前記揮発性メモリにおける開始アドレスを展開先アドレスとし、当該展開先アドレスと、各プログラムモジュールに含まれる関数プログラムのうち他のプログラムモジュールから参照される関数プログラムの前記揮発性メモリにおける実行開始アドレス、及び、各プログラムモジュールが非圧縮又は圧縮のいずれの状態であるかを示す格納状態情報を生成する生成手段と、
    前記生成手段で生成された各プログラムモジュールごとの前記展開先アドレス、前記実行開始アドレス、及び、前記格納状態情報と、非圧縮のプログラムモジュール及び圧縮されているプログラムモジュールを用いて、前記電子装置の前記不揮発性メモリに書き込むデータを生成して出力する出力手段
    としてコンピュータに実行させることを特徴とする圧縮プログラム。
  7. 前記マップファイルは、すべての関数プログラムに対応する、前記揮発性メモリにおける実行開始アドレスを含み、前記プログラムモジュールはすべて単一の関数プログラムから構成されることを特徴とする請求項6に記載の圧縮プログラム。
  8. プロセッサ、前記プロセッサが実行する制御プログラムを格納するための不揮発性メモリ、及び、前記プロセッサが前記制御プログラムを実行する際に使用する揮発性メモリとを備える電子装置を制御する方法であって、
    前記不揮発性メモリには、
    <a>前記プロセッサが実行可能な制御プログラムを構成するプログラムモジュール群;ここで、各プログラムモジュールは少なくとも1つの関数プログラムを含み、前記プログラムモジュールのうち少なくとも1つは可逆圧縮されている;と、
    <b>各プログラムモジュールごとに、前記揮発性メモリ上の展開開始アドレス情報、各関数プログラムのうち他のプログラムモジュールから参照される関数プログラムの実行開始アドレス情報、及び、非圧縮状態か圧縮状態かを示す格納状態情報と、
    が記憶されており、
    前記電子装置の電源投入時に、前記不揮発性メモリを参照することにより実行される、
    <i>各プログラムモジュールに含まれる各関数プログラムの実行開始アドレス情報に基づき、前記揮発性メモリ上の各関数プログラムの実行開始アドレス位置に、該関数プログラムを含むプログラムモジュールを前記揮発性メモリへ展開させる制御命令コードを書き込む制御コード書き込み工程と、
    <ii>前記制御プログラムを開始させるため、前記揮発性メモリの実行開始位置から処理を開始させる実行開始工程と、
    <iii>前記実行開始工程で処理が開始された後、前記制御命令コードを実行した際に、前記不揮発性メモリ内の該当する注目プログラムモジュールを特定することで、前記注目プログラムモジュールの展開開始アドレス情報と格納状態情報とを取得し、
    取得した格納状態情報が非圧縮状態であることを示す場合には、前記注目プログラムモジュールを前記揮発性メモリの展開開始アドレス位置に展開し、取得した格納状態情報が圧縮状態であることを示す場合には、前記注目プログラムモジュールを伸長してから、前記揮発性メモリの展開開始アドレス位置に展開し、
    前記注目プログラムモジュールの揮発性メモリへの展開が完了した後、前記制御命令コードを実行したアドレス位置から処理を再開させる制御工程と、
    を備えることを特徴とする制御方法。
  9. プロセッサ、前記プロセッサが実行する制御プログラムを格納するための不揮発性メモリ、及び、前記プロセッサが前記制御プログラムを実行する際に使用する揮発性メモリとを備える電子装置を制御する方法であって、
    前記不揮発性メモリには、
    <a>前記プロセッサが実行可能な制御プログラムを構成するプログラムモジュール群;ここで、各プログラムモジュールは少なくとも1つの関数プログラムを含み、前記プログラムモジュールはすべて可逆圧縮されている;と、
    <b>各プログラムモジュールごとに、前記揮発性メモリ上の展開開始アドレス情報、及び、各関数プログラムのうち他のプログラムモジュールから参照される関数プログラムの実行開始アドレス情報と、
    が記憶されており、
    前記電子装置の電源投入時に、前記不揮発性メモリを参照することにより実行される、
    <i>各プログラムモジュールに含まれる各関数プログラムの実行開始アドレス情報に基づき、前記揮発性メモリ上の各関数プログラムの実行開始アドレス位置に、該関数プログラムを含むプログラムモジュールを前記揮発性メモリへ展開させる制御命令コードを書き込む制御コード書き込み工程と、
    <ii>前記制御プログラムを開始させるため、前記揮発性メモリの実行開始位置から処理を開始させる実行開始工程と、
    <iii>前記実行開始工程で処理が開始された後、前記制御命令コードを実行した際に、前記不揮発性メモリ内の該当する注目プログラムモジュールを特定することで、前記注目プログラムモジュールの展開開始アドレス情報を取得し、
    前記注目プログラムモジュールを伸長してから、前記揮発性メモリの展開開始アドレス位置に展開し、
    前記注目プログラムモジュールの揮発性メモリへの展開が完了した後、前記制御命令コードを実行したアドレス位置から処理を再開させる制御工程と、
    を備えることを特徴とする制御方法。
  10. 請求項8又は9に記載の制御方法をコンピュータに実行させるためのプログラム。
  11. 請求項10に記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。
JP2005352329A 2005-12-06 2005-12-06 電子装置及びその制御方法 Expired - Fee Related JP4845497B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005352329A JP4845497B2 (ja) 2005-12-06 2005-12-06 電子装置及びその制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005352329A JP4845497B2 (ja) 2005-12-06 2005-12-06 電子装置及びその制御方法

Publications (3)

Publication Number Publication Date
JP2007156899A true JP2007156899A (ja) 2007-06-21
JP2007156899A5 JP2007156899A5 (ja) 2009-01-22
JP4845497B2 JP4845497B2 (ja) 2011-12-28

Family

ID=38241175

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005352329A Expired - Fee Related JP4845497B2 (ja) 2005-12-06 2005-12-06 電子装置及びその制御方法

Country Status (1)

Country Link
JP (1) JP4845497B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110730300A (zh) * 2019-10-11 2020-01-24 Oppo(重庆)智能科技有限公司 相机控制方法、装置、存储介质和终端

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6257025A (ja) * 1985-09-06 1987-03-12 Hitachi Ltd プログラムロ−ド方式
JPH02270032A (ja) * 1989-04-12 1990-11-05 Nec Corp ローディング方式
JPH11312089A (ja) * 1998-04-28 1999-11-09 Matsushita Electric Ind Co Ltd 電子制御装置
JP2002366362A (ja) * 2001-06-06 2002-12-20 Canon Inc 電子機器、および電子機器の制御方法
JP2003189165A (ja) * 2001-12-19 2003-07-04 Fuji Photo Film Co Ltd デジタルカメラ

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6257025A (ja) * 1985-09-06 1987-03-12 Hitachi Ltd プログラムロ−ド方式
JPH02270032A (ja) * 1989-04-12 1990-11-05 Nec Corp ローディング方式
JPH11312089A (ja) * 1998-04-28 1999-11-09 Matsushita Electric Ind Co Ltd 電子制御装置
JP2002366362A (ja) * 2001-06-06 2002-12-20 Canon Inc 電子機器、および電子機器の制御方法
JP2003189165A (ja) * 2001-12-19 2003-07-04 Fuji Photo Film Co Ltd デジタルカメラ

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110730300A (zh) * 2019-10-11 2020-01-24 Oppo(重庆)智能科技有限公司 相机控制方法、装置、存储介质和终端

Also Published As

Publication number Publication date
JP4845497B2 (ja) 2011-12-28

Similar Documents

Publication Publication Date Title
US8150809B2 (en) File delete method, file open method, storage medium storing file delete program, and storage medium storing file open program
WO2017148171A1 (zh) 一种嵌入式装置的启动方法和装置
CN105975311B (zh) 一种应用启动方法及装置
JP4777426B2 (ja) Non−execute−in−placeフラッシュメモリ内の持続性ファイルにアクセスするための装置、システムおよび方法
JP4829579B2 (ja) 画像処理装置、画像処理方法
JP4376181B2 (ja) プログラム実行処理端末装置
JPH0434345B2 (ja)
CN109739600B (zh) 数据处理方法、介质、装置和计算设备
JP2003259268A (ja) 動画像管理方法及び装置
CN110968343A (zh) 资源文件的配置方法、配置装置、冰箱以及可读存储介质
CN109298891B (zh) 系统启动方法和装置、系统编译方法和装置
JP4845497B2 (ja) 電子装置及びその制御方法
JP5683186B2 (ja) 起動高速化方法、情報処理装置及びプログラム
CN110989986B (zh) 基于软件模板的软件生成方法、装置和计算机设备
US10310871B2 (en) Non-transitory computer-readable recording medium storing control program, control device and control method
JP2004320591A (ja) 携帯通信端末
CN114090070A (zh) 应用程序安装包文件处理方法及电子设备
CN110187897B (zh) 一种固件升级方法及装置
CN112486580A (zh) 一种实现VxWorks操作系统快速启动的方法及装置
CN100346300C (zh) 用多重加载/存储指令初始化系统全局变量的设备和方法
JP4409507B2 (ja) オブジェクト編纂装置
JP2018185615A (ja) 電子機器、方法、及びプログラム
EP0963655A1 (en) A method and system for expanding the media types supported in a digital camera
JP2001142709A (ja) 初期起動装置、コンピュータシステム、初期起動方法及び記憶媒体
US20040254986A1 (en) Information processing apparatus and program

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081203

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20081203

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110630

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110711

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110905

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111007

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111011

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141021

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141021

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees