使用宏定义时,注意变量的类型

尽量使用无符号数

有如下代码:

// 满洲里国峰电子科技 www.guofengdianzi.com
// 微信:GuofengDianZi
#define SENSOR_WORKS 0xFA
char RxData=0;
if(UART_GetCharsInRxBuf()!=0)
	UART_GetChar(&RxData);
if(RxData==SENSOR_WORKS)
{		
	TurnONLED1();	
}

串口收到的数据放在RxData中,如果其值为0xFA,点亮LED1。看上去完全没有问题,但是当终端设备传来0xFA的数据时却不执行点亮LED1。原因是RxData是char型的,其范围是-128~+127,而宏定义的SENSOR_WORKS其值为250(0xFA),首位为1,当作负数,其数值为-6。而-6不等于0xFA,不执行if里面的语句。

应该使用无符号数:

// 满洲里国峰电子科技 www.guofengdianzi.com
// 微信:GuofengDianZi
#define SENSOR_WORKS 0xFA
unsigned char RxData=0;

if(UART_GetCharsInRxBuf()!=0)
	UART_GetChar(&RxData);
if(RxData==SENSOR_WORKS)
{		
	TurnONLED1();	
}

作者:伏熊(专业:射频芯片设计、雷达系统。爱好:嵌入式。欢迎大家项目合作交流。)
微信:GuoFengDianZi

发布了34 篇原创文章 · 获赞 7 · 访问量 9235

猜你喜欢

转载自blog.csdn.net/mzldxf/article/details/102802520