【发布时间】:2019-01-15 16:17:54
【问题描述】:
我正在为一个项目使用 NXP SDK。 SDK 包含几个示例代码。 此示例之一称为“lpuart_interrupt”。 在本例中,LPUART_GetStatusFlags 函数的使用如下:
/* If new data arrived. */
if ((kLPUART_RxDataRegFullFlag)&LPUART_GetStatusFlags(DEMO_LPUART))
{
...
我不明白为什么函数名前面有一个'&'字符? 以这种方式调用该函数应该如何工作?
函数原型如下:
uint32_t LPUART_GetStatusFlags(LPUART_Type *base);
kLPUART_RxDataRegFullFlag 是以下枚举的一部分:
enum _lpuart_flags
{
kLPUART_TxDataRegEmptyFlag = (LPUART_STAT_TDRE_MASK),
kLPUART_TransmissionCompleteFlag = (LPUART_STAT_TC_MASK),
kLPUART_RxDataRegFullFlag = (LPUART_STAT_RDRF_MASK),
...
}
LPUART_STAT_RDRF_MASK 定义如下:
#define LPUART_STAT_RDRF_MASK (0x200000U)
【问题讨论】:
-
&这里是按位与,你可以像LPUART_GetStatusFlags(DEMO_LPUART) & (kLPUART_RxDataRegFullFlag)一样重写它 -
如果我们放弃带有括号疾病的蹩脚编码风格可能会更清楚:
if (kLPUART_RxDataRegFullFlag & LPUART_GetStatusFlags(DEMO_LPUART))。现在,如果问题是flag_register & mask应该做什么,那么答案就是研究按位运算符。
标签: c embedded nxp-microcontroller