无法将值120分配给静态const unsigned char或将值200分配给const static unsigned int

时间:2015-04-01 04:10:30

标签: c++ const avr-gcc atmelstudio

我对Arduino之外的嵌入式c ++相当新,但到目前为止,我已经能够解决我遇到的所有问题,除了这个问题。 我在Atmega 1284P上使用Atmel Studio,用C ++编写。我使用以下变量来比较TTL串行输入(串行输入在0到255之间传输一个无符号字节):

const unsigned char STEER_DEADZONE_MIN = 120;
const unsigned char STEER_DEADZONE_MAX = 120;
const unsigned char THROTTLE_DEADZONE_MIN = 136;
const unsigned char THROTTLE_DEADZONE_MAX = 136;

当我尝试使用STEER_DEADZONE_MIN或任何列出的未签名字符时,它们显示为12.我已确认我的程序使用Atmel Studio模拟器监视工具将其视为12并将其打印到LCD上嵌入式设备。我实际上想出了一个修复unsigned char,它是删除const,但我有const有一个原因,因为我不希望值改变。将其声明为:

unsigned char TEST = 120;
unsigned char TEST1 = 136;

这会导致值正确为120或136,但随后可能会意外更改该值。似乎如果我在主循环中执行赋值:

const unsigned char TEST = 120;

这也修复了这个值,但是引入了其他问题,从那时起我的所有函数都无法访问它。

当涉及到const unsigned int时,我也遇到了一个看似相关的问题。当我在主循环之外声明它时:

const unsigned int SERVO_ESC_SPEED = 200;
const unsigned int SERVO_STEER_SPEED = 200;
const unsigned int SERVO_DISTANCE_SENSOR_SPEED = 200;

该值为37900,但是,我尝试在主循环中声明它:

const unsigned int TEST = 200;

这会更正该值,但如上所述,由于我的函数无法访问它,因此无效。在这种情况下,删除主循环外的const不会修复该值。在这一点上我真的很茫然。我在这一点上只能想到的其他事情是创建一个包含所有这些const变量的设置类,并查看是否更正了这些值。我将尝试下一步并更新结果。

1 个答案:

答案 0 :(得分:0)

如何让它们变得静止呢?

static const unsigned char STEER_DEADZONE_MIN = 120;
static const unsigned char STEER_DEADZONE_MAX = 120;
static const unsigned char THROTTLE_DEADZONE_MIN = 136;
static const unsigned char THROTTLE_DEADZONE_MAX = 136;