我在µVisiom 5中定义了一个功能,如下所示:
#define bitRead(value, bit) (((value) >> (bit)) & 0x01)
#define bitSet(value, bit) ((value) |= (1UL << (bit)))
#define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
#define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))
在另一个函数中调用bitWrite
函数时
void setled(uint8_t row, uint8_t col, uint8_t value) {
bitWrite(buffer[col], row, value);
//bitWrite(buffer[col], row, value);
int n = col / 8;
int c = col % 8;
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET); // pull the CS pin LOW
for (int i = 0; i < NumberOfMax7219; i++) {
if (i == (NumberOfMax7219 - (n + 1))) {
write_byte(((c + 1)));
write_byte(buffer[col]);
} else {
write_byte(0);
write_byte(0);
}
}
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET); // pull the CS pin LOW
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET); // pull the CS pin HIGH
}
关于功能,我收到以下错误消息
bitWrite(buffer[col], row, value).
1. Error: expected ')'
2. Error: expected ';' after expression
3. Error: expected ')'
4. Error: expected ';' after expression
这里可能是什么错误?
答案 0 :(得分:1)
bitWrite
不是函数,它是预处理器宏。编写宏时必须非常小心,它们很容易出错,在大多数情况下应替换为内联函数。
宏有一个潜在的问题:在宏扩展中,参数bitvalue
没有括在括号中,如果参数不是单个标记,则会导致潜在的运算符优先级问题。该宏应写为:
#define bitWrite(value, bit, bitvalue) ((bitvalue) ? bitSet(value, bit) : bitClear(value, bit))
但是,您的代码片段中的问题似乎在其他地方。错误消息以违规行bitWrite(buffer[col], row, value).
上的副本开头,以句点(.
)而不是;
结尾,这与发布的代码片段相反。是错字吗?它将解释一些错误消息。