「unsigned char near」とは何ですか?


12

データシートを読んだところ、変数がとして定義されてunsigned char near Sample_Xいることがわかりました。これは何ですか、これはどう違いますunsigned char Sample_Xか?


3
おそらくコンパイラが小さな相対オフセットを使用できるようにしますか?
Neil_UK

6
DOSでのx86の一部の経験に基づいて、いくつかのポインタータイプと16ビット環境でこれを期待しています。しかし、OPが引用したものはポインターのようには見えず、データシートリンクは一部のMCUを意味します。以下の二つのリンクで「近い」キーワード検索:microchip.com/forums/m549709.aspxの barrgroup.com/Embedded-Systems/How-To/Efficient-C-Code
FRR

3
これはコンパイラの拡張機能であり、標準Cではないことに注意してください
PlasmaHH

CCMについてかもしれません。コードは主にMCUを対象としていることを考慮すると、CCM(コア結合メモリ)に配置するためのコンパイラーのサポートにより、リンカーへの間接的な提案になる可能性があります。
アイハン

1
FYI、キーワードnearは、ストレージクラス指定子の例です。変数のストレージをどのように、またはどこに割り当てる必要があるかをコンパイラに伝えます。(詳細については、以下のfiloの回答を参照してくださいnear)。
ソロモンスロー

回答:


20

ここで指定するMCU は、HC08アーキテクチャのわずかに強化されたバージョンを使用するFreescale MC9C08シリーズです。これは8ビットコアであり、(多くの場合と同様に)他のものよりも短い命令と「ゼロページ」アドレスへの高速アクセスを備えています。ゼロページアドレスは16ビットではなく8ビット長であるため、それら参照する命令は3ではなく2バイトになり、結果として実行するのに1サイクル少なくなります。

「near」キーワードは、パフォーマンスを向上させるために、可能であれば変数を「ゼロページ」に入れるようコンパイラーに指示します。このような組み込み開発用に特別に作成されたコンパイラは、通常、このような拡張機能を言語に実装します(ここでは、「ゼロページのCサポート」と呼びます)。


私はこの答えが好きですが、あなたの情報源はありますか?
Clonkex

1
回答を編集して、詳細と参照を提供しました。実際、Freescaleの新しいHCS08アーキテクチャからのものですが、これは古いHC08およびHC05アーキテクチャとコード互換性があります。(現在は古くからの)6800と6502のアーキテクチャも密接に関連しています。
Chromatix

いいね、ずっと良い!
Clonkex

そのため、その使用法はregisterキーワードと非常に似ていますが(最適化が必要な場所であると本当に確信している場合)、少し極端ではありませんか?
-vsz

多かれ少なかれ。違いは主に、8ビットCPUには通常、レジスタバンク自体がなく、1つのアキュムレータといくつかのインデックスレジスタしかありません。しかし、アドレスのサイズとアクセスの完了にかかる時間に違いがあるという点で、x86で「ニア」ポインタと「ファー」ポインタを使用することにも似ています。
Chromatix

15

CPUアーキテクチャによっては、異なるアドレスのデータにアクセスするための異なる命令が存在する場合があります。以下は、Keilのコンパイラーの例です。

ニアアクセスには一定のメモリ制限があるため、頻繁に使用される変数を短い命令でアクセスできる領域に配置するようにコンパイラーにヒントを与えることができます(32ビットアドレス空間へのアクセスは16ビットアドレスよりも大きいことは明らかです)スペース)。これは、より小さな/より速いコードに変換できます。



5
@AndrewMorton:その質問は、ほとんど廃止された8086アーキテクチャに関するものでfarあり、nearポインタです。同じキーワードが、8ビットマイクロコントローラーで関連しているが異なる方法で使用されています。
-supercat

@supercat質問は一般的に尋ねるだけですが、答えは古いアーキテクチャに焦点を合わせています。知識のある人は、8bitマイクロコントローラーでどのように使用されるかを説明する答えを書いてください。
curiousdannii

@curiousdannii:問題のコードは8ビットマイクロ用に作成されました。
supercat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.