今天调试STM8S的时候,发现一个问题,放在这里,希望以后大家碰到时能引起注意!
环境:STVD 4.3.0 + COSMIC 4.2.4
如果两个16位的short型数据进行运算,最后结果为32位长整形时,COSMIC的内部库函数不会先扩展再运算,而是进行16位和16位运算,然后结果还是16位。最后再将16位扩展成32位。
例如:
int16_t s1, s2;
int32_t result;
result = s1 * s2;
如果s1 = 768, s2 = 128, 则这里的结果会成为-32768!(错误)
在这里必须写成:
result = (int32_t)s1 * (int32_t)s2;
这样结果就成了正确的98304。 |