// 错误示例
#include <stdio.h>
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
#define MAX_DATA_BUFFER_SIZE 10*240*2
int main(int argc, char const *argv[])
{
uint16_t full_read_num = 0;
full_read_num = 115200/MAX_DATA_BUFFER_SIZE;
printf("full_read_num = %d,\r\n", full_read_num);
return 0;
}
这里的问题主要出现在define中,在keil5下编译并没有报错,但是通过MCU运行出来的结果是不对的,而在Sublime Text下编译会报错,原因是define中的运算没有加括号。因为define是替换,并不会做运算,115200/MAX_DATA_BUFFER_SIZE就会变成115200÷10×240×2 = 5,529,600 而实际上我们需要的结果是115200÷4800 = 24结果完全不同,因此我keil下编译要注意。
网友评论