【发布时间】:2018-04-05 22:21:18
【问题描述】:
我正在尝试通过运行一系列地址来测试我正在使用的设备的 RAM,比如 0x0 到 0xfef。
我尝试了很多东西,但没有任何效果。这是我想做的一个例子:
unsigned char temp;
unsigned char* addr = 0x0; // create ptr to point to address in mem
while(addr != 0xfef) // while not at end of mem
{
temp = *addr; // save value at current addr
*addr = 0xAA; // set value at addr to 0xAA
if(*addr != 0xAA) // if value did not write properly, do not run software
while(1);
*addr = temp; // restore value at addr to original value
++addr; // move on to next addr
}
在此代码中似乎可以运行的唯一操作是将 addr 处的值设置为 0xAA。 while 和 if 语句都给出错误,“Error [1128] compatible scalar operands required for comparison”。
我也尝试使用我想要的地址值创建指针,但尝试将指针设置为另一个指针会产生错误,“错误 [1131] 赋值中的类型不匹配”。
提前谢谢你。
编辑 2018-04-06:
更多信息: 我正在使用 PIC18F66K80。 我们可以使用 SFR 执行此功能:
FSR0 = 0x00;
while(FSR0 != 0xfef)
{
temp = INDF0;
INDF0 = 0xAA;
if(INDF0 != 0xAA)
while(1);
POSTINC0 = temp;
};
C 代码现在运行,并修改了内存,结果发现我看错了内存位置...
但是,它似乎在 addr = 0xDAA 处失败。注意指针addr的地址是0xD08,temp的地址是0xD07。
【问题讨论】:
-
while(addr != 0xfef)-- 除非sizeof(int) = 1,否则永远不会评估为真。尝试将addr声明为指向unsigned char的指针。并将if(addr != 0xAA)更改为if(*addr != 0xAA) -
我猜你的意思是 while (*addr != 0xAA)...
-
我确实是这个意思,实际上我最初将 addr 作为 char 指针,但在尝试使代码正常工作时更改了它。感谢您的位置。
-
只是一个问题,在正常情况下,并非每个 RAM 单元都可以访问。你检查过你的数据表吗?您是否尝试访问正常的位置?另外,你的设备是什么?也许这些信息会让人们更好地帮助你。
标签: c pointers memory comparison mplab