weiqi7777

关于==和&优先级问题

0
阅读(6451)

                                    

         OK6410NANDFLASH裸机驱动的时候,被一个==&优先级的问题给折腾了两天,一直以为是代码的其他地方没有写对。真是坑啊,又暴露了以前学C语言忽视的优先级问题了。

         在对NANDFLASH读写操作后,需要检测RnB信号。是否准备好。程序中是用

         clip_image002

         一直判断NFSTAT寄存器的最低位是否为1。为1的话,说明NANDFLASH准备好,为0的话,就说明没有准备好,就需要等待NANDFLASH准备好。所以用了一个while循环。

         问题就是出在这里。感觉&的优先级要比==要高吧。那就应该首先执行NFSTAT&0X01操作,然后在判断结果是不是为0。为0的话,就循环。

         可是,==的优先级是要比&优先级要高的。

clip_image004

==的优先级是7&的优先级是8。所以首先执行的是1==0。结果当然是0。再将NFSTAT0相与,结果自然也是0。所以while循环条件不满足,就直接退出了。

 

正确的应该是:

clip_image005

 

来看看两种对应的汇编代码是什么:

clip_image007

 

clip_image009

明显看出,两种写法对应的汇编都是不一样的。第一种是我们想要的结果,第二种就不是我们想要的结果,可以看出,都没有进行循环。直接执行过去了。

 

代码这一块,竟然在这个地方出错了。所以,以后,我们要注意运算符的优先级问题了。对于不确定的优先级,就加括号。