Hi
Hardware: MS9SO8GT60 with 32.768 kHZ xtal
programmer: Cyclone Pro HC08 - HCS08
IDE: Freescale Codewarrior 5.9.0
I seem to be having a timing issue with how long it takes to perform the calculation, and then assigning the computed value.
I assumed it wouldnt move to the next step, before the calculation had finished, but when I step through the code, it looks like it assigns 'tempunit' to activeArray before the value is finished calculating. and therefore, assigns '0'.
so all this is doing is a 6 digit number (date) and putting it into a 3 byte array (activeArray)
so for example
divisor = 10/06/02
then activeArray should be [ 10, 6, 2 ];
but it ends up being [0, 6, 2]
for (i=0;i<=2;i++){ tempunit = (BYTE)(divisor%10); divisor /= 10; //new value to mod by 10 temptens = (BYTE)(divisor%10); temptens *= 10; temptens += tempunit; activeArray[j] = tempunit; j--; divisor /= 10; //new value to mod by 10 }
is this possible?
已解决! 转到解答。
Hello,
Assuming the initial value of the variable divisor is the unsigned 16-bit value 100602 (not entirely clear from your post), the initial value of variable j is 2, and that you complete the loop three times, rather than twice, I would expect to get the result 0, 6, 2.
I think your problem is with the line activeArray[j] = tempunit;
It would seem that the expression should be activeArray[j] = temptens;
Perhaps the code might be simplified, as follows
:
for (j = 2; j; j--) { // Loop twice only activeArray[j] = (byte)(divisor % 100); divisor /= 100; // new value to mod by 100}activeArray[0] = (byte)divisor;
Regards,
Mac
Hello,
Assuming the initial value of the variable divisor is the unsigned 16-bit value 100602 (not entirely clear from your post), the initial value of variable j is 2, and that you complete the loop three times, rather than twice, I would expect to get the result 0, 6, 2.
I think your problem is with the line activeArray[j] = tempunit;
It would seem that the expression should be activeArray[j] = temptens;
Perhaps the code might be simplified, as follows
:
for (j = 2; j; j--) { // Loop twice only activeArray[j] = (byte)(divisor % 100); divisor /= 100; // new value to mod by 100}activeArray[0] = (byte)divisor;
Regards,
Mac
Wow. I am a retard.
I ended up just coding a new loop anyway, coz I often find, when I cant see the bug, it helps to start from scratch...is it just me that has this problem?
it is very similar to your solution
for (i=0;i<=2;i++){ activeArray[j] = (BYTE)(divisor%100); divisor /= 100; if (j>0) j--; }
Thanks anyway!