我從I2C總線獲得16位有符號整數,並將它們存儲在本地int16變量中。該傳感器是一個MEMS陀螺儀,它經常會出現高或低的數據值,這似乎是許多MEMS陀螺儀的一個普遍問題。在atmel AVR 8bit gcc上獲得兩個16位有符號整數的絕對值差異的有效方法?
因此正常讀數爲-2到+2,並且時不時(取決於我的輪詢速率),我得到非常大的值(如-30000或25000)。
我沒有找到一種方法來解決這個問題,我想用軟件解決這個問題。 我尋找一個有效的方式做這樣的事情,而不去32位:
僞代碼:
#define SPIKE 0x3000; // a change of SPIKE or larger is ignored
int16_t currentvalue=-2330; // the current value (last sensor result)
int16_t newvalue=-31000; // the new value from sensor, a spike
difference = abs(abs(newvalue) - abs(lastvalue)); // would need some branches more
if (difference < SPIKE) currentvalue = newvalue; // if SPIKE the new value is just not taken
我無法找到一個很好的和有效的方式,以保持在16位的空間,並獲得新老之間的絕對區別,如果沒有樹木的分支。
我相信有一個很好的有效方法來做到這一點,我只是沒有經驗足夠的處理簽名值。
我甚至不需要真正計算絕對差值,只要絕對差值大於SPIKE就足夠了。
我想避免32位空間。