(57)【特許請求の範囲】
【請求項１】
機器に接続されたデバイスを制御する第１のプログラム及び、前記第１のプログラムよりプログラムの大きさが小さく、前記第１のプログラムの複数の機能のうち、一部の機能を含む第２のプログラムが記憶された記憶部と、
前記記憶部と接続され前記第１のプログラムの更新要求を受け付けた場合に、前記第１のプログラムの実行を停止し、前記第１のプログラムを上書き更新するとともに、前記第１のプログラムの更新中に、前記第２のプログラムの前記一部の機能を実行する制御部と
を備え、
前記制御部は、前記第１のプログラムがデバイスを制御するために実行している命令を参照し、繰り返し実行される命令を周期実行命令列として抽出するとともに、抽出した周期実行命令列を前記第２のプログラムとして前記記憶部に記憶するソフトウェア搭載機器。
【請求項２】
機器に接続されたデバイスを制御する第１のプログラム及び、前記第１のプログラムよりプログラムの大きさが小さく、前記第１のプログラムの複数の機能のうち、一部の機能を含む第２のプログラムが記憶された記憶部と、
前記記憶部と接続され前記第１のプログラムの更新要求を受け付けた場合に、前記第１のプログラムの実行を停止し、前記第１のプログラムを上書き更新するとともに、前記第１のプログラムの更新中に、前記第２のプログラムの前記一部の機能を実行する制御部と
を備え、
前記制御部は、前記デバイスに対し、繰り返し行われている動作を検出し、繰り返し動作する処理に対応する複数の命令を周期実行命令列として抽出するとともに、抽出した周期実行命令列を前記第２のプログラムとして前記記憶部に記憶するソフトウェア搭載機器。
【請求項３】
前記制御部は、前記周期実行命令列に対し、処理が行われていない無処理期間を抽出するとともに、更新中に実行したい拡張処理を前記無処理期間へ挿入する請求項１に記載のソフトウェア搭載機器。
【請求項４】
前記制御部は、前記拡張処理を分割して複数の前記無処理期間へ挿入する請求項３に記載のソフトウェア搭載機器。
【請求項５】
制御部と記憶部とを備えた機器と、前記機器とネットワークを介して接続されたソフトウェア配信サーバとを有するシステムのソフトウェア更新方法において、
前記ソフトウェア配信サーバが、前記機器に接続されたデバイスを制御する第１のプログラムに対する更新要求を送信するステップと、
前記制御部により前記第１のプログラムが更新されている間に、前記制御部が、前記デバイスの一部の制御のみを継続するための周期実行命令列を抽出し、前記記憶部に記憶するステップと、
前記制御部が前記更新要求を受け付けた場合に、前記制御部が前記第１のプログラムの実行を停止するとともに、前記周期実行命令列を実行するステップと、
前記ソフトウェア配信サーバが、前記制御部により前記周期実行命令列を実行している前記機器へ、前記第１のプログラムの更新プログラムを送信するステップと、
前記更新プログラムのダウンロード終了後、前記制御部が前記周期実行命令列の実行を停止し、前記更新プログラムに置き換えられた前記第１のプログラムを実行するステップとを備えたソフトウェア更新方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア搭載機器におけるソフトウェア更新方法に関する。
【背景技術】
【０００２】
インターネットなどの通信手段を通じてソフトウェアをダウンロード及び更新可能な情報機器において、機器の動作を継続しつつ、ソフトウェアの更新を同時に行うことが求められている。【０００３】
このような要求に対して、修正プログラムを含むすべての更新プログラムを格納する領域をあらかじめ確保する方法が提案されている。【０００４】
この方法では、現行のプログラムを実行したまま、更新プログラムをあらかじめ確保しておいた領域にダウンロードしている。そして、ダウンロードが終了した後に現行プログラムから更新プログラムへの置き換えを行っている。【０００５】
特許文献１では、複数ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が同一のＨ／Ｗ上で動作する環境下において、それぞれのＯＳのソフトウェアの更新の際に実行される処理内容が等しい処理を並列に実行される時間が短くなるよう、実行順序を調整する手法が提案されている。【０００６】
特許文献２では、機器の使用及び非使用時を判断する手段を保有し、非使用時に自動的にソフトウェアをサーバからダウンロードする手法について提案されている。【０００７】
特許文献３では、通常の通電状態でありアプリケーションが実行可能な通常状態と、消費電力を制限するとともにアプリケーションの実行を伴わないスタンバイ状態の切り替えを可能とし、そのスタンバイ状態においてアプリケーションのダウンロードを行う手法が提案されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１２−１８１５７８号公報
【特許文献２】特開２０１２−０１８６５７号公報
【特許文献３】特開２０１３−０９９５５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
従来のソフトウェア搭載機器では、更新対象となるプログラムと同等の空き記憶領域を用意しておく必要がある。従来のソフトウェア搭載機器では、更新の通知を受けた後、更新プログラムを前記空き記憶領域に、ダウンロードする。そして、ダウンロード完了後に既存プログラムから更新プログラムに切り替えを行っている。【００１０】
そのため、従来のソフトウェア搭載機器では、ソフトウェアの更新規模に応じた記憶領域が別途必要となり、記憶領域のコストが増大するという課題があった。
【課題を解決するための手段】
【００１１】
この発明は、上記のような課題を解消するためになされたもので、機器に接続されたデバイスを制御する第１のプログラム及び、前記第１のプログラムよりプログラムの大きさが小さく、前記第１のプログラムの複数の機能のうち、一部の機能を含む第２のプログラムが記憶された記憶部と、前記記憶部と接続され前記第１のプログラムの更新要求を受け付けた場合に、前記第１のプログラムの実行を停止し、前記第１のプログラムを上書き更新するとともに、前記第１のプログラムの更新中に、前記第２のプログラムの前記一部の機能を実行する制御部とを有することを特徴とするソフトウェア搭載機器を提供する。
【発明の効果】
【００１２】
本発明は、少ない記憶領域でソフトウェアの更新ができる。
【図面の簡単な説明】
【００１３】
【図１】この発明の実施の形態におけるシステム構成図である。
【図２】この発明の実施の形態におけるソフトウェア搭載機器のハードウェア構成図である。
【図３】この発明の実施の形態１におけるソフトウェア搭載機器上で動作するソフトウェア構成図である。
【図４】この発明の実施の形態におけるプログラム切り換え部の構成図である。
【図５】この発明の実施の形態１における全体処理の動作を示すフローチャートである。
【図６】この発明の実施の形態１における周期実行命令列の抽出例を示した図である。
【図７】この発明の実施の形態１における実行命令の例である。
【図８】この発明の実施の形態１におけるメインプログラムからサブプログラムへの切り換えを示す図である。
【図９】この発明の実施の形態２におけるソフトウェア搭載機器上で動作するソフトウェア構成図である。
【図１０】この発明の実施の形態２における全体処理の動作を示すフローチャートである。
【図１１】この発明の実施の形態２における周期出力パターンの抽出の例を示した図である。
【図１２】この発明の実施の形態２におけるメインプログラムからサブプログラムへの切り換えを示す図である。
【図１３】この発明の実施の形態３におけるソフトウェア搭載機器上で動作するソフトウェア構成図である。
【図１４】この発明の実施の形態３における全体処理の動作を示すフローチャートである。
【図１５】この発明の実施の形態３におけるＮＯＰを含んだ周期出力パターンの抽出の例を示した図である。
【図１６】この発明の実施の形態３における周期実行命令列内の無処理時間に対する拡張処理の追加の例を示した図である。
【発明を実施するための形態】
【００１４】
実施の形態１．
図１は、本実施の形態におけるシステム構成図である。本実施の形態におけるシステムは、ソフトウェア搭載機器１、ソフトウェア配信サーバ２、ネットワーク３で構成される。ソフトウェア搭載機器１は、白物家電などの組込み機器やパソコンなどであり、ネットワークを通じてソフトウェアのダウンロード及びダウンロードしたソフトウェアへの更新を行う。ソフトウェア配信サーバ２は、ネットワークを通じてソフトウェア搭載機器１に対して、更新プログラム（ソフトウェア）を配信する機能を有する。ネットワーク３は、インターネットなどの通信手段である。ネットワーク３は無線であっても有線であってもよい。
【００１５】
図２は、本実施の形態における、ソフトウェア搭載機器１のハードウェア構成図である。図２において、ソフトウェア搭載機器１は、ＣＰＵ１０（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）、ＲＯＭ１１（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ１２（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）に加え、通信モジュール１３、デバイス１４、ＬＥＤ（Ｌｉｇｈｔ  Ｅｍｉｔｔｉｎｇ  Ｄｉｏｄｅ）１５、電子ブザー１６、タイマー１７、電源スィッチ１８などの複数のハードウェアを備えている。
【００１６】
ＲＯＭ１１は、プログラム命令列や固定データを格納する領域を提供する。フラッシュメモリなどが相当し、書き込まれたプログラム内容を書き換えることが可能である。
ＲＡＭ１２は、プログラムが使用するデータを保存及び参照するための作業領域を提供する。
【００１７】
通信モジュール１３は、インターネットなどのネットワークインフラを通じて通信機器同士でデータの送受信を行う。
【００１８】
デバイス１４は、ソフトウェア搭載機器１が有するデバイスである。デバイスの一例として、冷蔵庫のファンやコンプレッサ、エアコンのファンやルーバーなどを動作させるために用いられる、ステッピングモーターやＰＷＭ（Ｐｕｌｓｅ  Ｗｉｄｔｈ  Ｍｏｄｕｌａｔｉｏｎ）モーターなどが挙げられる。なお、図２のソフトウェア搭載機器１ではデバイス１４を一つしか記載していないが、複数のデバイスで構成されていてもよい。
【００１９】
ＬＥＤ１５は、点灯、点滅などの光のパターン出力によってユーザに機器の動作状況などを通知する半導体素子である。
【００２０】
電子ブザー１６は、電子音の鳴動によって、ユーザに機器の動作状況を通知する機器である。
【００２１】
タイマー１７は、時刻の他、プログラム命令が実行されるタイミングや、デバイス１４に対する出力タイミングなどを計測する。
【００２２】
電源スイッチ１８は、ソフトウェア搭載機器１の電源を操作するためのボタンで、そのスイッチの搭載場所は本体付属及びリモコンなどでも構わない。
【００２３】
図３は、本実施の形態における、ソフトウェア搭載機器１上で動作するソフトウェアの全体構成図である。これらのソフトウェアはＲＯＭ１１、若しくはＲＡＭ１２に記憶され、制御部であるＣＰＵ１０により実行される。図３において、メインプログラム（第１のプログラム）１００は、ソフトウェア搭載機器１の製品としての機能を特徴づけるプログラムであり、普段はこのメインプログラム１００が、ソフトウェア搭載機器１に接続されているデバイスの制御を行っている。
【００２４】
サブプログラム２００は、メインプログラム１００に対する更新要求が発生したとき、メインプログラム１００の代わりにデバイスの制御を実行する命令を有しており、メインプログラム１００の更新に係るソフトウェアモジュールを備えている。
【００２５】
プログラム切り換え部３００は、メインプログラム１００に対する更新要求をソフトウェア配信サーバ２等の外部から受け取った、または、更新要求の問い合わせを外部に対して行い、その結果、更新要求を受取ったとき、サブプログラム２００に対し、更新を指示するプログラムである。また、プログラム切り換え部３００は、メインプログラム１００に対する更新が完了した後、サブプログラム２００で実行しているデバイスの制御を終了し、更新プログラムに置き換えられたメインプログラム１００にデバイスの制御を戻す機能を持っている。
【００２６】
まず、メインプログラム１００の詳細について説明する。ＯＳ１１０は、メインプログラム１００を動作させるための基本ソフトウェアである。このＯＳ１１０上で動作するアプリケーション、アプリａ（１２０ａ）、アプリｂ（１２０ｂ）、アプリｎ（１２０ｎ）は、ソフトウェア搭載機器１のそれぞれの機能を実装したプログラムである。また、ＯＳ１００に組み込まれているドライバａ（１３０ａ）、ドライバｂ（１３０ｂ）、ドライバｍ（１３０ｍ）は、デバイスドライバであり、ソフトウェア搭載機器１が有するハードウェア（デバイス）を制御するためのプログラムである。
【００２７】
次にサブプログラム２００の詳細について述べる。スケジューリング部２１０は、プログラム切り換え部３００からの動作指示を受け付ける。動作指示には２種類あり、一つ目はメインプログラム１００の動作状況を調べる解析指示である。二つ目はメインプログラム１００の内容を更新プログラムで置き換える更新作業及び更新作業中のメインプログラム１００に代わってデバイスの制御を実行する、更新実行指示である。
【００２８】
解析指示を受けたときスケジューリング部２１０を呼び出す。呼び出された解析部２２０は、メインプログラム１００の実行命令を収集し、収集した実行命令の列（実行命令列）から実行命令の周期性をパターン判定する。解析部２２０はこのパターン判定により、ＣＰＵ１０が周期的に実行する命令群を抽出し、周期実行命令列として、格納領域２３０に記憶する。解析部２２０は、解析終了後、プログラム切り換え部３００に完了を通知する。
【００２９】
格納領域２３０は、解析部２２０で抽出した周期実行命令列を保存するための領域（記憶部）であり、サブプログラム２００により、領域確保されたＲＯＭ１１、ＲＡＭ１２上の記憶領域である。
【００３０】
次に、メインプログラム１００の更新に関するモジュールについて説明する。スケジューリング部２１０は更新実行指示を受けたときに実行部２４０と更新部２５０を呼び出す。実行部２４０は、予めメインプログラム１００のソフトウェア動作から抽出し、格納領域２３０に保存しておいた周期プログラム（第２のプログラム）を実行するモジュールである。一方、更新部２５０は、実行部２４０でメインプログラム１００のソフトウェア動作から抽出された周期プログラムが実行されている間、通信モジュール１３を介し、ソフトウェア配信サーバ２から更新プログラムを受信し、メインプログラム１００の書き換え更新を行うモジュールである。
【００３１】
次にプログラム切り換え部３００の詳細について説明する。プログラム切り換え部３００は、メインプログラム１００とサブプログラム２００に起動または停止の指示を出すプログラムである。プログラム切り換え部３００は、ソフトウェア搭載機器１が起動されると最初に呼び出され、ＣＰＵ１０にメインプログラム１００を実行させる。
【００３２】
図４は、プログラム切り換え部３００内部のソフトウェア構成を表す図である。図４において、更新要求受信部３１０は、ソフトウェア配信サーバ２がソフトウェア搭載機器１に対して、更新プログラムの配信前に送信する更新要求を受信する。この受信は図２の通信モジュール１３を介して行われる。更新要求受信部３１０は、更新要求を受信すると、プログラム起動停止部３２０を介して、サブプログラム２００に対し、解析指示を送る。プログラム起動停止部３２０は、メインプログラム１００及びサブプログラム２００に対し、動作の指示を送る。
【００３３】
解析指示を受信したサブプログラム２００は、メインプログラム１００の解析を実行し、解析が終了すると解析完了通知を返信する。この解析完了通知を受信した周期タイミング同期部３３０は、プログラム起動停止部３２０を介して、メインプログラム１００に停止の指示を送り、サブプログラム２００に更新実行指示を送る。
【００３４】
更新実行指示を受けたサブプログラム２００は、メインプログラム１００の更新処理を実行し、更新が終了すると更新完了の通知を、更新完了受信部３４０へ送信する。この通知を受信した更新完了受信部３４０は、プログラム起動停止部３２０を介して、サブプログラム２００に停止の指示を送り、メインプログラム１００に実行指示を送る。なお、プログラム切り換え部３００は、起動直後にメインプログラム１００を起動するようになっているため、ソフトウェア搭載機器１をリブートすることで、メインプログラム１００を起動させることが可能である。
【００３５】
次に図５を用いて、本実施の形態１における全体処理の動作について説明する。ここでは、ソフトウェア搭載機器１がデバイスの制御を実行中に、ソフトウェア配信サーバ２からソフトウェア更新通知があった場合を例に説明する。
【００３６】
本実施の形態において、ソフトウェア配信サーバ２は、メインプログラム１００の更新プログラムを、外部（図示せず）から入手するものとする。入手方法は別のネットワークから受信してもよいし、外部記憶装置や媒体を介して、入手してもよい。
【００３７】
また、ソフトウェア配信サーバ２は、ソフトウェア搭載機器１で用いられているメインプログラム１００のバージョンを管理しており、更新プログラムを入手すると、比較を行い、更新が必要であると判断した場合のみ、更新要求をソフトウェア機器１に送るものとする。
【００３８】
なお、ソフトウェア配信サーバ２は、受け取った更新プログラムを全てソフトウェア搭載機器１に送るようにし、ソフトウェア搭載機器１が更新の要否を判定してもよい。
このほかにも、ソフトウェア搭載機器１が更新プログラムの有無を問い合わせし、更新プログラムが存在した場合にのみ、ソフトウェア配信サーバ２が更新要求を送ってもよい。
【００３９】
まず、更新要求受信部３１０が、ソフトウェア配信サーバ２からソフトウェアの更新要求を受取る（Ｓ１０１）。次に更新要求受信部３１０は、プログラム起動停止部３２０を介して、サブプログラム２００に対し、メインプログラム１００の動作状況を調べる解析指示を送る。
【００４０】
サブプログラム２００に対し、解析指示を送る方法として、プログラム起動停止部３２０から解析指示だと判断できる引数とともにスケジューリング部２１０を呼び出してもよい。また、プログラム起動停止部３２０とスケジューリング部２１０とで共通にアクセスできるメモリ領域を用意しておき、スケジューリング部２１０はこの領域をポーリングし、プログラム起動停止部３２０はこの領域の値を変更することにより、サブプログラム２００に対し、解析指示を送ってもよい。
【００４１】
解析指示を受け取ったスケジューリング部２１０は、解析部２２０を呼び出す。解析部２２０ではメインプログラム１００の解析を行う。解析を行うにあたり、解析部２２０は、メインプログラム１００で動作している実行命令の記録を行う（Ｓ１０２）。
【００４２】
メインプログラム１００で動作している実行命令の情報を入手するには、ＣＰＵ１０のプログラムカウンタレジスタから、マシン語が格納されているメモリを参照する方法や、メインプログラム１００で動作するアプリケーション（１２０ａ〜１２０ｎ）及びＯＳ１１０の実行命令をメモリ上の領域若しくはログファイルにマシン語を出力させ、それを参照する方法がある。
【００４３】
解析部２２０は、記録した実行命令の列（実行命令列）を解析し、実行命令列の中から周期実行命令列を抽出し、格納領域２３０に格納する（Ｓ１０３）。図６及び図７を用いて実行命令列の解析について説明する。
【００４４】
図６は本実施の形態における周期実行命令列の抽出の例を表した図である。以下、周期的に実行される命令を検出して、更新処理中に実行する命令を抽出する方法を説明するが、この発明はこれに限定されることなく、予め定められた機能に対応する命令を検出して、命令を抽出する方法を用いてもよい。例えば、メインプログラム１００における特定範囲を示すアドレスをＲＯＭ１１に予め記憶、若しくは、配信サーバ２からソフトウェア搭載機器１が入手して、命令を特定し、抽出することもできる。
【００４５】
図６において、実行命令６１０ａ〜６１０ｍは、ＣＰＵ１０が実行するメインプログラム１００のマシン語である。図６では、実行時刻に沿って左から順に実行される様子を示している。なお、複数の実行命令をまとめたものを実行命令列と呼ぶ。図６の例だと、実行命令６１０ａ〜６１０ｍをまとめたものを実行命令列６１０と呼ぶ。周期実行命令列６２０は、実行命令列６１０（実行命令６１０ａ〜６１０ｍ）を解析した結果、周期的に繰り返されている実行命令列である。
【００４６】
実行命令をメインプログラム１００から収集する方法としては、メインプログラム１００で動作するアプリケーション（１２０ａ〜１２０ｎ）が実行している命令をログに出力するようにし、それを解析部２２０が参照してもよい。また、ＯＳ１１０が実行している命令をログに出力、それを解析部２２０が参照してもよい。
【００４７】
解析部２２０は、収集した実行命令の記録を行い、解析を行う。図６に示すように、Ａ、Ｂ、Ｃ、Ｄ、Ａ、Ｂ、Ｃ、Ｄ、Ａ、Ｂ、Ｃ、Ｄ、Ａ、のように、ある一定の期間、同一の繰返しパターンが連続して検出された場合、例えばこの場合だと、Ａ、Ｂ、Ｃ、Ｄを周期実行命令列６２０として抽出を行う。その後、解析部２２０は、抽出された周期実行命令列６２０を、格納領域２３０に格納する。
【００４８】
解析の対象とする一定の期間及び繰り返しパターンの数は、ソフトウェア搭載機器１で実行される全てのアプリケーション（１２０ａ〜１２０ｎ）がどの程度周期的に動作するのかによるため、予め統計的に調査した、例えば期間１００ミリ秒、パターン数５回などの値を予め与えられている条件として用いる。
【００４９】
なお、周期性を判定するためのパターン抽出アルゴリズムについては、自然情報処理などで用いられるパターン認識アルゴリズムなどのアルゴリズムを利用しても構わない。
【００５０】
図７に実行命令の例を示す。収集データ７０１は、解析部２２０が収集した実行命令の集まりであり、解析データ７０２は、解析部２２０が収集データ７０１に対し解析を行った後に抽出された周期実行命令列を示す。
【００５１】
収集データ７０１及び解析データ７０２の左の列は、実行命令を識別するための実行ＩＤである。なお、図７の実行命令の欄には、理解しやすくするため、アセンブリ言語（ニーモニック）で表記したが、実際にはマシン語が代入されている。
【００５２】
例えば、収集データ７０１のように、同じ実行命令が繰り返し連続で発生している場合、解析部２２０は、実行ＩＤ０ｘ３５０２から実行ＩＤ０ｘ３５０５の間と、実行ＩＤ０ｘ３５０６から実行ＩＤ０ｘ３５０Ｂの間を周期実行命令列として抽出する。
【００５３】
周期実行命令列が抽出できなかった場合（Ｓ１０４：ＮＯ）、実行命令の記録（Ｓ１０２）を再度行う。図５には示していないが、実行命令の記録（Ｓ１０２）の繰り返しを行う際、すぐに繰返し行うのではなく、しばらく待機してから実行してもよい。しばらく待機する時間は、予め定めておいても良いし、更新プログラムとともに送られてきた値を用いるようにしてもよい。
【００５４】
周期実行命令列の抽出（Ｓ１０３）ができた場合（Ｓ１０４：ＹＥＳ）、解析部２２０は、解析の完了通知をプログラム切り換え部３００に送る。解析の完了通知を受けた周期タイミング同期部３３０はメインプログラム１００からサブプログラム２００への切り換えを行う。まず、周期タイミング同期部３３０は、解析部２２０から受けた周期実行命令列の情報を基に、メインプログラム１００から周期実行命令列に実行位置の切り換えを行うためのタイミングを算出する（Ｓ１０５）。
【００５５】
タイミングを算出する方法として、次の方法がある。解析部２２０が、解析の完了通知として、若しくは解析の完了通知の他に、周期実行命令列の最初の実行命令の実行ＩＤと、その最初の実行命令がメインプログラム１００で実行された時刻と、周期実行命令列が実行されるのにかかる周期時間を送るようにする。なお、この方法を用いる場合には、解析部２２０で、メインプログラム１００の実行命令を収集する際、その時刻も記録しておく必要がある。
【００５６】
周期タイミング同期部３３０は、現在の時刻（例えばｔ１）とメインプログラム１００で最後に実行された時刻（ｔ０）及び、周期実行命令列が実行されるのにかかる周期時間（ｔｃ）から、次に実行される周期実行命令列の最初の実行命令の予測時刻（ｔｎ）を計算する。そして、周期タイミング同期部３３０は、予測時刻（ｔｎ）に、メインプログラム１００からサブプログラム２００への切り換えを行う。（Ｓ１０６）。
【００５７】
図８にメインプログラム１００からサブプログラム２００への切り換えの例を示す。図８の例だと、周期実行命令列６２０のＡが、メインプログラム１００で最後に実行された時刻ｔ０に周期時間ｔｃ加算したｔｎで、メインプログラム１００の実行を停止し、代わりにサブプログラム２００に周期実行命令列６２０の実行指示を出している。
【００５８】
周期タイミング同期部３３０が、メインプログラム１００からサブプログラム２００への切り換えを行うにあたり、プログラム起動停止部３２０を用いる方法がある。プログラム起動停止部３２０は、メインプログラム１００に対し、停止の動作指示を送る。
【００５９】
停止の動作指示を送る方法は、メインプログラム１００側に予め停止の指示を受け取るためのアプリケーションを用意しておき、プログラム起動停止部３２０から呼び出すようにしてもよいし、プログラム切り換え部３００とメインプログラム１００とで共通にアクセスできるメモリ領域を用意しておき、プログラム起動停止部３２０はこの領域の値を変更することにより、メインプログラム１００に対し、停止の動作指示を送ってもよい。
【００６０】
そして、サブプログラム２００に対し、プログラム起動停止部３２０は、更新実行指示をスケジューリング部２１０に送る。
【００６１】
更新実行指示を受け取ったスケジューリング部２１０は、実行部２４０と更新部２５０を同時に実行する。一方の実行部２４０は、格納領域２３０を参照し、周期実行命令列の実行を開始する。なお、実行部２４０は周期実行命令列の実行を繰返し実行し続ける。
【００６２】
もう一方の更新部２５０は、通信モジュール１３を介して更新プログラムをダウンロードし、メインプログラム１００の上書き更新を行う（Ｓ１０７）。更新を行っている間、ソフトウェア搭載機器１が必要とする一部の処理を実行部２４０で実行する事により、更新プログラムのために新たなメモリを必要とせず、直接メインプログラム１００に更新プログラムをダウンロードすることが可能となる。
【００６３】
更新部２５０は、更新プログラムのダウンロードが完了したのち、完了通知をプログラム切り換え部３００に送る（Ｓ１０８）。
【００６４】
完了通知を受けたプログラム切り換え部３００は、機器の停止を行い（Ｓ１０９）、ソフトウェア搭載機器１の再起動を行う（Ｓ１１０）。なお、ソフトウェア搭載機器１に接続されているデバイス１４によっては、例えば、起動時に時間を要するデバイスなどの場合、デバイス１４の動作が一旦途切れてしまうため、プログラム切り換え部３００が自動的に再起動を行わず、手動で電源スィッチ１８を操作することで再起動のタイミングを調整するようにしてもよい。
【００６５】
ソフトウェア搭載機器１が再起動したのち、プログラム切り換え部３００は、更新されたメインプログラム１００を起動する（Ｓ１１１）。
【００６６】
上記のような構成にする事により、メインプログラム１００が有する複数の機能のうち、更新中においても実行が必要な一部機能に絞ってプログラムの一部を記憶装置に複製し、使用する。そのため、複製されたプログラムは、サイズがメインプログラム１００に比べて小さくなり、ソフトウェアの更新に必要な保存領域の容量を節約することができる。また、デバイス１４に対する動作を継続しつつ、更新作業を行うことが可能となる。
【００６７】
なお、本実施の形態では、ソフトウェア配信サーバ２からソフトウェアの更新要求を受けた後に、解析部２２０が周期実行命令列の抽出を行ったが、更新要求を受ける前から周期実行命令列の抽出を行っておいてもよい。また、解析部２２０で周期実行命令列の抽出を行わず、メインプログラム１００を更新している間、ソフトウェア搭載機器１がデバイス１４を制御するのに必要な周期実行命令列を予め格納領域２３０に格納しておいてもよい。その際、周期タイミング同期手段３３０がメインプログラム１００に停止の指示を送るタイミングも併せて格納領域２３０に格納しておく。
ソフトウェア搭載機器１がデバイス１４を制御するのに必要な周期実行命令列は、工場出荷時に格納領域２３０に入れておいてもよいし、後から書き込めるようにしてもよい。また、更新部２５０がソフトウェア配信サーバ２から受け取る更新プログラムと一緒に受け取り、格納領域２３０に格納してもよい。
【００６８】
実施の形態２．
本実施の形態では、繰返し動作する処理を抽出するために、機器に接続されているデバイス１４の動作を参照した場合について説明する。
【００６９】
図９は、本実施の形態における、ソフトウェア搭載機器１上で動作するソフトウェアの全体構成図である。
【００７０】
図９において、周期出力解析部９２０はメインプログラム１００のデバイスドライバの動作を監視するソフトウェアであり、その実行順序とタイミングからその周期性を判別し、周期出力パターン抽出し、同様の周期出力を実行できる周期実行命令列を格納領域２３０に格納するものである。
【００７１】
図９において、図３と同一の符号は、同一または相当する部分を表しており、周期出力解析部９２０以外については、実施の形態１で用いた図３で記載したものと同じ動作をする。
【００７２】
次に図１０を用いて、本実施の形態２における全体動作について説明する。実施の形態１のときと同様、ソフトウェア搭載機器１が実行中に、ソフトウェア配信サーバ２からソフトウェア更新通知があった場合を例に説明する。
【００７３】
本実施の形態２における動作については、実施の形態１で述べた手順と同じであり、以下に実施の形態１で説明した動作との差異についてのみ説明する。
【００７４】
更新要求受信部３１０は、メインプログラム１００の動作状況を調べる解析指示を送る。なお、この指示は、プログラム起動停止部３２０からスケジューリング部２１０を呼び出すことで解析指示を送ることにより、実現することもできるし、また、プログラム起動停止部３２０とスケジューリング部２１０とで共通にアクセスできるメモリ領域を用意しておき、スケジューリング部２１０はこの領域をポーリングし、プログラム起動停止部３２０はこの領域の値を変更することにより、サブプログラム２００に対し、解析指示を送ることにより、実現することもできる。
【００７５】
出力の解析指示を受け取ったスケジューリング部２１０は、周期出力解析部９２０を呼び出し実行する。周期出力解析部９２０ではメインプログラム１００の解析を行う。解析を行うにあたり、周期出力解析部９２０は、メインプログラム１００で動作しているデバイスドライバ（ドライバａ〜ドライバｍ）を監視し、それらの実行順序（出力命令）とその実行時刻の記録を行う（Ｓ２０２）。
【００７６】
出力命令の情報を入手するには、デバイスの制御を行うためのデバイスレジスタが割り振られているメモリ領域をポーリングして参照する方法や、デバイスへの制御を行う際に割込みを発生させるようにデバイスドライバを設計しておき、それを周期出力解析部９２０で受け取る方法がある。
【００７７】
なお、周期出力の記録先は、周期出力解析部９２０が一時的に用意したＲＡＭ１２上のメモリ領域でも、格納領域２３０でも良い。
【００７８】
周期出力解析部９２０は、記録した周期出力を解析し、予め用意しておいた、実行命令列一覧の中から同様の周期出力を実行できる実行命令列を抽出し、周期実行命令列として、格納領域２３０に格納する（Ｓ２０３）。周期実行命令列については、実施の形態１と同じである。
なお、予め用意しておいた実行命令列は一つだけとし、これを繰り返し実行する周期実行命令列としてもよい。繰り返し実行する際には、実行命令列への引数として、時刻、書き込むメモリのアドレス、書き込む値、値を書き込んでおく時間を渡してもよい。図１１を用いて周期出力の解析について説明する。
【００７９】
図１１は本実施の形態における周期出力パターンの抽出の例を表した図である。図１１において、デバイス出力記録１１１０ａ〜１１１０ｉは、デバイス１４に対する出力パターンとその実行時刻の記録である。図１１では、実行時刻に沿って左から順に実行される様子を示している。周期出力パターン１１２０は、デバイス出力記録１１１０ａ〜１１１０ｉを解析した結果、周期的に繰り返されている出力パターンである。実行命令列一覧１１３０は、特定の出力パターンを実行するための実行命令列の一覧である。予めどのような出力命令が行われるのかを調べておき、同様の出力を行う実行命令列を用意しておく。図１１では、出力パターンαの場合の実行命令列ｆ＿Ｅ、出力パターンβの場合の実行命令列ｆ＿Ｆ、出力パターンγの場合の実行命令列ｆ＿Ｇ、出力パターンΔの場合の実行命令列ｆ＿Ｈの例を示す。
【００８０】
例えば、デバイス１４としてモーターＸとモーターＹがあったとし、モーターＸに対し１を出力すると言う状態がａミリ秒（これを出力パターンαとする）、モーターＸに対し２を出力すると言う状態がｂミリ秒（これを出力パターンβとする）、モーターＹに対し３を出力すると言う状態がｃミリ秒（これを出力パターンγとする）、出力パターンα、出力パターンβ、出力パターンγ、出力パターンα、出力パターンβ、出力パターンγ、のように、ある一定の期間、同一の繰返し出力パターンが連続して検出された場合（図１１のデバイス出力記録の例）出力パターンα、出力パターンβ、出力パターンγを周期出力パターン１１２０として抽出を行う。
【００８１】
周期出力解析部９２０は、実行命令列一覧１１３０を参照することにより、抽出された周期出力パターン１１２０を実行する為の周期実行命令列の組合せ１１４０を作成する。その後、周期出力解析部９２０は、周期実行命令の組合せ１１４０を、格納領域２３０に格納する。
【００８２】
なお、解析の対象とする一定の期間及び繰り返し出力パターンの数は、ソフトウェア搭載機器１で実行される全てのデバイスドライバがどの程度周期的に動作するのかによるため、予め統計的に調査した結果、例えば期間１００ミリ秒、出力パターン数５回などの値を与えられている条件として用いる。
【００８３】
なお、周期性を判定するためのパターン抽出アルゴリズムについては、自然情報処理などで用いられるパターン認識アルゴリズムなどのアルゴリズムを利用しても構わない。
【００８４】
また、デバイスに対するアクセス時間は、デバイスの状況（温度や湿度などの環境や、経年劣化）によって変動する場合がある。このため、例えば、上記の例であればα、β、γと言う出力パターンが守られていれば、それぞれの実行期間に対し、多少の増減があっても許容するものとする。許容の範囲は、ソフトウェア搭載機器１に接続されているデバイスによるため、予め統計的に調査した結果、例えば増減１％以内などの値が与えられている条件として用いる。
【００８５】
図１０の処理フローの説明に戻り、周期出力パターンが特定できなかった場合（Ｓ２０４：ＮＯ）、メインプログラム１００で動作しているデバイスドライバ（ドライバａ〜ドライバｍ）を監視し、それらの実行順序（出力命令）とその実行時刻の記録（Ｓ２０２）を再度行う。図１０には示していないが、実行順序と実行時刻の記録（Ｓ２０２）の繰り返しを行う際、すぐに繰返し行うのではなく、しばらく待機してから実行してもよい。しばらく待機する時間は、予め定めておいても良いし、更新プログラムとともに送られてきた値を用いるようにしてもよい。
【００８６】
周期出力パターンの特定（Ｓ２０３）ができた場合（Ｓ２０４：ＹＥＳ）、周期出力解析部９２０は、解析の完了通知をプログラム切り換え部３００に送る。解析の完了通知を受けた周期タイミング同期部３３０はメインプログラム１００からサブプログラム２００への切り換えを行う。まず、周期タイミング同期部３３０は、周期出力解析部９２０から受けた周期出力パターンの情報を基に、メインプログラム１００から実行部２４０に実行の切り換えを行うためのタイミングを算出する（Ｓ２０５）。
タイミングを算出する方法として、次の方法がある。周期出力解析部９２０が、解析の完了通知として、若しくは解析の完了通知の他に、周期実行命令列の組合せ１１４０の最初の実行命令列の実行ＩＤと、その最初の実行命令列に相当するデバイス１４の出力がメインプログラム１００で実行された時刻と、周期実行命令列が実行されるのにかかる周期時間を送るようにする。なお、この方法を用いる場合には、周期出力解析部９２０で、メインプログラム１００の出力パターンを収集する際、その時刻も記録しておく必要がある。
【００８７】
周期タイミング同期部３３０は、現在の時刻（例えばｔ１）とメインプログラム１００で最後に出力パターンが出力された時刻（ｔ０）及び、周期実行命令列の組合せ１１４０が実行されるのにかかる周期時間（ｔｃ）から、次に実行される周期実行命令列の最初の実行命令の予測時刻（ｔｎ）を計算する。そして、周期タイミング同期部３３０は、予測時刻（ｔｎ）に、メインプログラム１００からサブプログラム２００への切り換えを行う。（Ｓ２０６）。
【００８８】
図１２にメインプログラム１００からサブプログラム２００への切り換えの例を示す。図１２の例だと、周期出力パターン１１２０のαが、メインプログラム１００で最後に実行された時刻ｔ０に周期時間ｔｃ加算したｔｎで、メインプログラム１００の実行を停止し、代わりにサブプログラム２００に周期実行命令列の組合せ１１４０の実行指示を出している。
【００８９】
周期タイミング同期部３３０が、メインプログラム１００からサブプログラム２００への切り換えを行うにあたり、プログラム起動停止部３２０を用いる方法がある。プログラム起動停止部３２０は、メインプログラム１００に対し、停止の動作指示を送る。
【００９０】
停止の動作指示を送る方法は、メインプログラム１００側に予め停止の指示を受け取るためのアプリケーションを用意しておき、プログラム起動停止部３２０から呼び出すようにしてもよいし、プログラム切り換え部３００とメインプログラム１００とで共通にアクセスできるメモリ領域を用意しておき、プログラム起動停止部３２０はこの領域の値を変更することにより、メインプログラム１００に対し、停止の動作指示を送ってもよい。
【００９１】
そして、サブプログラム２００に対し、プログラム起動停止部３２０は、更新実行指示をスケジューリング部２１０に送る。
【００９２】
この指示を受け取ったスケジューリング部２１０は、実行部２４０と更新部２５０を同時に実行する。実行部２４０は、格納領域２３０を参照し、周期実行命令列の実行を開始する。なお、実行部２４０は周期実行命令列の実行を繰返し実行し続ける。
【００９３】
以降の処理については、実施の形態１で述べた手順と同じである。
【００９４】
上記のような構成にする事により、ソフトウェアの更新に必要な保存領域の容量を節約することができる。また、デバイスに対する動作を継続しつつ、更新作業を行うことが可能となる。
【００９５】
なお、本実施の形態では、ソフトウェア配信サーバ２からソフトウェアの更新要求を受けた後に、周期出力解析部９２０が周期出力パターンの抽出を行ったが、更新要求を受ける前から周期出力パターンの抽出を行っておいてもよい。
【００９６】
実施の形態３．
本実施の形態では、解析部２２０が解析した周期実行命令列６２０に対し、無処理期間を解析し、予めユーザが静的に用意した拡張処理プログラムを挿入した場合について説明する。
ユーザが静的に予め用意した拡張処理プログラムを挿入することで、周期実行命令列６２０を実行中に拡張処理プログラムを実行することが可能である。
例えばリモコンなどの外部割込の受付やＬＥＤの点滅プログラムを拡張処理プログラムとして静的に用意しておけば、周期実行命令列６２０を実行中にリモコンの受付処理やＬＥＤの点滅処理を行うことができる。
【００９７】
図１３は、本実施の形態における、ソフトウェア搭載機器１上で動作するソフトウェアの全体構成図である。
【００９８】
図１３において、拡張処理格納領域２０４０は、ユーザが静的に予め用意した拡張処理プログラムである。拡張処理プログラムは、周期実行命令列６２０を実行中に、更に実行したいプログラムであり、前述したリモコンなどの外部割込の受付やＬＥＤの点滅プログラムなどであってもよい。なお、拡張処理格納領域２０４０に用意する拡張処理プログラムは、外部記憶装置や通信モジュールを介して入手できるようにしてもよい。
【００９９】
図１３において、無処理期間抽出部２０１０は格納領域２３０に格納された周期実行命令列から無処理が連続して続く期間（無処理期間）を抽出し、無処理期間格納領域２０２０に格納するものである。
なお、本実施の形態では、無処理期間格納領域２０２０および拡張処理格納領域２０４０を格納領域２３０とは別の構成としたが、無処理期間格納領域２０２０および拡張処理格納領域２０４０に格納された内容を、格納領域２３０に格納した構成であっても良い。
【０１００】
図１３において、拡張処理分割挿入部２０３０は、無処理期間格納領域２０２０から無処理期間を参照し、拡張処理格納領域２０４０に格納された拡張処理命令列を無処理期間長で分割し、その分割数だけ周期実行命令列を複製し、複製したそれぞれの周期実行命令列に対して、分割した拡張処理命令列をその無処理期間部分に複製し、それらの拡張処理命令列を１つの周期実行命令列として格納領域２３０に格納するものである。
【０１０１】
図１３において、図３と同一の符号は、同一または相当する部分を表しており、無処理期間抽出部２０１０、無処理期間格納領域２０２０、拡張処理分割挿入部２０３０、拡張処理格納領域２０４０以外については、実施の形態１で用いた図３で記載したものと同じ動作をする。
【０１０２】
次に図１４を用いて、本実施の形態３における全体動作について説明する。実施の形態１のときと同様、ソフトウェア搭載機器１が実行中に、ソフトウェア配信サーバ２からソフトウェア更新通知があった場合を例に説明する。
【０１０３】
本実施の形態３における動作については、実施の形態１で述べた手順と同じであり、以下に実施の形態１で説明した動作との差異についてのみ説明する。
【０１０４】
無処理期間抽出部２０１０は、格納領域２３０に格納された周期実行命令列に対して無処理期間の抽出を行うものである。
無処理期間とは、アセンブラでのＮＯＰ（Ｎｏ  ＯＰｅｒａｔｉｏｎ）命令など、ＣＰＵが計算処理やレジスタにアクセスを行っていないような状況が続く期間のことを指す。
無処理期間抽出部２０１０は、この無処理期間の情報を無処理期間格納領域２０２０に格納する（Ｓ３０１）。以上の処理により、周期実行命令列において、どのタイミングで無処理なのかが分かる。
無処理期間抽出部２０１０は、無処理期間の情報を無処理期間格納領域２０２０に格納したのち、拡張処理分割挿入部２０３０を呼ぶ。
【０１０５】
拡張処理分割挿入部２０３０は、拡張処理格納領域２０３０に格納された拡張処理プログラムを、上記周期実行命令列の無処理期間にコピーし、新たな周期実行命令列として格納領域２３０に格納するものである（Ｓ３０２）。
【０１０６】
更新部２５０は、更新プログラムのダウンロードが完了したのち、格納領域２３０に格納されている周期実行命令列を確認し、割込処理に外部割込処理があるかどうか判断する（Ｓ３０３）。判断する方法は、直接周期実行命令列の内部を確認しても良いし、拡張処理分割挿入部２０３０が、周期実行命令列を更新する際、その旨を示す情報を格納領域２３０の一部に格納しても良い。
例えば、リモコンなどの外部割込により周期実行を中断して再起動したい場合、外部割込信号を受信する処理を拡張処理として定義する。
更新部２５０は、外部割込信号を受信した場合（Ｓ３０４：ＹＥＳ）、更新プログラムのダウンロード完了通知をプログラム切り替え部３００へ送り、プログラム切り替え部３００は機器の停止を行い、再起動を実施する。
外部割込信号を受信しない場合（Ｓ３０４：ＮＯ）、更新部２５０は、外部割込み信号を受け付けるまで待機する。なお、図示していないが、更新部２５０はこのままでは外部割込み信号を受け付けるまで待機し続けてしまうため、予め設定しておいた時間が経過した場合、自動的にＳ１０８へ処理を進めるようにしてもよい。
【０１０７】
図１５と図１６は本実施の形態の無処理期間抽出部２０１０における無処理期間の抽出と、無処理期間への拡張処理の追加の例を表した図である。
図１５において、実行命令列２１１０ａ〜２１１０ｍは、メインプログラム１００の実行命令を収集した実行命令列で、周期的に２１１０ｃ、２１１０ｇおよび２１１０ｋのようにＮＯＰが現れている例である。
繰り返しのパターンを抽出する方法は実施の形態１と同様で、抽出した周期実行命令列を第１の周期実行命令列２１２０とする。第１の周期実行命令列２１２０にはＮＯＰ２１２０ｎｏｐが含まれる。
【０１０８】
図１６を用いて、無処理期間抽出部２０１０が無処理期間を抽出し、拡張処理を格納する際の詳細を説明する。本実施の形態では、拡張処理格納領域２０４０に格納された拡張処理として、命令長がｔｏｐｔの拡張処理２１３０があった場合を例とする。
無処理期間抽出部２０１０は抽出した周期実行命令列２１２０から連続したＮＯＰ処理の連続期間２１２０ｎｏｐを抽出し、無処理期間格納領域２０２０に格納する。
【０１０９】
次に、拡張処理分割挿入部２０３０は、拡張処理格納領域２０４０に格納された拡張処理２１３０を参照し、無処理期間２１２０ｎｏｐとその命令長を比較する。
このとき、無処理期間２０２０ｎｏｐの命令長ｔｎｏｐよりも拡張処理２１３０の命令長ｔｏｐｔが長い場合、拡張処理２１３０をｔｎｏｐで時分割する。
例えば、時分割した拡張処理をそれぞれ拡張処理２１３１（拡１）、拡張処理２１３２（拡２）として保存したとする。
【０１１０】
次に、拡張処理分割挿入部２０３０は、周期実行命令列２１２０を複製して上記時分割数分（この場合２つ分）用意し、周期実行命令列２１４１、周期実行命令列２１４２を作成する。
そして、それぞれの周期実行命令列の無処理期間２１２０ｎｏｐに対して、拡張処理２１３１、拡張処理２１３２を複製する。なお、周期実行命令列２１４１の無処理期間２１２０ｎｏｐと拡張処理２１３１は処理時間が同一のため、ちょうどあてはまるが、周期実行命令列２１４１の無処理期間２１２０ｎｏｐと拡張処理２１３２は処理時間が一致しないため、図の例では、ＮＯＰ２１３３が余る。
【０１１１】
次に、拡張処理分割挿入部２０３０は、複製した周期実行命令列を連結し、格納領域２３０に保存する。本実施の形態の例では、周期実行命令列２１４１と周期実行命令列２１４２を連結し、一つの周期実行命令列２１５０を生成し、格納領域２３０に保存する。
【０１１２】
以降の処理については、実施の形態１で述べた手順と同じである。
【０１１３】
なお、無処理期間の抽出を行うためのパターン抽出アルゴリズムについては、自然情報処理などで用いられるパターン認識アルゴリズムなどのアルゴリズムを利用しても構わない。
【０１１４】
また、拡張処理には、ユーザの任意のプログラムを格納しても構わない。例えば、ＬＥＤを点滅させるプログラムであれば、更新プログラムのダウンロード中に製品に付随のＬＥＤを点滅させることが可能である。
例えば、リモコンの割込を受信し、再起動（リセットベクタにジャンプする）プログラムであれば、更新プログラムのダウンロード完了後に、リモコンの信号を受信し、周期実行をユーザのタイミングで停止し、再起動することが可能である。
【０１１５】
なお、拡張処理はユーザの任意のプログラムでよいが、ＯＳのシステムコールや既存ライブラリ呼出など、ＯＳや既存ライブラリに依存したプログラムであってはならない。なぜなら、周期処理は周期実行命令列のみから成り立つものであり、ＯＳなどの処理を含まないためである。
【０１１６】
上記のような構成にする事により、ソフトウェアの更新に必要な保存領域の容量を節約することができる。また、デバイスに対する動作を継続しつつ、更新作業を行うことが可能となる。また、ソフトウェアの更新中に事前に用意した任意のプログラムを実行することが可能である。
なお、上記の説明では、格納領域２３０を記憶部としたが、メインプログラム１００、サブプログラム２００、プログラム切り替え部３００を記憶する領域も合わせて記憶部としても良い。
【符号の説明】
【０１１７】
１  ソフトウェア搭載機器、２  ソフトウェア配信サーバ、３  ネットワーク、１０  ＣＰＵ、１１  ＲＯＭ、１２  ＲＡＭ、１３  通信モジュール、１４  デバイス、１５  ＬＥＤ、１６  電子ブザー、１７  タイマー、１８  電源スィッチ、１００  メインプログラム、１１０  ＯＳ、１２０ａ〜１２０ｎ  アプリケーション、１３０ａ〜１３０ｍ  デバイスドライバ、２００  サブプログラム、２１０  スケジューリング部、２２０  解析部、２３０  格納領域、２４０  実行部、２５０  更新部、３００  プログラム切り換え部、３１０  更新要求受信部、３２０  プログラム起動停止部、３３０  周期タイミング同期部、３４０  更新完了受信部、６１０ａ〜６１０ｍ  実行命令列、６２０  周期実行命令列、７０１  解析部２２０が収集した実行命令列を示す表、７０２  解析部２２０が解析を行った後に抽出された周期実行命令列を示す表、９２０  周期出力解析部、１１１０ａ〜１１１０ｉ  デバイス出力記録、１１２０  周期出力パターン、１１３０  実行命令列一覧、１１４０  周期実行命令列の組合せ、２０１０  無処理期間抽出部、２０２０  無処理期間格納領域、２０３０  拡張処理分割挿入部、２０４０  拡張処理格納領域、２１１０ａ〜２１１０ｈ  実行命令列、２１２０ｎｏｐ  無処理期間、２１３０  拡張処理命令列、２１３１  拡張処理命令列、２１３２  拡張処理命令列、２１３３  ＮＯＰ、２１４１  周期実行命令列、２１４２  周期実行命令列、２１５０  周期実行命令列。
【図１】
0006042025.tif 000002
【図２】
0006042025.tif 000003
【図３】
0006042025.tif 000004
【図４】
0006042025.tif 000005
【図５】
0006042025.tif 000006
【図６】
0006042025.tif 000007
【図７】
0006042025.tif 000008
【図８】
0006042025.tif 000009
【図９】
0006042025.tif 000010
【図１０】
0006042025.tif 000011
【図１１】
0006042025.tif 000012
【図１２】
0006042025.tif 000013
【図１３】
0006042025.tif 000014
【図１４】
0006042025.tif 000015
【図１５】
0006042025.tif 000016
【図１６】
0006042025.tif 000017