|
發(fā)布時間: 2020-3-16 14:42
正文摘要:這行代碼的目的是將CAN報文接收 把兩個byte(字節(jié)數(shù)) 合并成一個 16bit 的數(shù),之后再運算的 Obj->VehicleCan.ICAN4022_currents4 = (((Currents4_H | VehicleCanRecData.CanBytes.Byte2))- 327 ... |
vvyywy 發(fā)表于 2020-3-16 16:42 感謝!您說的方法我理解了,先乘后除,這樣整個過程不會出現(xiàn)小數(shù)(浮點類型),不過實現(xiàn)起來算法不對,我再研究一下 ![]() |
| (((((Currents4_H | VehicleCanRecData.CanBytes.Byte2))- 32767)*200)>>15)/200 |
| int型數(shù)據(jù) 確實可以用移位運算表示2 4 8 之類的乘除法。但是對于其他數(shù)據(jù)如float 就不太行了。16.3835 這個常數(shù),在編譯器里,默認(rèn)是double型的,后面加個f,可變?yōu)閒loat型。速度會優(yōu)化不少。 |
Powered by 單片機(jī)教程網(wǎng)