不能将值 120 分配给静态常量无符号字符或将值 200 分配给常量静态无符号 int



我对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模拟器手表工具并将其打印到嵌入式设备的LCD上,将其视为12。实际上,我已经为无符号字符提出了一个修复方案,即删除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并不能修复该值。在这一点上我真的不知所措。在这一点上,我唯一能想到的另一件事就是用所有这些常量变量创建一个设置类,看看是否能纠正这些值。我会尝试下一步,并更新结果。

让它们也是静态的怎么样?

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;

相关内容

最新更新