STM8S103乘法错误
ST Visual Develop + Cosmic 4.2.4 + STM8S003,如下代码:
uint8_t x;
uint8_t y;
uint16_t pp;
x = 100;
y = 22;
pp = x * y;
最后pp的结果为500。为什么?
uint8_t x, y,z;
uint16_t pp;
x = 100;
y = 22;
z = 1;
pp = (x * y ) / z;
结果会是多少呢?调试发现结果是200,这是为什么?
使用强制类型转换看看 x和y也定义成uint16_t 有截图不? 你把x,y其中至少一个定义为uint16_t
或者修改代码:
pp=x;
pp*=y;
运行效果截图我再看看? 本帖最后由 toofree 于 2018-6-8 00:43 编辑
一切正常。你有可能是上面运算了,但是下面程序中没有使用,导致优化掉了,根本就没这代码。
一切以汇编为准,汇编没有的,那就是没有。
把后面使用的代码注释掉,整个乘法就被优化没了
那么,可不可以不让优化呢,方法也是有的,加 volatile 修饰。
不拿板子试,真不知道什么问题。楼主不给工程,只给个部分代码,有问题,全靠猜。
猜到你后面没有使用 pp 变量!
7、8楼最佳答案 看看你的转换类型,换个参数重新测试关联,看看STM8S103x 数据手册8位乘8位的乘法指令等等的用法。类似的问题有如下回答,这是因为做乘法运算时,编译器实际上调用了一个函数,而这个函数用到了几个编译器自定义的全局变量,如果不按照2楼说的去做,在进入中断时不会保存这几个全局变量,而造成这个乘法运算函数为不可重入,导致错误。
页:
[1]
2