微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > CodeVisionAVR中的一个配置

CodeVisionAVR中的一个配置

时间:11-28 来源:互联网 点击:

CodeVisionAVR中的一个配置

(2010-06-22 14:41:23)

标签:

杂谈

分类: AVR单片机

下面是一段简单的程序:

char a0;

signed char a1;

signed int a2;

signed long a3;

LCD_CLS();

a0 = -16;

a0 >>= 2;

LCD_DispHex(8,0,a0,0,0);

a0 = 16;

a0 >>= 2;

LCD_DispHex(64,0,a0,0,0);

a1 = -16;

a1 >>= 2;

LCD_DispHex(8,8,a1,0,0);

a1 = 16;

a1 >>= 2;

LCD_DispHex(64,8,a1,0,0);

a2 = -16;

a2 >>= 2;

LCD_DispHexInt(8,16,a2,0,0);

a2 = 16;

a2 >>= 2;

LCD_DispHexInt(64,16,a2,0,0);

a3 = -16;

a3 >>= 2;

LCD_DispHexLong(8,24,a3,0,0);

a3 = 16;

a3 >>= 2;

LCD_DispHexLong(64,24,a3,0,0);

执行结果是:

3C 04

FC 04

FFFC 0004

FFFFFFFC 00000004

这让我很纳闷,为什么a0定义为char,a1定义为signed char,它们的运算结果就不同了呢?通常情况下char型和signed char型、int型和signed int、long和signed long是完全一致的。

经检查,原来CodeVisionAVR的工程配置中有一个小的设置,如右图红框勾出。

如果此设置打勾选中,根据相关帮助,那么该工程中char型变量定义等同于unsigned char。这和通常意义上的认知是不同的。

所以,日后在软件中尽量用signed char或unsigned char来明确定义变量类型,免得一不小心工程配置弄错了而带来不必要的麻烦。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top