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开发中是有区别的。

发布了30 篇原创文章 · 获赞 15 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览