在XC888微控制器上编程,我想为外部存储器xdata
中的某些数据保存缓冲区。
我这样做(只是一个例子,我摆脱了不必要的代码):
Header.h
extern ubyte xdata rec_buffer[32];
Function.c
ubyte xdata rec_buffer[32] = {0};
void foo()
{
//Option 1
rec_buffer[0] = 0xFF; // Doesn't work
//Option 2
ubyte xdata *ptr_buf = rec_buffer;
ptr_buf[0] = 0xFF // Doesn't work
}
所以我无法弄清楚我在这里缺少什么。在这两种情况下,都没有数据写入缓冲区。 (使用调试器检查)。我还检查了指针指向它的地址 - >它实际上指向外部存储器(地址0x000000
,但是没有任何问题)。
当我这样做而没有在xdata
中定义缓冲区时,它完全正常。
我究竟做错了什么?有什么特别的方法我必须写入xdata吗?
答案 0 :(得分:5)
XRAM不应该在0xF000
(不是0x000000
)吗?根据图7:
http://www.keil.com/dd/docs/datashts/infineon/xc88xclm_ds.pdf
链接器配置是否在某处错误?
答案 1 :(得分:0)
对缓冲区使用volatile关键字,编译器会跳过最可能的变量。如果您将值写入内存或I / O空间但未观察到值或任何更改,则很可能您的变量由编译器优化。