(57)【要約】  マイクロコントローラ（ＭＣＵ）のメモリ再配置のための方法および装置である。ＭＣＵは、中央処理ユニット（ＣＰＵ）およびメモリを含んでいるが、メモリ管理ユニット（ＭＭＵ）がない。その方法の一実施の形態において、第一のプログラムが、ＣＰＵによる実行のために選択される。第一のプログラムは、ＭＣＵのメモリに格納されている複数のプログラムの内の一つである。各プログラムは、位置依存命令またはデータを含んでいる。プログラムは、位置依存コードで書かれたソースコードからコンパイルされる。【選択図】      図２
2018523882.tif 000002
【特許請求の範囲】
【請求項１】
中央処理ユニット（ＣＰＵ）を備えるマイクロコントローラユニット（ＭＣＵ）で実施される方法であって、
前記ＣＰＵによる実行のための第一のプログラムを選択するステップを含み、
前記第一のプログラムは、前記ＭＣＵのメモリに同時に格納されている複数のプログラムの内の一つであり、
前記プログラムの各々は、位置依存命令を含む、方法。
【請求項２】
プログラムカウンタを所定の値に設定するステップと、
前記プログラムカウンタへの前記所定の値の設定に応じて、第一のアドレスを生成するステップと、を更に含む、請求項１に記載の方法。
【請求項３】
前記プログラムは、ロードアドレスで前記メモリに夫々格納され、前記プログラムは、アドレスオフセットに夫々マッピングされ、前記アドレスオフセットは、前記ロードアドレスに夫々対応する、請求項３に記載の方法。
【請求項４】
前記第一のプログラムを第一のアドレスオフセットにマッピングする動作を更に含む、請求項３に記載の方法。
【請求項５】
前記第一のアドレスのＸ（１以上の整数）個の最上位ビットを、所定の一組のＸビットと比較するステップと、
前記第一のアドレスの前記Ｘ個の最上位ビットと前記所定の一組のＸビットの不一致を判断するとき、前記第一のアドレスで前記メモリに格納されているＣＰＵが実行可能な命令にアクセスするステップを更に含む、請求項４に記載の方法。
【請求項６】
前記第一のアドレスの前記Ｘ（１以上の整数）個の最上位ビットと、前記所定の一組のＸビットとを比較するステップと、
前記第一のアドレスの前記Ｘ個の最上位ビットと前記所定の一組のＸビットの一致を判断するとき、前記第一のアドレスオフセットと前記第一のアドレスの関数として、修正された第一のアドレスを生成するステップと、
前記修正された第一のアドレスで前記メモリに格納されているＣＰＵが実行可能な命令にアクセスするステップと、を更に含む、請求項４に記載の方法。
【請求項７】
前記第一のアドレスオフセットと前記第一のアドレスの関数として、修正された第一のアドレスを生成するステップと、
前記修正された第一のアドレスで前記メモリに格納されているＣＰＵが実行可能な命令にアクセスするステップと、を更に含む、請求項４に記載の方法。
【請求項８】
前記プログラムカウンタを進めるステップであって、前記ＣＰＵが、前記プログラムカウンタを進めるステップに応じて、第二のアドレスを生成するステップと、
前記第一のアドレスオフセットと前記第二のアドレスの関数として、修正された第二のアドレスを生成するステップと、
前記修正された第二のアドレスで格納されているＣＰＵが実行可能な命令にアクセスするステップと、更に含む、請求項７に記載の方法。
【請求項９】
リセット信号をアサートするステップと、
前記リセット信号のアサートに応じて、第二の複数のプログラムを選択するステップと、
前記第二のプログラムを第二のアドレスオフセットにマッピングするステップと、
前記ＣＰＵが前記第一のアドレスを再び生成するステップと、
前記第二のアドレスオフセットと前記再び生成された第一のアドレスの関数として、別の修正された第一のアドレスを生成するステップと、
前記他の修正された第一のアドレスに格納されたＣＰＵが実行可能な命令にアクセスするステップと、を更に含む、請求項８に記載の方法。
【請求項１０】
前記ＭＣＵの外部のデバイスから新たなプログラムを受信するステップと、
前記新たなプログラムを、新たなロードアドレスで前記メモリに格納することであって、前記新たなプログラムは、前記メモリ内の前記複数のプログラムと同時に格納されるステップと、
前記新たなプログラムを新たなアドレスオフセットにマッピングするようデータ構造を更新するステップと、を更に含み、前記新たなアドレスオフセットは前記新たなロードアドレスに対応している、請求項４に記載の方法。
【請求項１１】
前記プログラムの内の一つは、前記プログラムの内の別の後に開発されるバージョンである、請求項１に記載の方法。
【請求項１２】
マイクロコントローラユニット（ＭＣＵ）を備える装置であって、
前記ＭＣＵは、
中央処理ユニット（ＣＰＵ）と、
前記ＣＰＵによって実行可能である複数のプログラムを格納するメモリと、
前記ＣＰＵによって生成されたアドレスを選択的に変換するアドレス変換ユニットと、
を備え、前記プログラムの各々が位置依存命令を含む、装置。
【請求項１３】
前記ＭＣＵが前記メモリに格納されているリセットプログラムを更に含み、前記リセットプログラムは、リセット信号のアサートに応じて前記ＣＰＵによって実行可能であり、前記ＣＰＵは、前記リセットプログラムの実行に応じて、前記ＣＰＵによる実行のために第一のプログラムを選択する、請求項１２に記載の装置。
【請求項１４】
前記アドレス変換ユニットは、加算器と、アドレスオフセットおよびイネーブルビットを格納するメモリと、を備え、
前記加算器は、前記イネーブルビットが第一の状態に設定されたとき、前記アドレスオフセットを前記ＣＰＵによって生成されたアドレスに選択的に加算し、
前記加算器は、前記イネーブルビットが第二の状態に設定されるときは常に前記アドレスオフセットを前記ＣＰＵによって生成されたアドレスに加算しない、請求項１３に記載の装置。
【請求項１５】
前記アドレス変換ユニットは、前記ＣＰＵによって生成されたアドレスのＸ個の最上位ビットを所定の一組のＸビットと比較する比較器を備え、
前記加算器は、前記イネーブルビットが前記第一の状態に設定され、かつ前記ＣＰＵによって生成されたアドレスの前記Ｘ個の最上位ビットが前記所定の一組のＸビットと等しいとき、前記アドレスオフセットを前記ＣＰＵによって生成されたアドレスに加算し、
前記加算器は、前記イネーブルビットが第二の状態に設定され、かつ前記ＣＰＵによって生成されたアドレスの前記Ｘ個の最上位ビットが前記所定の一組のＸビットと等しくないとき、前記アドレスオフセット、前記ＣＰＵによって生成されたアドレスに加算しない、請求項１４に記載の装置。
【請求項１６】
前記ＣＰＵが、前記プログラムに夫々対応する複数のアドレスオフセットの中から前記アドレスオフセットを選択する、請求項１５に記載の装置。
【請求項１７】
前記ＣＰＵが、前記メモリ内の前記プログラムの各ロードアドレスとリンクアドレスの関数として、前記アドレスオフセットを計算する、請求項１６に記載の装置。
【請求項１８】
マイクロコントローラユニット（ＭＣＵ）を備える装置であって、
前記ＭＣＵは、
中央処理ユニット（ＣＰＵ）と、
前記ＣＰＵによって実行可能である複数のプログラムを格納するメモリと、
前記ＣＰＵによって実行可能なリセットプログラムであって、前記ＣＰＵが、前記リセットプログラムの実行に応じて、実行のための前記プログラムの内の一つを選択する、リセットプログラムと、
を備え、前記プログラムは位置依存命令を含む、装置。
【請求項１９】
アドレス変換ユニットと、
プログラムカウンタと、を更に備え、
前記ＣＰＵが、前記リセットプログラムの実行に応じて、前記プログラムカウンタを所定の値に設定し、
前記ＣＰＵが、前記プログラムカウンタへの前記所定の値の設定に応じて、第一のアドレスを生成し、
前記アドレス変換ユニットが、前記第一のアドレスを第一の変換されたアドレスに変換し、
前記ＣＰＵが、前記第一の変換されたアドレスに格納された第一の命令を受け取り、
前記ＣＰＵが、前記第一の命令を実行し、
前記ＣＰＵが、前記第一の命令の実行に応じて、前記プログラムカウンタを進め、
前記ＣＰＵが、前記プログラムカウントを進めたことに応じて、第二のアドレスを生成し、
前記アドレス変換ユニットが、前記第二のアドレスを第二の変換されたアドレスに変換し、
前記ＣＰＵが、前記第二の変換されたアドレスに格納された第二の命令を受け取り、
前記ＣＰＵが、前記第二の命令を実行する、請求項１８に記載の装置。
【請求項２０】
前記アドレス変換ユニットが、アドレスオフセットを前記第一および第二のアドレスに加算して、前記第一の変換されたアドレスを夫々生成する、請求項１９に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
マイクロコントローラユニット（ＭＣＵ）は、集積回路上に形成された小さなコンピュータである。ＭＣＵは、電気モータ、電圧レギュレータ、事務機器、電化製品、インプラント型医療機器等の幅広い装置の埋め込み制御を実行することができる。
【０００２】
ＭＣＵは、中央処理ユニット（ＣＰＵ）と、メモリと、他の構成要素とを含んでいる。プログラムメモリは、メインプログラムと、リセットプログラム（「ブートコード」と呼ばれる場合もある）とを格納している。プログラムは、典型的には、不揮発性フラッシュメモリに格納されている。
【０００３】
プログラムは、人が読取可能なソースコードで書かれたプログラムをコンパイルすることによって得られる一連の命令を含んでいる。ＣＰＵは、要求に応じて、プログラムを終了するまで命令ごとに実行する。
【０００４】
ＭＣＵプログラムメモリは、アドレス指定可能な単位から成るアレイで構成されている。プログラムの命令およびデータは、プログラムメモリのアドレス指定可能な単位に格納されている。各命令またはデータのユニットは、そのアドレスにおいて、プログラムメモリからフェッチすることができる。
【発明の概要】
【０００５】
以下には、マイクロコントローラユニット（ＭＣＵ）のメモリ再配置のための方法および装置が開示されている。ＭＣＵは、中央処理ユニット（ＣＰＵ）およびメモリを含んでいるが、メモリ管理ユニット（ＭＭＵ）がない。その方法の一実施の形態において、第一のプログラムが、ＣＰＵによる実行のために選択される。第一のプログラムは、ＭＣＵのメモリに格納されている複数のプログラムの内の一つである。各プログラムは、位置依存命令またはデータを含んでいる。プログラムは、位置依存コードで書かれたソースコードからコンパイルされる。
【図面の簡単な説明】
【０００６】
添付図面の参照により、本発明の目的、機能および利点を、より良く理解することができる。
【図１】本発明の一実施の形態を採用した一例のＭＣＵを示すブロック図である。
【図２】本発明の一実施の形態を採用したアドレス変換ユニットを介してメモリに結合される一例のＣＰＵを示すブロック図である。
【図３】図２のアドレス変換ユニットの一実施の形態を示すブロック図である。
【図４】図２および図３のＣＰＵおよびアドレス変換ユニットの作動可能な態様を示すフローチャートである。
【図５】一例のＭＣＵのメモリに格納されているテーブルのグラフ表示である。
【発明を実施するための形態】
【０００７】
異なる図面における同じ参照符号は、類似または同一の特徴（items）を示している。
【０００８】
上述のように、ＭＣＵは、ＣＰＵと、メモリと、他の構成要素とを含んでいる。ＣＰＵは、プログラムカウント（ＰＣ）を伴うプログラムカウンタを含み、それは、実行されているプログラムの次の命令の直接または間接アドレスである。その命令の実行が始まるとすぐに、ＰＣが進められ、それは、実行すべき次の命令を指している。ＰＣは、順に進める必要はない。ＰＣは、作動しているプログラムに従って、増分を変化させる際に前または後にジャンプすることができる。
【０００９】
ＣＰＵがメインプログラムを作動させる前に、かなりの量の初期化およびハウスキーピング処理をする必要がある。幾つかの非常に重要なハードウェアは、初期化される必要がある。その場合、スタックポインタの設定および場合により不揮発性メモリから揮発性メモリへのデータのコピー等の幾つかのソフトウェア初期化を行う必要がある。メモリではデータにアクセスすることができ、場合によってはＣＰＵによって変更することができる。初期化およびハウスキーピングは、プログラムメモリに組み込まれたリセットプログラムに従って実行される。ＣＰＵは、リセット信号に応じて、リセットプログラムを作動させる。リセット信号が作動されると、ＣＰＵは、「リセットベクトル」というダイレクトメモリアドレスである０ｘ００００（十六進数）等の所定の値にそのＰＣを設定する。リセットベクトルは、ＣＰＵに、リセットプログラムをメモリ内のどこで見つけることができるかを知らせる。ＣＰＵは、ＰＣをリセットベクトルからフェッチされたアドレスに設定する。このフェッチされたアドレスは、リセットプログラムのアドレスである。
【００１０】
リセットプロセスの終了時、ＰＣは、別の所定のアドレスに設定され、そのアドレスは、メインプログラムを見つけることができる記憶場所を指し示している。このアドレスは固定され（リセットプログラムがメモリにロードされた後は変わらない）、メインプログラムリンクアドレス（以後、リンクアドレスまたはＬＫＡと呼ぶ）として知られている。リセットプログラムの終了時、ＣＰＵは、メインプログラムリンクアドレスにあるプログラムを実行し始める。この点を強調するために、二つの同一のＭＣＵに、異なる機能を実施する異なるメインプログラムがロードされる。両プログラムは、同じメインプログラムリンクアドレスで、例えば０ｘＦＦＦＥで夫々のＭＣＵに格納される。リセットプロセスの後、各ＭＣＵ内のＰＣは、０ｘＦＦＦＥに設定され、各ＭＣＵ内のＣＰＵは、０ｘＦＦＦＥに位置する夫々のプログラムの作動を開始する。
【００１１】
一般に、プログラムは、位置独立コードまたは位置依存コードで書かれている。位置独立コード（ＰＩＣ）は、相対アドレス指定を用い、一方、位置依存コード（ＰＤＣ）は、絶対アドレス指定を用いている。例示するために、ＰＩＣプログラムにおける命令は、「現在の位置から５８５バイトジャンプする」または「そのプログラムがメモリに格納されているアドレスから５７４５バイトジャンプする」のように見える。対照的に、ＰＤＣプログラムにおける同様の命令は、「アドレス０ｘＦ６Ｆ５にジャンプする」のように見える。
【００１２】
ＰＩＣプログラムは、相対アドレス指定を用いるため、ＰＩＣプログラムは、メモリ内のどこにでもロードすることができ、そこから正確に実行することができる。対照的に、ＰＤＣプログラムは、正確に作動させるために、所定のアドレス（例えばメインプログラムリンクアドレス）に格納またはロードする必要がある。命令またはデータの絶対アドレスが、メモリ管理ユニット（ＭＭＵ）によって変換される場合、ＰＤＣプログラムは、メモリ内のどこにでも格納することができる。ページメモリ管理ユニット（ＰＭＭＵ）と呼ばれる場合もあるＭＭＵは、すべてのメモリアドレスがそこを通って、主に仮想メモリアドレスから物理アドレスへの変換を実行するハードウェアユニットである。ＭＭＵは、典型的には、仮想アドレス空間を複数のページに分割し、各ページは、２のベキ乗、通常は数キロバイトのサイズを有するが、それよりもかなり大きい可能性もある。アドレスのボトムビット（ページ内のオフセット）は変わらないままである。上位アドレスビットは、仮想ページ番号である。ＭＭＵは、ページ毎に一つの「ページテーブルエントリ」を含む、「ページテーブル」と呼ばれているメモリ内テーブルを用いて、メモリ内の仮想ページ番号と物理ページ番号をマッピングする。
【００１３】
ソフトウェア開発者は、さまざまな理由で、ＰＤＣを用いてＭＣＵのプログラムを書くことを好んでいる。しかしながら、ＭＣＵが、ＭＭＵおよび仮想アドレス指定を採用することはほとんどない。リセットプログラムの終了時、ＰＣは、リンクアドレスに設定され、そして、ＣＰＵは、どんなプログラムがそこで見つかるかの実行を開始する。その結果、正しく作動させるために、ＭＣＵのためのメインプログラムを、リンクアドレスにおけるメモリにロードする必要がある。ＭＣＵ内のメモリは、単一の物理アドレスを有しているにすぎない（仮想アドレス指定を有していない）ため、二つのメインプログラムを同じリンクアドレスでロードすることができない。この状況により、同じ「メインプログラム」の二つのバージョンが同時にＭＣＵにロードされるのを妨げている。
【００１４】
本発明は、ＰＤＣで書かれたメインプログラムを、任意のプログラム記憶場所にロードし、その後、この記憶場所から適切に実行できるようになっている装置および方法に関する。本発明を用いることの結果として、ＭＣＵメモリは、ＰＤＣで書かれた多数のメインプログラムを格納することができる。この利点およびその他の利点は、以下に十分に説明する。
【００１５】
ＭＣＵは、異なるアーキテクチャを有している。しかしながら、一般に、ＭＣＵは、ＣＰＵと、リセットプログラムおよび少なくとも一つのメインプログラムを格納するプログラムメモリと、を含んでいる。本発明では、ＭＭＵがないＭＣＵに関して説明する。図１は、本発明の一実施の形態を採用した一例のＭＣＵの幾つかの構成要素を示している。
【００１６】
ＭＣＵ１００は、リセットプログラムまたはメインプログラムの命令を実行するＣＰＵ１０２を含んでいる。フラッシュメモリ１０４は、ＰＤＣで書かれた幾つかのメインプログラムを格納している。コンピュータシステム（図示せず）は、後のフラッシュメモリ１０４への格納のために、メインプログラムを通信リンクを介してＭＣＵ１００へ送信する。また、ＭＣＵ１００は、一時データを格納するために、ＣＰＵ１０２が利用することができる少量のＲＡＭ１１０も含んでいる。ＣＰＵ１０２は、フラッシュメモリ１０４にアクセスして、プログラム命令またはプログラムデータを読み取ることができる。ＲＡＭ１１０は、汎用レジスタを含み、その内の少なくとも一つは、プログラムに含まれているデータのアドレスを格納するのに用いることができる。
【００１７】
ＭＣＵ１００は、以下に十分に記載されているように、プログラム命令のためのプログラムカウント（ＰＣ）を変換することができるアドレス変換ユニット（ＡＴＵ）１１２を含んでいる。ＡＴＵ１１２は、以下に十分に記載されているように、プログラムデータのアドレスを変換することもできる。各メインプログラムは、同じリンクアドレスＬＫＡから動作するように設計されているが、ＡＴＵ１１２は、多数のメインプログラムを、メモリ１０４内の異なる記憶場所から作動できるようになっている。
【００１８】
ＭＣＵ１００は、一つ以上の比較器１１４を含み、それらの各々は、二つの入力ディジタル値を比較するように、ＣＰＵ１０２によって構成されている。ＣＰＵ１０２および比較器１１４は、ディジタルデータを解釈または処理するように構成され、したがって、それらは、例えばＭＣＵ１００の外部のデバイスから受信したアナログ信号に関して何もすることができない。ＡＤＣ１１６は、アナログ信号を、ＣＰＵ１０２またはディジタル比較器１１４が認識できる形式に変換することができる。また、ＭＣＵ１００は、ＭＣＵの外部のデバイスを制御するためのアナログ信号をＭＣＵ１００が出力することを可能にするディジタル・アナログ変換器（ＤＡＣ）１２０も含んでいる。
【００１９】
汎用非同期送受信回路（Ｕｎｉｖｅｒｓａｌ  Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｒｅｃｅｉｖｅｒ／Ｔｒａｎｓｍｉｔｔｅｒ：ＵＡＲＴ）ブロック１２２は、ＭＣＵ１００が、ＣＰＵ１０２に対して非常に小さな負荷で、新たなメインプログラムを通信リンクを介して受信することを可能にしている。新たなメインプログラムは、フラッシュメモリ１０４に格納することができる。ＵＡＲＴまたはＭＣＵ１００の別の構成要素は、ＵＡＲＴが新たなメインプログラムを受信した後、リセット信号をアサートする（アクティブな状態にする）ことが可能である。リセット信号は、アサートされたとき、そのリセットプログラムを起動するようにＣＰＵ１０２に指示する。上述したように、新たなメインプログラムを含む、フラッシュメモリ１０４に格納されている幾つかのメインプログラムの内の一つは、後の実行のためのリセットプロセスの間に選択される。
【００２０】
ＭＣＵ１００は、タイマーチャネル１２４を含んでいる。タイマーチャネルは、コンペア／キャプチャユニット、パルス幅変調（ＰＷＭ）ユニット等の一つ以上の機能ユニットを含む回路である。ＭＣＵのタイマーチャネルのすべてが同一とは限らない。ＭＣＵの幾つかのタイマーチャネルは、コンペア／キャプチャユニットのみを含んでもよいが、ＭＣＵの他のタイマーチャネルは、ＰＭＷユニットを含んでいる。ＭＣＵのさらに他のタイマーチャネルは、コンペア／キャプチャユニットおよびＰＷＭユニットの両方と、他の機能ユニットを含んでもよい。タイマーチャネルは、通常ｎビットのカウンタ値（以後、カウンタ値）を格納する少なくとも一つのｎビットカウンタレジスタ（以後、カウンタレジスタ）を含んでいる。カウンタレジスタは、クロック信号のパルスまたはイベント信号のパルスをカウントする。換言すると、カウンタレジスタは、クロック信号の各パルスまたはイベント信号の各パルスによって、そのカウンタ値をインクリメントまたはデクリメントする。殆どのカウンタレジスタの場合、カウンタ値は、その最大値に達した後、ゼロまでオーバーフローする。クロックパルスは、典型的には、ＭＣＵの内部または外部にあるクロックジェネレータによって生成される。タイマーチャネル内のスカラーユニットは、クロック信号の周波数を調整することができる。イベントパルスは、ＭＣＵの内部または外部にあるデバイスによって生成される。イベントパルスは、対応するイベントに伴って生成される。例えば、ＭＣＵ内部の比較器が二つの入力値が等しいことを検出した場合、イベントパルスを生成することができる。また、ＭＣＵは、外部デバイスの磁気センサが一定の強度の磁界を検出したとき、そのセンサによって生成されたイベントパルスを受け取ってもよい。
【００２１】
ウォッチドッグタイマーチャネル１２６は、ＭＣＵの誤作動を検出して、その誤作動から回復するために用いられる特別なタイマーチャネルである。ウォッチドッグタイマーチャネル１２６は、クロック信号のパルスをカウントする少なくとも一つのカウンタレジスタを含んでいる。通常の動作中、ＣＰＵ１０２は、ウォッチドッグカウンタ値を定期的にリスタートさせて、カウンタ値が、その最大値に達することを防いでいる。ハードウェアの不具合またはプログラムエラーにより、ＣＰＵ１０２が、ウォッチドッグカウンタ値をリスタートすることができない場合、ウォッチドッグタイマーチャネル１２６がリセット信号をアサートし、そのリセットプログラムを起動するようにＣＰＵ１０２に指示することになる。
【００２２】
引き続き図１を参照する。ＭＣＵ１００は、イベントリンクコントローラ（ＥＬＣ）１２８を含んでいる。ＥＬＣ１２８は、内部で生成されたイベント信号ＩＥ１−ＩＥＭを、通信システムを介して比較器１１４、ＡＤＣ１１６、タイマーチャネル１２４等の構成要素から受信する。ＥＬＣ１２８は、通信システムを介した一つ以上の構成要素への送信のための、内部で生成されたイベント信号ＩＥ１−ＩＥＭのサブセットＥ１−ＥＮを選択するＣＰＵ１０２によって構成することができる。
【００２３】
Ｉ／Ｏシステム１２８は、複数のＩ／Ｏピン１３０を含み、それらのピンの内の幾つかは、ＣＰＵ１０２によって入力状態または出力状態に構成することができる。Ｉ／Ｏピンが入力状態になっている場合、それらは多くの場合、ＭＣＵ１００の外部のデバイスによって生成された信号を読み取るのに用いられる。入力状態に構成されたＩ／Ｏピン１３０は、本願明細書においては、入力ピン１３０と呼ぶことにする。Ｉ／Ｏピン１３０−１は、入力ピンとして構成され、外部で生成されたリセット信号を受信するように構成されている。ＭＣＵ１００の外部のデバイスが、ピン１３０−１においてリセット信号をアサートしたとき、ＣＰＵ１０２は、そのリセットプログラムを起動する。出力状態においては、Ｉ／Ｏピン１３０は、ＭＣＵの外部のデバイスを駆動することができる。
【００２４】
出力状態に構成されたＩ／Ｏピン１３０は、本願明細書においては、出力ピンと呼ぶことにする。構成要素１０２〜１３０は、通信システム１３２を介して互いにデータ通信している。図示されてはいないが、通信システム１３２は、一つ以上のバス、信号ライン、および制御値、データ、信号、アドレス、命令等を送信するように構成されている他のデバイスの形態をとっている。
【００２５】
引き続き図１を参照する。図２は、プログラムメモリ２０２およびＡＴＵ１１２とデータ通信しているＣＰＵ１０２の一実施の形態を示している。図示されている実施の形態において、プログラムメモリ２０２は、フラッシュメモリ１０４の論理的プレゼンテーションである。プログラムメモリ２０２は、アドレス指定可能なユニットから成るアレイに分けられている。データとプログラムの命令は、メモリのアドレス指定可能なユニットに格納される。したがって、各データユニット命令を、メモリ２０２内の対応するアドレスからフェッチすることができる。
【００２６】
図２は、メモリ２０２の構成を示している。具体的には、リセットベクトルが、アドレス０ｘ００００に格納されている。リセットベクトルは、アドレスＲＳＬＡにロードされているリセットプログラムを指している。個々のメインプログラムＰ１〜Ｐ４は、アドレスＰ１ＬＡ〜Ｐ４ＬＡに夫々ロードされている。一実施の形態において、ロードアドレスＰ１ＬＡとリンクアドレスＬＫＡは同一である。別の実施の形態では、ＬＫＡは、プログラムメモリ２０２のメモリ空間の外部にある。また、プログラムＰ１〜Ｐ４は、リンクアドレスＬＫＡでメモリ内に夫々ロードされるという仮定の下で、ＰＤＣで書かれることに留意されたい。換言すると、Ｐ１〜Ｐ４が展開された場合、リンクアドレスＬＫＡから作動されないことに関する特別な考慮はなかった。
【００２７】
ＣＰＵ１０２は、命令デコーダ２０６に結合された演算論理装置（ＡＬＵ）２０４と、プログラムカウンタ２１０と、制御論理２１２と、を含んでいる。命令デコーダ２０６と制御論理２１２は、メモリ２０２からフェッチされた命令を復号して実行する。ＡＬＵ２０４は、レジスタ（図示せず）に含まれているデータに関して演算動作および論理動作を実行する。ＡＬＵ２０４は、ＣＰＵ１０２の心臓部である。プログラムカウンタ２１０は、フェッチされて実行される次の命令の直接または間接アドレスであるＰＣを維持する。いったん命令が実行されると、ＰＣは進められる。ＣＰＵ１０２は、ＲＡＭ１１０の汎用レジスタにデータアドレス（ＤＡ）を書き込むことができる。それらのアドレスは、プログラムに含まれているデータを指している。図面は、ＣＰＵ１０２およびＡＴＵ１１２を別々のユニットとして示しているが、代替的な実施の形態では、ＡＴＵ１１２は、ＣＰＵ１０２のサブユニットであってもよい。
【００２８】
ＰＣは、実行される次の命令の直接または間接アドレスである。ＤＡは、フラッシュメモリ１０４内のプログラムのデータの直接または間接アドレスである。一実施の形態において、ＰＣまたはＤＡは、それが特定の範囲のアドレスに含まれている場合には間接的と見なされる。例えば、ＰＣまたはＤＡは、特定のビット（９つの最も重要なビット）が所定の二進値（例えば００００００１００）に等しい場合、間接アドレスである。間接アドレスの場合、ＡＴＵ１１２は、ＰＣまたはＤＡを直接アドレスに変換する。ＰＣに対応する命令がフェッチされて実行された後、ＰＣは、実行されているプログラム（例えばリセットプログラムまたはメインプログラム）に従って進む。ＤＡに対応するデータがフェッチされて処理された後、ＣＰＵ１０２は、ＧＰＲ内のＤＡの値を変更することができる。
【００２９】
ＰＣまたはＤＡが変換されるか否かに関わらず、ＡＴＵ１１２は、次の命令またはプログラムデータの直接または物理アドレスＰＡを出力する。ＰＣが直接アドレスであると判断された場合、ＰＡ＝ＰＣである。ＰＣが間接アドレスであると判断された場合、ＰＡ＝ｆ（ＰＣ）である。言い換えると、ＰＣが間接アドレスであると判断された場合、ＰＡはＰＣの関数として生成される。同様に、ＤＡが直接アドレスであると判断された場合、ＰＡ＝ＤＡである。ＤＡが間接アドレスであると判断された場合、ＰＡ＝ｆ（ＤＡ）である。一実施の形態において、ＰＡは、ｍビットのアドレスオフセットＡＯをＰＣまたはＤＡに加えることによって生成することができる。ｍビットのＡＯを、ＰＣまたはＤＡの最下位のｍビット、またはＰＣまたはＤＡの中間のｍビットに加えることができる。別の実施の形態では、ＰＡは、アドレスオフセットＡＯをＰＣまたはＤＡに加えた後、その結果の上位ビット（例えば９ビット）を、所定の二進値（例えば０００００００００）と置き換えることによって生成することができる。後者の実施の形態は、リンクアドレスＬＫＡが、メモリ２０２のアドレス空間の範囲外にある場合に用いることができる。ＰＣまたはＤＡが直接アドレスであるか間接アドレスであるかに関わらず、ＰＣに対応する命令またはＤＡに対応するデータがメモリ２０２からフェッチされる。以下に十分に説明するように、ＣＰＵ１０２は、リセットプロセス中に、ＡＯの候補リストから選択される。ＣＰＵ１０２は、後の実行のためにメインプログラムＰ１〜Ｐ４の内の一つを選択した後、ＡＯを選択する。
【００３０】
図３は、一例のＡＴＵ１１２の関連する構成要素をブロック図の形式で示している。ＡＴＵ１１２は、以下に十分に説明されているように、リセットプロセス中に、ＣＰＵ１０２によって選択されたｍビットのＡＯを受け取って格納するＡＯレジスタ３０２を含んでいる。また、ＡＴＵ１１２は、ｙビット範囲の値Ｒを受け取って格納する。比較回路３１０は、Ｒを用いて、ＰＣまたはＤＡが直接アドレスであるか間接アドレスであるかを判断する。一実施の形態において、ＰＣまたはＤＡの最上位のｙビットがＲと等しい場合、ＰＣまたはＤＡは、変換すべき間接アドレスである。例えば、Ｒ＝００００００１００（二進値）の場合、００００００１００（二進値）で始まるすべてのＰＣまたはＤＡは間接アドレスである。
【００３１】
加算器３０６は、ｎビットを有するオフセットＡＯおよびＰＣまたはＤＡを受け取る。ＡＯは、ｎよりも小さいｍビットを有している。加算器３０６は、ｎビットを有する、変換されたＰＣ（ＴＰＣ）または変換されたＤＡ（ＴＤＡ）を生成する。加算器３０６は、図示されている実施の形態において、ｍビットのＡＯを、ＰＣまたはＤＡの最下位のｍビットに加えることによって、ＴＰＣまたはＴＤＡを生成する。例えば、ＡＯ＝４４２２３８０（十六進値）およびＰＣ＝２００１０００（十六進値）である場合、ＡＯ＋ＰＣ＝ＴＰＣ＝２４２３３８０（十六進値）である。別の実施の形態では、ｍビットのＡＯが、ＰＣまたはＤＡの中間のｍビットに加えられる。実行されているプログラムのリンクアドレスＬＫＡが、メモリ２０２のアドレス空間の外部にある場合、加算器３０６と、セレクタ３１２の入力との間に追加的な回路が挿入される。この追加された回路は、ＴＰＣまたはＴＤＡの最上位のｚビットを所定の値（例えば、０００００００００  二進値）に設定する。しかしながら、あくまで説明のためであるが、本発明は、セレクタ３１２に一つの入力として直接供給された加算器３０６の出力ＴＰＣまたはＴＤＡとなるように、追加された回路がない場合について記載されている。ＰＣまたはＤＡは、セレクタ回路３１２に他の入力として供給される。セレクタ３１２は、ＰＣまたはＤＡの何れかを、ＣＰＵ１０２によって実行される次の命令のためのＰＡとして選択し、または、セレクタ３１２は、ＤＡまたはＴＤＡを、メモリ２０２からのデータのための次のＰＡとして選択する。その選択は、比較回路３０４によって実行される比較に基づいている。比較回路３１０が、Ｒと、ＰＣまたはＤＡの最上位のｙビットが等しいことを検出した場合、ＰＣまたはＤＡは間接アドレスであり、セレクタ３１２は、ＴＰＣまたはＴＤＡを次の命令またはデータのためのＰＡとして選択する。比較回路３１０がＲとＰＣまたはＤＡのｙビットとが等しいことを検出しない場合、ＰＣまたはＤＡは直接アドレスであり、セレクタ３１２は、ＰＣまたはＤＡを次の命令またはデータのためのＰＡとして選択する。
【００３２】
ＣＰＵ１０２は、ウォッチドッグタイマー１２６または入力１３０−１等の多くの異なるソースの内の何れか一つから、作動されたリセット信号を受け取ることができる。この作動されたリセット信号を受け取ったとき、ＣＰＵ１０２は、そのリセットプログラムを実行する。リセットプロセス中に、ＣＰＵ１０２は、後の実行のために、メインプログラムＰ１〜Ｐ４の内の一つを選択する。図４は、リセット信号に応じてＣＰＵ１０２によって実施されるプロセスの関連する態様を示すフローチャートである。
【００３３】
図４に示すプロセスは、リセット信号によって始まる。ステップ４０４において、ＣＰＵ１０２は、そのＰＣをリセットベクトルに関連する所定のアドレスに設定する。説明のため、所定のアドレスは、０ｘ００００（十六進値）である。レジスタ３０４のＲが、００００００１００（二進値）に設定されていると仮定すると、ＰＣ＝０ｘ００００が直接アドレスになるように比較回路３１０によって決定される。その結果、セレクタ３１２は、加算器３０６によって生成されるＴＰＣに関係なく、リセットベクトルのためのＰＡとしてＰＣ＝０ｘ００００を選択する。リセットプログラムのロードアドレスを含むリセットベクトルは、メモリ２０２からフェッチされる。ＣＰＵ１０２がリセットベクトルを受け取るとき、ＣＰＵ１０２は、ステップ４０６において、そのＰＣをＲＳＬＡ、すなわちリセットベクトルのロードアドレスに設定する。ステップ４０８において、リセットプログラムの実行が開始される。ＲＳＬＡとリセットプログラムの命令またはデータのためのすべてのアドレスは直接アドレスである（すなわち、９つの最上位ビットは、００００００１００という二進値に設定されない）。その結果、セレクタ３１２は、リセットプログラムのすべての命令またはデータのためのＰＡとしてＰＣまたはＤＡを選択する。
【００３４】
リセットプロセス中に、ＣＰＵ１０２は、ステップ４１０に示すように、後の実行のために、メインプログラムＰ１〜Ｐ４の内の一つを選択する。その選択は、多数の要因の内の何れか一つに基づくことができる。例えば、新たなプログラムＰｎｅｗがメモリ２０２にロードされたためにリセットプログラムが作動された場合、ＣＰＵ１０２は、Ｐｎｅｗを選択することになる。別の実施の形態では、ＣＰＵ１０２は、プログラムＰ１〜Ｐ４の各々に関する履歴実行データ（図示せず）を維持してもよい。例えば、ＣＰＵ１０２は、プログラムの実行が誤作動を生じた回数をカウントして格納することができる。この情報から、ＣＰＵ１０２は、誤作動が最小限であってプログラムを選択してもよい。別の実施の形態では、ＣＰＵ１０２は、時刻、曜日または通日に基づいて、プログラムＰ１〜Ｐ４の内の一つを選択してもよい。代替的な実施の形態では、ＣＰＵ１０２は、リセットプロセスの前に、外部のデバイスから命令を受信してもよい。この命令は、次のリセットプロセスに対して実行されるプログラムを識別することができる。追加的または代替的なプログラム選択基準をリセットプログラムに書き込むことができる。
【００３５】
図示されていないが、各メインプログラムＰ１〜Ｐ４のヘッダは、ダウンロード時にメモリ２０２に形成される。各ヘッダは、その対応するメインプログラムの識別子Ｐｘを含むことができ、ただし、ｘは整数である。追加的な情報をヘッダに含ませてもよい。例えば、ヘッダは、メインプログラムＰｘの長さ、メインプログラムのバージョン番号、Ｐｘのメモリ２０２内のロードアドレスＰｘＬＡ、およびロードアドレスＰｘＬＡとリンクアドレスＬＫＡの関数として計算されたアドレスオフセットＡＯｘ等を含んでもよい。一つの実施の形態において、ＡＯｘは、ロードアドレスＰｘＬＡからリンクアドレスＬＫＡを減算することによって計算することができる。図示されている実施の形態において、ＡＯ１は、Ｐ１ＬＡ−ＬＫＡ＝０ｘ００００（十六進値）になり、また、ＡＯ２は、Ｐ１ＬＡ−ＬＫＡ等になるはずである。リセットプロセス中に、ＣＰＵ１０２は、プログラムヘッダのためにメモリ２０２を走査して、そこから関連する情報を抽出することができる。例えば、ＣＰＵ１０２は、プログラム識別のためのプログラムヘッダおよび対応するアドレスオフセットを走査することができる。いったん識別されると、それらの値は、メモリ２０２内のテーブル（図示せず）にマッピングすることができる。図５は、アドレスオフセットＡＯをプログラム識別にリンクまたはマッピングする一例のテーブルを示している。リセットプロセス中に、ＣＰＵ１０２は、ステップ４１０において、このテーブルにアクセスして、上述した選択基準に従って、実行のためのプログラムを選択することができる。
【００３６】
いったんメインプログラムが選択されると、ＣＰＵ１０２は、図６に示すテーブルにアクセスして、選択したプログラムを、その対応するアドレスオフセットＡＯにマッピングする。ＣＰＵ１０２は、ステップ４１４に示すように、このアドレスオフセットＡＯをオフセットレジスタ３０２に格納する。説明を容易にするために、プログラムＰ３が実行のために選択され、その結果、ＣＰＵ１０２は、ＡＯ３をレジスタ３０２に格納する。リセットプログラムは、リセットプログラムの命令に従ってＣＰＵ１０２を初期化することを継続する。リセットプロセスの終了時、ＣＰＵ１０２は、そのＰＣをリンクアドレスＬＫＡに設定する。
【００３７】
リンクアドレスＬＫＡは、Ｒによって決まるアドレスの範囲内にある。したがって、このようなＬＫＡは間接アドレスである。ＡＴＵ１１２は、ＬＫＡを変換する。具体的には、セレクタ３１２は、ＰＣ＝ＬＫＡを、Ｐ３の第一の命令のためのＰＡとして選択しない。その代わりに、セレクタ３１２は、ＴＰＣ＝ＬＫＡ＋Ｐ３ＡＯをＰＡとして選択し、また、ＣＰＵ１０２は、ＬＫＡ＋Ｐ３ＡＯで始まるメモリ２０２内の命令の実行を始める。その後、ＰＣは、命令が実行された後、そのＰＣを進める。例えば、ＣＰＵ１０２は、ＰＣ＝ＰＣ＋２に設定する。この新たなＰＣおよびすべての後のＰＣ値は、Ｒによって決まるアドレスの範囲内に入るはずである。したがって、ＰＣは、Ｐ３の実行中に継続的に変換される。換言すると、セレクタ３１２は、ＴＰＣを、Ｐ３のすべての命令のためのＰＡとして選択する。ＣＰＵ１０２は、ステップ４２４において、リセット信号が作動されるまで、Ｐ３、すなわち、図示されている一例において選択されたプログラムを作動し続ける。
【００３８】
本発明を幾つかの実施の形態に関して説明したが、本発明は、本願明細書に記載されている特定の構成に限定されることは意図されていない。それどころか、添付クレームによって定義される本発明の範囲内に合理的に含まれる可能性がある代替例、変更例および等価物をカバーすることが意図されている。
【図１】
2018523882.tif 000003
【図２】
2018523882.tif 000004
【図３】
2018523882.tif 000005
【図４】
2018523882.tif 000006
【図５】
2018523882.tif 000007
【国際調査報告】
2018523882.tif 000008
2018523882.tif 000009
2018523882.tif 000010