使用keil uvision的问题3

时间:2010-03-15 14:58:23

标签: keil

我正在尝试使用Keil uvision 3编译C代码。只有当我通过为目标选择选项xdata来使用大内存模型时才会编译整个代码。要使用这个型号,我必须使用外部数据RAM,由于某些原因,这对我来说是不可能的。

所以我决定选择pdata选项。有人可以帮我解决使用pdata的具体步骤吗?我正在使用89V51RD2。我对BL51 MISC,BL51 Locate等选项感到困惑。

2 个答案:

答案 0 :(得分:1)

您可以在官方Keil论坛

上发布更好的运气

http://www.keil.com/forum

根据数据手册,NXP P89V51RD2是8051衍生物,具有1KB的片上RAM。如果您的程序不适合这么大的空间,您将 添加外部RAM。

PDATA允许您使用“P”岁访问XDATA。它是额外的内存。如果您需要更多空间,您应该真正考虑优化内存使用,或者您必须添加额外的XDATA资源。

参考:C51: USING PDATA MEMORY

披露:我为Keil / ARM工作

答案 1 :(得分:0)

如果您确实没有可用的外部数据RAM,那么PDATA选项将无法帮助您。 PDATA与XDATA位于不同的 Logical 地址空间,但使用相同的物理空间。

例如,您使用的微控制器包含1kB的RAM。所有1024个字节都可以作为XDATA存储器访问(地址XDATA:0x0000到XDATA:0x03FF)。 256个字节(一次)可以作为PDATA存储器访问(地址PDATA:0x00到PDATA:0xFF)。假设你设置微控制器使用前256字节的RAM作为PDATA存储器。这意味着PDATA:0x00和XDATA:0x0000指向RAM的相同物理字节。如果你不小心,你会尝试在同一个物理内存中存储两个不同的值,其中一个将被覆盖并丢失。

如果您已经在使用所有XDATA内存,则需要使用DATA内存或IDATA内存来获取更多内存。如果您确实使用IDATA内存,则需要非常小心以留出足够的空间,以便您存储的值不会被IDATA开始的堆栈意外覆盖:0xFF并且增长向IDATA:0x00

编辑:对不起,我没注意到这个问题已经两年了。希望这对某人有帮助。