在XC888微控制器上编程时,我想为外部存储器xdata
中的某些数据保存缓冲区。C51编译器 - 写入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?
你是否试图通过调试器进行设置,并将其读回来?也许调试器不显示真正的值 – jeb 2013-02-27 08:57:30
嗯,我试着把它读回到一个正常的uchar变量,然后看它是否得到所需的值。但它也得到0,所以我想调试器给我看正确的值。 – Toby 2013-02-27 09:52:59
从哪里尝试访问缓冲区?从主程序或中断服务程序,或两者? – Lundin 2013-02-27 10:04:59