(57)【特許請求の範囲】
【請求項１】
局所アドレス指定用の下位アドレスフィールド及び拡張アドレス指定用の少なくとも一つの任意の上位アドレスフィールドを用いることにより、ＲＯＭ及びＲＡＭ両方のメモリファシリティ、プロセッシングファシリティ並びにこれらメモリファシリティ及びプロセッシングファシリティを相互接続するためのバスファシリティを持つマイクロコントローラ内で複数フォーマットアドレス指定を実行する方法において、
セグメントアドレスとして第１のアドレス指定フォーマット内に、及び、ＲＡＭ／ＲＯＭ選択ビットを含有するように第２のアドレス指定フォーマット内に、前記上位アドレスフィールドを設け、
前記第１のアドレス指定フォーマットは、高位有効８ビットセグメントフィールドを含み、前記第２のアドレス指定フォーマットは、いずれか１ビットが前記ＲＡＭ／ＲＯＭ選択ビットである高位有効８ビットを含み、
それぞれ相互に排他的なフィールド内にＲＡＭ／ＲＯＭ選択ビット及びセグメントアドレスを含有するように第３のアドレス指定フォーマット内に前記上位アドレスフィールドを設け、前記第３のアドレス指定フォーマットは、前記高位有効８ビットセグメントフィールド、及び、いずれか１ビットが前記ＲＡＭ／ＲＯＭ選択ビットである前記高位有効８ビットの両方を含むことを特徴とする方法。
【請求項２】
請求項１に記載の方法を用いるように構築されるマイクロコントローラ。
【発明の詳細な説明】
背景技術
本発明は、局所アドレス指定用の下位アドレスフィールド及び拡張アドレス指定用の少なくとも一つの任意の上位アドレスフィールドを用いることにより、ＲＯＭ及びＲＡＭ両方のメモリファシリティ、プロセッシングファシリティ並びにこれらメモリ及びプロセッシングファシリティを相互接続するためのバスファシリティを持つマイクロコントローラ内で複数フォーマットアドレス指定を実行する方法に関する。多くの標準タイプのマイクロコントローラは、１６ビットのアドレス空間を使用する。しかしながら、今日の傾向として、このアドレス空間を拡張する必要性が視られる。インテルコーポレーション（Intel Corporation）が、二つのアドレタイプ、すなわち、８ビットセグメントアドレスを含む複合アドレスとは異なるような、１６ビットのいわゆる近アドレス（near-address）と、他の１６ビットの下位有効アドレス（low-significance bit）とを識別するいわゆるタイプポインタを導入することによりこの問題を解決している。これに関する有効な参考文献は、1991年Intel Santa Clara CAで発行されたiC-86/286/386 Compiler User’s Guide for VAX/VMS Systems（4-18/19頁及び4-29〜4-39頁）である。この機構を用いて、種々の異なるメモリ構造及びメモリサイズをアドレス指定することができるが、ＲＯＭ及びＲＡＭの識別が、種々の異なるステップ及び種々の異なるアドレス解釈を必要とする。例えば、4-29頁は、満足させなければならない少なくとも９個の異なるケースを列挙している。さらに、この機構は、組込システムにおけるプログラミングに関してはそれ程魅力的ではない。なぜなら、アドレス指定データＲＡＭとプログラムＲＯＭとの違いが直ぐに明らかではなく、ところが、とりわけ組込システムはこれら二つのカテゴリーの点在されるストリング（interspersed string）を頻繁に使用するからである。
インテルのセットアップによれば、二つの連続するセグメント間のヘッダアドレスの変位がその前のセグメントの長さよりも短くなるという、セグメントを相互にオーバーラップすることができるであろうことに注意されたい。以下の開示で教示するように、本願発明は、この複雑なフィーチャーでさえ満足させることができる。
発明の概要
従って、とりわけ、本願発明の目的は、アドレス指定プログラムとアドレス指定データとを識別すると共に、小さなプログラム範囲と大きなプログラム範囲とをアドレス指定することもできる、基本マイクロコントローラ用の複数フォーマットアドレス指定機構を提供することにある。ここで、本願第１の発明によれば、セグメントアドレスとして第１のアドレス指定フォーマット内及びＲＡＭ／ＲＯＭ選択ビットを含有するように第２のアドレス指定フォーマット内に前記上位アドレスフィールドを設けることを特徴とする。本願発明者は、このようにマイクロコントローラのプログラミングが、より長いアドレスを必要とする他の環境において使用するためにあるアドレスをあたかもプロモーションすることができるという点でかなりフレキシブルであることを見つけた。
有利には、前記方法は、それぞれ相互に排他的なフィールド内にＲＡＭ／ＲＯＭ選択ビット及びセグメントアドレスを含有するように第３のアドレス指定フォーマット内に前記上位アドレスフィールドを設ける。このように、４個の異なるアドレス指定フォーマットを、全ての異なるケースに対してその様にコピーするために共に使用することができる。
有利には、前記ＲＡＭ／ＲＯＭ選択ビットは、直線的アドレス拡張と基本情報ユニットを共用する。セグメンテーションを実施することなしにさえ、このフィーチャーは大規模アドレス空間を可能にする。
有利には、前記方法は、*_smallポインタを*_bigポインタにプロモーションするためのプロモーションファシリティを持つ。ここで、アスタリスク＊は、ＲＡＭ及びＲＯＭのどちらに関しても良いことを指示している。このプロモーションは、以下の第３図を参照してより包括的に述べられるように、タイピングシステムにより支援される。とりわけ、このプロモーションは、自動的になされ、故に、プログラミングはこれに関し特定のインストラクションを必要としない。
本発明はまた、上述の方法を実施するように構築されるコンパイラプログラムにも関する。本発明はまた、上述の方法及び／又はコンパイラを用いるように構築されるマイクロコントローラにも関する。それ自体、コンパイラは、情報技術において共通ファシリティである。単一コンパイリング環境内で上記で列挙されたポインタフォーマットの並列規定（side by side provision）は、無矛盾の単純化により効率を相当まで上昇させる。本願発明者の知識に、フォーマットの範囲を予め組合わせることは今まで無かったが、該範囲は常に相互識別及び別個の環境で扱われていた。上述のフィーチャーを使用することができるマイクロコントローラは複雑なエンハンスドファシリティを必要としないが、より長いアドレス指定の場合にエクストラレジスタを割当てることのみすべきであり、また上述に従うＲＡＭ／ＲＯＭ選択ビットを認識するためのフィーチャーが二つの異なる位置に存在しても良い。しかしながら、これらは、アドレスワードのヘッドからの同一変位で位置されても良い。
本願の他の有利な特徴が縦続請求項に列挙されている。
【図面の簡単な説明】
本願発明のこれらの及び他の特徴を、以下の好ましい実施例の開示を参照して、とりわけ添付の図面を参照してより詳細に説明する。
第１図は、組込マイクロコントローラを示す。
第２図は、解を結合するために用いられる４個のフォーマットを示す。
第３図は、種々のポインタフォーマット間の相互接続及びプロモーションモードを示す格子を示す。
好ましい実施例の詳細な説明
第１図は、組込マイクロコントローラ２０を示している。その詳細な構造は慣用技術を考慮に入れている。前記マイクロコントローラの一般的なサブシステムは、主にデータを記憶するためのランダムアクセスメモリ２２、主にプログラムまたはコードを記憶するためのリードオンリーメモリ２４、プログラミング命令の制御の下データを処理するプロセッサファシリティ２６、相互接続３４上の外部世界と情報通信を行うためのＩ／Ｏファシリティ２８である。上記サブシステムは、バスファシリティ３２により相互接続されている。この集積電子構造は、ブロック３０により記号化されている他の電子処理手段を含んでいる。テレビジョンアプリケーションにおいては、これは大きなビデオＲＡＭであり得るが、多くの他のインスタンスが実行可能であろう。それ自体、ブロック３０の要素は、本願発明の部分をなさない。以下の実施例において、種々のサブシステムの間で通信される最少のアイテムは８ビットバイトであるが、無論情報細分性の種々の他のサイズも実施可能である。
第２図は、本発明による最も包括的な実施例において種々の解を連結するために使用される４個の異なるアドレスフォーマットを示している。フォーマットＡ４０は、６４ｋの種々のアドレスの局所アドレス指定用の単一フィールドを持つ直線１６ビットの下位アドレスである。フォーマットＢ４２は、前記と同一の１６ビットの下位アドレスフィールドを持つ。さらに、このフォーマットは、８ビットの高位有効ビットを持ち、該８ビットの１ビット（図では、最上位ビットであるが、一般的にこれにはそれ程強い要求はない）がデータＲＡＭとプログラムＲＯＭとを識別する。それ自体、ＲＡＭ及びＲＯＭの別個のアドレス指定は、慣用的にハーバードアーキテクチャと呼ばれる。原則的に、このバイトの残りを使用せずに残しておいても良いが、図示のような他の例では、その次位７ビットが、各々が全体で６４ｋのアドレスを含むことができる多数の種々のアドレス空間をアドレス指定するために収容しても良い。フォーマットＣ４４は、同様に前記と同一の１６ビットの低位アドレスフィールドを持つが、２５６個の種々のセグメントをアドレス指定することができる高位有効８ビットセグメントフィールドをさらに持つ。フォーマットＤ４６は、第１にＲＡＭ／ＲＯＭ識別ビット、第２に７ビットの拡張アドレス指定用の任意空間、次いで８ビットセグメントアドレス及び最後に前記の１６ビット低位アドレスを持つという全ての上記ファシリティが接続している。先のように、このＲＡＭ／ＲＯＭ識別は他のビットによりなされても良い。
ポインタのプロモーション可能性（pointer of promotability）
これら４個のポインタを用いて、我々はポインタのプロモーションまたは変換を規定することができる。あるフォーマット対の間ではプロモーションが不可能なことは明らかである。例えば、ゼロセグメントを持たない_farポインタを_nearポインタに変換することは不可能である。なぜなら、これは、セグメント情報の損失を含むからである。故に、プロモーション規則を規定する場合、我々は、いつそれらが適用可能であるか及びどのようにそれらがあるフォーマットを他のフォーマットに変形するであろうかを識別すべきである。
第３図は、可能なプロモーション及び変換のダイアグラムを与える。各番号が付された矢印は、プロモーションまたは変換を表している。この図は、実際には、該図の底にあるヌルポインタブロック７６を包含する、７個のポインタブロック６４〜７６を持つ有向グラフである。これらポインタブロックは、直線の変換またはプロモーション矢印５１〜５９により、さらにヌルポインタブロック７６と_small pointer block７４との間の破線矢印により結合される。この後者は、以下より詳細に考慮されるであろう。前記ポインタブロックの二つのサブセットが、各々ＲＡＭワールド（RAM World）６０及びＲＯＭワールド（ROM World）６２として分類されているが、その他のポインタブロックはこれら二つのワールドの間で識別性はない。
前記図において、特定の用語は使用されていない。というのも、これはポインタタイプに関する名前を持たない一つ以上のノードを残すであろうからである。（ＲＡＭ，ＲＯＭ何れにおける）定数（const（=constant））の使用を先立って実行可能である。このように、このモデルは、以下で参照されるＡＮＳＩ−Ｃ標準に適合するＲＡＭに定数を持つことを可能にする。前記ダイアグラムの標準分析は、実際には｛ram、rom、union_of_ram_rom｝と｛small、big｝との間のカルテシアン積であることを明白にする。
ここでは、直接プロモーション及び間接プロモーションの違いがある。全ての直接プロモーションは、単一の有向矢印として示されている。間接プロモーションは、連続して二つ以上のこのような有向矢印を介するプロモーションである。
直接プロモーション
全ての直接プロモーションを列挙する。この列挙番号は矢印の番号に対応している。
５１．_ram_bigポインタから_bigポインタへのプロモーション。これは、フォーマットＣからフォーマットＤへの遷移である。フォーマットＤの１６ビットのページアドレスがフォーマットＣの１６ビットのページアドレスに設定され、フォーマットＤのセグメントがフォーマットＣのセグメントに設定され、ＲＡＭポインタであることを指示するフォーマットＤのＲＡＭ／ＲＯＭビットを設定することにより、このプロモーションは実行される。
５２．_rom_bigポインタから_bigポインタへのプロモーション。これは、フォーマットＣからフォーマットＤへの遷移である。フォーマットＤの１６ビットのページアドレスがフォーマットＣの１６ビットのページアドレスに設定され、フォーマットＤのセグメントがフォーマットＣのセグメントに設定され、ＲＯＭポインタであることを指示するフォーマットＤのＲＡＭ／ＲＯＭビットを設定することにより、このプロモーションは実行される。
５３．_ram_smallポインタから_ram_bigポインタへのプロモーション。これは、フォーマットＡからフォーマットＣへの遷移である。フォーマットＡの１６ビットのページアドレスがフォーマットＣの１６ビットのページアドレスに設定され、セグメント番号を０に設定することにより、このプロモーションは実行される。
５４．_smallポインタから_bigポインタへのプロモーション。これは、フォーマットＢからフォーマットＤへの遷移である。フォーマットＢの１６ビットのページアドレスがフォーマットＤの１６ビットのページアドレスに設定され、フォーマットＤのＲＡＭ／ＲＯＭビットがフォーマットＢのＲＡＭ／ＲＯＭビットに設定され、セグメント番号を０に設定することにより、このプロモーションは実行される。
５５．_rom_smallポインタから_rom_bigポインタへのプロモーション。これは、フォーマットＡからフォーマットＣへの遷移である。フォーマットＡの１６ビットのページアドレスがフォーマットＣの１６ビットのページアドレスに設定され、セグメント番号を０に設定することにより、このプロモーションは実行される。
５６．_ram_smallポインタから_smallポインタへのプロモーション。これは、フォーマットＡからフォーマットＢへの遷移である。フォーマットＢの１６ビットのページアドレスがフォーマットＡの１６ビットのページアドレスに設定され、ＲＡＭポインタであることを指示するフォーマットＢのＲＡＭ／ＲＯＭビットを設定することにより、このプロモーションは実行される。
５７．_rom_smallポインタから_smallポインタへのプロモーション。これは、フォーマットＡからフォーマットＢへの遷移である。フォーマットＢの１６ビットのページアドレスがフォーマットＡの１６ビットのページアドレスに設定され、ＲＯＭポインタであることを指示するフォーマットＢのＲＡＭ／ＲＯＭビットを設定することにより、このプロモーションは実行される。
５８，５９．前述と同様に、ブロック７６内のヌルポインタを、矢印５８を介して_ram_smallポインタに、または矢印５９を介して_rom_smallポインタのいずれかにプロモーションすることができる。これら二つの可能性の間での選択のインプリケーションを以下に述べる。
概して、慣用技術は矢印５３または５４に応じるようなプロモーションのフィーチャーが既知である。しかしながら、これら二つのプロモーションの形式をここに示される種々の他のプロモーションの形式と組合わせることは言うまでもなく、単一の編成に結合されてはいない。
間接プロモーション
図に与えられ、その際ヌルポインタブロック７６は無視して、二つの間接プロモーションがある。第１は、_ram_smallポインタから_bigポインタへのプロモーションであり、第２は、_rom_smallポインタから_bigポインタへのプロモーションである。原則的に、このようなプロモーション毎に二つのルートがある。これら二つのルートは可換である、すなわち、ポインタが異なるルートの一方を介してまたは他方を介してプロモーションされるかどうかを確証することができ、これは同一のポインタとして常に終了するであろう。この原因は、格子の構造にある。｛ram、rom、union_of_ram_rom｝または｛small、big｝のフィーチャーを組合わせるこのダイアグラムフィールドのアドレスは、各フォーマットにおいて相互に直交する。
ポインタの均一性
発明者は、上記の後での、以下に参照されるＡＮＳＩ−Ｃ標準に従わない異なり予期しない結果に至るかもしれない‘ポインタの均一性（the equality of pointers）’に関するオープンイシューが依然あることを認識している。特定の質問、すなわち、‘_rom_smallヌルポインタまたは_ram_smallヌルポインタが_smallヌルポインタに匹敵する（等しい）ヌルポインタ近傍にあるか？’がある。答えがＮＯである場合、これは、ＡＮＳＩ−Ｃと互換性がない。他の質問は、‘ヌルを特定のポインタに割当てるか、アーギュメントとしてポインタを期待するプロシージャにアーギュメントとしてヌルの値を受け渡す場合、このポインタがＲＡＭかまたはＲＯＭのポインタであるか？’である。原則的に、以下に与えられる関連の選択に共に起因する、二つの解決策がある。
これらの質問は、プロモーションダイアグラムを分析する結果生じる。ヌルポインタの場合興味深いことがある。我々は共に_ram_smallヌルポインタを持ち、また_rom_smallヌルポインタも持つ場合、これらは、この場合プロモーションの共通最低レベルすなわち_smallポインタ７４で比較可能である。しかしながら、直ちに、それらが等しいべきか異なるべきかどうかという質問が生じる。その結果として、あなた方はそれらを等しく規定するかまたは異なるように規定することができる。
第１の選択は、それらを等しく考慮することである。すなわち、この場合、均一性テストは、ヌルアドレスの場合ＲＡＭ／ＲＯＭビットでテストしない、すなわち、ページアドレスがゼロ（スモールポインタ）ではないか、またはページ及びアドレスがゼロ（ビッグポインタ）である。埋込システムにとりわけ関する欠点は、均一性テストがスピード及びコードサイズの見地からより高価になるということであるが、他方では、ＡＮＳＩ−Ｃ互換性に有利であろう。
第２の選択は、それらを異なると考慮することである。すなわち、この場合、均一性テストは単純で安価であるが、システムは、ＡＮＳＩ−Ｃ標準に従わない複数のヌルポインタで終了する。
PRINT_STRINGの例
提案されている解決策の利点を例証するため、とりわけＣ言語と共通するものと区別するように、print_stringの一例を与える。ライト瞬時（the rightinstant）におけるポインタのプロモーションまたは変換の可能性が極めて重要である。ramポインタまたはromポインタをアーギュメントの受け渡しの瞬時においてプロモーションすることにより、我々は、該ポインタのスモールデータフォーマットを使用することができ、さらにコードの重複を避けることができる。実際には、次のprint_stringルーチンは全てのポインタ形式に対して正しく作動する。すなわち、
0004260895.tif 000002
プログラムとＡＮＳＩ−Ｃとの互換性
このような互換性を提供する目的は、本発明による付加的なキーワードが与えられたプログラムをこれら付加的なキーワードを適切に再定義することによって互換可能にすることである。とりわけ、ここで選択された、すなわち、これらの付加的なキーワードを無視するためのメカニズムは、それらを組込（include）ファイル内に置くことによる。好ましい例は以下の通りである。
記憶形式を存在なし（nothing）にする再定義を、cxa.hを含むことにより行うことができる。すなわち、概して、ファイル“x.h”が_big及び他の形式の規則子を空ストリングに規定する。そうする結果、ここでは、いかなるコード冗長性を持たない最適且つ意味のある同一意味のＣプログラムになるであろう。ここで、コマンドcxa.hは慣用的にワードリストの衝突をとりわけ_bigプレフィックスを抑制することにより制御する。我々がさらにＲＡＭ−ＲＯＭ統合ポインタをデフォルトとして選択する場合、コード及びデータサイズの効率を向上させるためにプログラマーが行う必要のある唯一のことは、ＲＡＭ−ＲＯＭポインタ及び変数を識別することである。コードを付加する意義で、プログラムを書き換える必要はないであろう。
コンパイラの上向きの互換性
本発明の他の例として、新しいコンパイラと周知の８０５１マイクロコントローラに対する存在コンパイラとの互換性を考慮する。このような互換性は、拡張ハードウェア−ソフトウェア構造における旧ソフトウェアの使用を可能にするであろう。限定数のみの再定義でこの上向き互換性を達成することができる。単にＡＮＳＩ−Ｃとの互換性に関する解決策のように、これらの定義は、x.hのようなファイル上で_small、_far（_farの導入（introduction）は互換性の理由のために必要とされるが、単に_farの概念（notion）のように、実際にはメモリモデルに依存する_smallか_big（_huge）である）及び_bigの概念を再定義することができるであろう。
これはまた、８０５１コンパイラが記憶形式_ram及び_romの統合の概念を持たないために可能である。それゆえ、それは存在プログラムの一つではあり得ない。
他のコメント
本発明は、拡張環境における旧ソフトウェアの再使用を可能にする。標準的な今日のハードウェアで十分である。旧コンパイラを依然有用なままにすることができる。ポインタプロモーションオペレーションをコンパイラシステムソフトウェアにおいて規定することができる。概して、基本ファシリティーを導入することにより本発明は、データ及びコードマニピュレーションの極端に広い適用範囲を別個の環境パートを必要としない単一の環境において実行可能にする。以下の参考文献は従来技術を示している。
・ZORTECH C++ Compiler V3.0;MICROSOFT WINDOWS FUNCTION REFERENCE,Symantec Corporation,Cupertino CA,1991,p.749-753（本発明による高質の編成が向上されたデータのハンドリングを可能にすることを指示する、データ形式及び構造の参考文献。）
・ZORTECH C++ Compiler V3.0;FUNCTION REFERENCE,Symantec Corporation,Cupertino CA,1991,p.369-374（上で参照される、farパッケージの概念を例証する。）
・American National Standard for Information Systems-Programming Language C,ANSI-C X3.159-1989 American National Standards Institute,New York,USA,p.37,38,50（ポインタの複合使用及びそれらがどのように振る舞うべきか、を説明する。概して、Ｃに関するＡＮＳＩ−Ｃ標準は、Ｃの下で正則ポインタの使用がどのようになされるべきかを指示する。）
・Rationale for American National Standard for Information Systems-Programming Language-C（ANSI-C）,p.74,（ヌルポインタの旧使用を説明する、上の付録。）
【図１】
0004260895.tif 000003
【図２】
0004260895.tif 000004
【図３】
0004260895.tif 000005