忍者ブログ
ようこそ!JQ2RVNのブログです。 PICを使っていろいろな物を作ろうと画策中です。
[27] [26] [25] [24] [23] [22] [21] [20] [19] [18] [17]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

16bit の PICマイコンのデータメモリーには
Near と Farの2種類あることは、
データシートや後閑さんの本に書かれています。

しかし、何が違うのかよくわからん。
また、どういうデータはNearか?Farか?もわかりません。
ということで、前回紹介したアセンブラのリファレンスを読んでみました。

まず、Near領域とは
13ビットのアドレス指定で直接アクセスできる領域
となってます。
16進数でいえば0x0000~0x1FFFに相当します。

一方、16bit PICのデータメモリーは16bitで構成されています。
よって、0x2000~0xFFFFはFar領域となります。
(実際にメモリーがあるかどうかは、PICによって違う)


さて、今回もADD命令で比較してみたいと思います。
前回とは書き方が違うので注意してください。
(シンタックスは、マニュアルに合わせました)


ADD{.B} #lit10, Wn
(Wn = lit10 + Wn)
このニーモニックに対応する機械語を見てみましょう。
1011 0000 0Bkk kkkk kkkk dddd
B: バイトモードとワードモードの切り替え
k: lit10
d: どのWレジスタをつかうか(0~15)
これを見れば、前回不明だったWnがポインタ指定できるかどうかわかります。
ポインタ動作させるかというビットがないので、できないということになります。
この動作をみると、
Wレジスタはどれも、16bit幅がありますから、
データメモリー全域にアクセスできる

ことがわかりました。


ADD{.B} f {,WREG}
( f or wreg = wreg + f )
同様に機械語を見てみます。
1011 0100 0BDf ffff ffff ffff
ここで、f は13bit分しか確保されていません。
つまり、この命令ではNear領域にしかアクセスできないことになります。
ちなみにDは格納先( f か wregか)を変えるスイッチです。



他の命令もWレジスタによるポインタアクセスですから、
NearかFarかが影響されるのは ADD f 形式のみです。


結論:
これらのことから、配列や文字列などを連続的にアクセスする場合は、
Far領域にマッピング
しても、あまり問題になりません。
(多くの場合、ポインタでアクセスするから)

一方、スカラー変数の場合、Far領域に配置してしまうと、
Wレジスタにアドレスをコピーしてから
ADD命令を出さないといけなくなります。
したがって、Near領域に配置しないといけないことがわかります。



また、
大きな配列をNearとFarをまたがって確保しても問題ありません。
(どのみちポインタでやってるから)

ここのところが8bit PICとの大きな違いで
8bitのときは、バンクをまたがった大きなデータは、
各バンクの終端を判断し、次のバンクの先頭を変換し・・・
というややこしい処理が必要でした。
しかも、CコンパイラではRAM不足のエラーになったり・・・
このため、なるべく1つのバンクに収まるよう配置してました。

しかし、16bit PICではWレジスタからのポインタ指定ができるので
簡単に処理ができます。

PR

コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


トラックバック
この記事にトラックバックする:


忍者ブログ [PR]
カレンダー
08 2017/09 10
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
プロフィール
コールサイン:
JQ2RVN
性別:
男性
自己紹介:
PICの開発を勉強中です。
目標はPICTNCの高性能版を作ること。
まずは、本家を解析しています。
最新コメント
[04/23 Eolande]
[04/16 太田和巳(JF2UJG)]
[09/10 je7ifp]
[08/06 JQ2RVN]
[08/03 OVC]
最新トラックバック
バーコード
ブログ内検索
アクセス解析