使用的芯片是stm32f407ve,ucos_iii,keil5
我在程式中這樣幾個賦值的陳述句
其中 #define Speed 6400
Speed1 = Speed;
vx1 = Speed1;
程式中 Speed1 的資料型別是 uint32_t,vx1的資料型別是float。
現在遇到了這樣一個問題,就是賦值完后 vx1的值為0.5;
出現這個現象是因為,我把程式中幾個全域變數的型別由 uint16_t 改成了 uint32_t。
后來我嘗試強制型別轉換 vx1 = (float)Speed1; 沒有效果
嘗試直接賦值 vx1 = 6400; vx1 = 6400.0f; 都沒有效果
但是下面的幾個嘗試可以得到正確的值
1、vx1的資料型別改為 uint32_t
2、keil中的優化等級改為不優化
3、賦一個其他的值,6399 , 800等其他的值都沒有問題。
其中上面第三個嘗試最讓我迷惑,為什么只有6400這個值不行呢?(可能也有別的值不行,但是我沒有挨個實驗)
想著應該是由于程式空間的問題,被優化的結果,但是不是很明白,有沒有哪個前輩給解答一下
非常感謝
uj5u.com熱心網友回復:
不能只看這幾句,還要看vx1在后面有沒有用到,優化的原則是不改變輸出結果, 僅僅相互賦值的話有時很難看明白他是怎么優化的轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/233671.html
標籤:單片機/工控
下一篇:I2C的波形正常嗎?
