我對Arduino以外的嵌入式C++相當陌生,但到目前爲止,我已經能夠解決所有我運行過的問題進入,除了這一個。 我在Atmega 1284P上使用Atmel Studio,使用C++進行編碼。我使用以下變量進行比較,以TTL串行輸入(串行輸入是0和255之間在單個無符號字符字節轉印):無法將120的值賦予靜態常量無符號字符或將值賦給常量static static unsigned int
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出來。我已經確認,我的程序將它視爲12,同時使用Atmel Studio模擬器手錶工具並將其打印到嵌入式設備上的LCD上。我實際上已經想出了一個用於刪除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變量的設置類,並查看是否更正了這些值。我將嘗試下一步並更新結果。
也許你在你的代碼中存在一個bug,它正在摧毀存儲'const'變量的區域;或者也可能是鏈接器或程序加載器出了問題,並且它不是首先正確設置'const'變量區域。嘗試編寫一個最小程序來測試,即只包含'main()'(或任何入口點)和一個'const'全局變量以及檢查該變量值所需的絕對最小代碼量。 – 2015-04-01 04:13:00
好吧,我可以通過使用atmega1284P模板創建一個新的Atmel Studio項目,然後構建一個完全準系統main.cpp,只有那些定義的變量和一個main(),它只將它們直接打印到LCD。此時,我只能假定它是avr-gcc,atmel工作室或工具鏈/鏈接器模板中的一個錯誤。無論如何,我通過在Settings.h文件中創建Settings類並在類中聲明所有那些常量,找到了解決方法。 – theDoktorJ 2015-04-01 06:10:28
只要您需要一些基本的解決方法,我就不會相信任何進一步的代碼。 – 2015-04-01 07:03:28