衢二中法外教:嵌入式问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/10 11:54:21
static int ReadStatus(void)
{
int ret;
out_l(0x00700070, ROM_BASE);
ret = in_l(ROM_BASE);
ReadArray();
return ret;
}
下面是主调函数
static int LockBlk(U32 addr)
{
int ret;
addr &= ~0x3ffff;
out_l(0x00600060, ROM_BASE);
out_l(0x10001, ROM_BASE+addr);
do {
ret = ReadStatus();
} while((ret&0x00800080)!=0x00800080);
返回值是0x00700070的话不是死循环了吗
是啊 ,可是这样的循环就是死循环了(这是一个PXA270基础实验上 NOR FLASH的程序)#define out_l(v, a) (*(volatile U32 *)(a) = (v))
#define in_l(a) (*(volatile U32 *)(a))

只要返回的数据中第8位和24位不为1就循环。
返回值是0x00700070的第8位和24位为0,则继续循环。