|
|
View previous topic :: View next topic |
Author |
Message |
Dieguito Guest
|
Division Problems, need help! |
Posted: Thu Dec 15, 2005 7:58 am |
|
|
Im have this code:
int dientes;
int16 diametro;
int32 longitud
....
....
...
for easy things, i make dientes=10 and diametro=1000
so when i do this:
longitud= ((int32)diametro*31415)/(dientes);
printf(lcd_putc,"%ld",longitud);
insted of 3141500 i get 320561.
if i replace the dientes by 10 like this
longitud=((int32)diametro*31415)/10;
i get the correct result, why???. division bug??
i try this too
longitud=((int32)diametro*31415)/((int32)dientes);
same bad result.
HELP PLEASE |
|
|
Ttelmah Guest
|
|
Posted: Thu Dec 15, 2005 9:37 am |
|
|
Have you tried this?.
Code: |
dientes=10;
longitud= ((int32)diametro*31415)/dientes;
|
I all honesty, it is behaving as if dientes, is actually getting set to '98' not '10'.
The error is not one that you would normally associate with an arithmetic error (these tend to be binary multiples, or binary 'masks' - where a value has overflowed the allocated storage size).
How is dientes being set/calculated?.
Best Wishes |
|
|
Dieguito Guest
|
|
Posted: Thu Dec 15, 2005 9:48 am |
|
|
You where right!!,
I dont know how even if i use #Zero_Ram
dientes was not zero!!!.
now is working, because before calculating dientes, i put it in zero.
Thanks |
|
|
SherpaDoug
Joined: 07 Sep 2003 Posts: 1640 Location: Cape Cod Mass USA
|
|
Posted: Thu Dec 15, 2005 10:25 am |
|
|
If dientes is getting values you are not giving it, check out where it is placed in RAM. Make sure it is not mapped to a register that is also used for something else. Possibly your header file is in error and dientes is being mapped to a register associated with a hardware function. _________________ The search for better is endless. Instead simply find very good and get the job done. |
|
|
Ttelmah Guest
|
|
Posted: Thu Dec 15, 2005 10:48 am |
|
|
It is though also worth saying, that if 'dientes', is a variable in a subroutine, you should never expect it to be 'zero', unless you have declared it as zero in the routne (int8 dientes=0;).
The reason is that CCS will reuse memory, that is not declared for 'static' or 'global' variables. So if you have a 'main', calling first one subroutine, then another, variables in the second subroutine, may well reuse the same memory area that has been used in the first. This is one reason why I don't use #zero_ram. This declaration, as well as having some problems on particular chips, may 'mislead' you into expecting a variable to be zero, when this is not guaranteed. All 'zero_ram', does, is ensure that the RAM is zero, at the moment of boot. From then on, it's contents _will_ change. Hence it is better to explicitly declare variables, and _never_ assume their contents.
Best Wishes |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|