关于==和&优先级问题

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

明显看出,两种写法对应的汇编是不一样的。第一种是正确的,第二种是错误的。对于第二种,没有循环判断。

 

因此,以后在写代码的时候,要注意运算符的优先级问题。对于不确定的优先级,就加括号来保证。

 

此条目发表在c/c++, 编程语言分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。