0

私は Arduino 以外の組み込み C++ にはかなり慣れていませんが、これまでに遭遇したすべての問題を修正できましたが、この問題は除きます。Atmega 1284P で Atmel Studio を使用し、C++ でコーディングしています。次の変数を使用して TTL シリアル入力と比較しています (シリアル入力は 0 ~ 255 で、単一の符号なし char バイトで転送されます)。

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 またはリストされている符号なし char のいずれかを使用しようとすると、それらは 12 として表示されます。Atmel Studio シミュレータ ウォッチ ツールと組み込みデバイスの LCD に出力することの両方を使用して、プログラムが 12 として認識していることを確認しました。const を削除するという unsigned char の修正を実際に思いつきましたが、値を変更したくないので、そこに 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 に答える