我正在尝试使用Keil uvision 3编译C代码,只有通过选择xdata选项作为目标来使用大内存模型,才能编译整个代码。要使用这个模型,我必须使用外部数据RAM,这是不可能的,因为一些原因。
所以我决定选择pdata选项。有人能帮我完成使用pdata的具体步骤吗?我用的是89V51RD2。我对BL51 MISC、BL51定位等选项非常困惑。
发布于 2010-03-15 15:07:42
您可能会更幸运地将此发布在官方的Keil论坛上
http://www.keil.com/forum
NXP P89V51RD2是一个8051的衍生产品,根据数据表,它有1KB的片上内存。如果您的程序不能适应这么大的空间,您将不得不添加外部RAM。
PDATA允许您使用“P”老化访问XDATA。这不是额外的内存。如果您需要更多的空间,您应该真正考虑优化您的内存使用,否则您将不得不添加额外的XDATA资源。
参考资料:C51:使用PDATA内存
披露:我为Keil/ARM工作
发布于 2012-07-07 05:55:50
如果您确实没有任何外部数据RAM可用,那么PDATA选项将不会帮助您。PDATA驻留在与XDATA不同的逻辑地址空间中,但使用相同的物理空间。
例如,您正在使用的微控制器包含1kB的RAM。所有1024字节都可以作为XDATA内存访问(地址XDATA:0x0000到XDATA:0x03FF)。256字节(一次)可以作为PDATA内存访问(地址PDATA:0x00到PDATA:0xFF)。让我们假设您将微控制器设置为使用前256字节的RAM作为PDATA内存。这意味着PDATA:0x00和XDATA:0x0000指向相同的RAM物理字节。如果您不小心,您将尝试将两个不同的值存储在同一个物理内存中,其中一个将被覆盖和丢失。
如果您已经使用了所有XDATA内存,则需要使用数据内存或IDATA内存来获得更多信息。如果您确实使用IDATA内存,您将需要非常小心地使用,以使您所存储的值不会意外地被从IDATA:0xFF开始的堆栈覆盖,然后扩展到IDATA:0x00。
编辑:对不起,我没有注意到这个问题已经两岁了。希望这能帮上忙。
https://stackoverflow.com/questions/2448028
复制相似问题