楼上说的不对。
可以做个单步调试来看结果。问题出在了keil的乘法上面。
(ulong) (RXD_BUF[1]*100000): 这一句的结果肯定大于0xFFFF,keil调用的是?C?LMUL,long型。
RXD_BUF[2]*10000 这一句:结果可能小于0xFFFF(65535),keil调用的是?C?IMUL,int型;
第二句改为:
count += (ulong) (RXD_BUF[2]*(ulong)10000);
显示让keil编译时调用long型乘法就好了。注意,ulong和long的函数不一样,一个是C?LIMUL,另一个是C?LMUL。
另外,对于这些大数乘法的时候,最好都标示清楚。后面可以加L,UL。
|