Hi,
I experienced a problem with uint32 calculations.
The following code calculates a wrong result. Has anyone found other problems with the unsigned long integer data type?
xdata unsigned int test1 = 66; xdata unsigned int test2 = 1000; xdata unsigned long int result; int main () { result=(unsigned long int)test1*(unsigned long int)test2; // result is 464 instead of 66000 // it seems that the compiler does the calculation // with 16 bit operations }
The same code works correct when using signed long int.
Maybe it is related to this bug.
What's New in C51 Version 8.16a http://www.keil.com/update/whatsnew.asp?p=C51&v=8.16a [Cx51 Compiler] Corrected a problem introduced in V8.15. When int numbers are multiplied and assigned to long, the result may be incorrect.
Tsuneo
You gave me hope for my next release.
I wasn't able to try using the latest version of c51. Till now I have optimised code and reduced max numbers to fit 16 bits.
cheers