0

我对 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。实际上,我已经为 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 变量的设置类,看看是否可以更正这些值。我将在接下来尝试并更新结果。

4

1 回答 1

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;
于 2015-04-01T04:25:49.833 回答