1

Keil uvision 3を使用してCコードをコンパイルしようとしています。ターゲットにオプションxdataを選択して大容量メモリモデルを使用した場合にのみ、コード全体がコンパイルされます。このモデルを使用するには、外部データRAMを使用する必要がありますが、何らかの理由で使用できません。

そこで、pdataオプションを使用することにしました。誰かがpdataを使用するために実行される正確な手順を手伝ってくれますか?89V51RD2を使用しています。BL51 MISC、BL51Locateなどのオプションとよく混同しています。

4

2 に答える 2

1

これを次の公式の Keil フォーラムに投稿すると、うまくいくかもしれません。

http://www.keil.com/フォーラム

NXP P89V51RD2は、データシートによると、1KB のオンチップ RAM を備えた 8051 派生製品です。プログラムがそのスペースに収まらない場合は、外部 RAM を追加する必要があります。

PDATA を使用すると、XDATA への「P」エイジド アクセスを使用できます。追加メモリではありません。より多くのスペースが必要な場合は、メモリ使用量の最適化を実際に検討する必要があります。そうしないと、XDATA リソースを追加する必要があります。

参照: C51: PDATA メモリの使用

開示:私はKeil / ARMで働いています

于 2010-03-15T15:07:42.577 に答える
0

本当に利用可能な外部データRAMがない場合は、PDATAオプションは役に立ちません。PDATAはXDATAとは異なる論理アドレス空間にありますが、同じ物理空間を使用します。

たとえば、使用しているマイクロコントローラーには1kBのRAMが含まれています。1024バイトすべてにXDATAメモリとしてアクセスできます(アドレスXDATA:0x0000からXDATA:0x03FF)。256バイト(一度に)はPDATAメモリとしてアクセスできます(アドレスPDATA:0x00からPDATA:0xFF)。RAMの最初の256バイトをPDATAメモリとして使用するようにマイクロコントローラを設定するとします。これは、PDATA:0x00とXDATA:0x0000がRAMの同じ物理バイトを指していることを意味します。注意しないと、2つの異なる値を同じ物理メモリに保存しようとし、そのうちの1つが上書きされて失われます。

すでにすべてのXDATAメモリを使用している場合は、DATAメモリまたはIDATAメモリを使用してさらに多くを取得する必要があります。IDATAメモリを使用する場合は、格納している値がIDATA:0xFFで始まり、IDATA:0x00に向かって減少するスタックによって誤って上書きされないように、十分なスペースを空のままにしておくように十分に注意する必要があります。

編集:申し訳ありませんが、この質問が2歳であることに気づきませんでした。うまくいけば、これは誰かを助けるでしょう。

于 2012-07-07T05:55:50.600 に答える