STM8遇到的一些小問題

1.編譯器優化的問題

定義的局部變量如果後續沒有用,會被編譯器優化掉,如:

{

     u32 va = 100;
    va = 200;

  //些處放斷點 ,查看一下va的值,會發現根本不對。

}

如何避免優化?

{

    __IO u32 va = 100;
    va = 200;

//此處放斷點,看一下值已經正常了。

}

__I  、__O 、 __IO的宏定義如下:

 

2. char類型會被當成unsigned char, 導致計算結果出錯

{

char va = -40;

//這裏放斷點,看一下va的值 如下:

}

這是因爲負數變成無符號數時,在內存中是其反碼+1

-40 二進制爲:  1010 1000

      反碼爲:    1101 0111

      補碼爲:     1101 1000    ——>   216

所以被當成是unsiged char 時會是216,顯然會導致計算出錯。

如何解決?

{

int8_t va = -40;
//放斷點看一下:

}

int8_t定義如下:

就是說申明char類型時,一定要寫成signed char 不然會被編譯器認爲是unsigned char

這點與我們在linux開發中是有區別的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章