我对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;