×
嵌入式 > 技术百科 > 详情

STM8遇到的一些小问题

发布时间:2024-04-27 发布时间:
|

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


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
NS推出采用第二代PowerWise技术的能源管理单元及先进电源控制器