我正在为 PIC 微 Controller 在 xc8 编译器中编写 C 代码。此代码将使用 CCP 模块控制风扇(电机)的开/关和速度。
要打开/关闭 CCP 模块以及风扇,我像这样切换 CCP1CON 位
ccp1conValue = CCP1CON;
ccp1conValue = ~ccp1conValue & 0x0F;
ccp1conValue = CCP1CON;
我担心的是这种语法在 XC8 中是否正确且可接受?我可以在同一语句中使用 invert 和 AND 运算还是需要分别进行?或者是否有更好的方法来完全做到这一点?
最佳答案
这是有效的 C 语法,任何稍微兼容的编译器都应该优雅地处理它。虽然人们经常在一行 C 代码中插入合理的做法,但我个人会判断您所做的是完全可以接受的。
组合多个操作时要注意的一件事是运算符优先级。
你的声明:
~ccp1conValue & 0x0F
相当于:
(~ccp1conValue) & 0x0F
这可能是您想要做的,但最好记住。
此外,最后一行:
ccp1conValue = CCP1CON;
应该是:
CCP1CON = ccp1conValue;
相反。
根据您是否需要保留该值,您可以将这三行替换为:
CCP1CON = ~CCP1CON & 0x0F;
关于C/XC8 语法 : Can invert and AND operation be used in the same statement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57007948/