关于==和&优先级问题
0赞
在OK6410的NANDFLASH裸机驱动的时候,被一个==和&优先级的问题给折腾了两天,一直以为是代码的其他地方没有写对。真是坑啊,又暴露了以前学C语言忽视的优先级问题了。
在对NANDFLASH读写操作后,需要检测RnB信号。是否准备好。程序中是用
一直判断NFSTAT寄存器的最低位是否为1。为1的话,说明NANDFLASH准备好,为0的话,就说明没有准备好,就需要等待NANDFLASH准备好。所以用了一个while循环。
问题就是出在这里。感觉&的优先级要比==要高吧。那就应该首先执行NFSTAT&0X01操作,然后在判断结果是不是为0。为0的话,就循环。
可是,==的优先级是要比&优先级要高的。
==的优先级是7,&的优先级是8。所以首先执行的是1==0。结果当然是0。再将NFSTAT和0相与,结果自然也是0。所以while循环条件不满足,就直接退出了。
正确的应该是:
来看看两种对应的汇编代码是什么:
明显看出,两种写法对应的汇编都是不一样的。第一种是我们想要的结果,第二种就不是我们想要的结果,可以看出,都没有进行循环。直接执行过去了。
代码这一块,竟然在这个地方出错了。所以,以后,我们要注意运算符的优先级问题了。对于不确定的优先级,就加括号。