We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I get strange behaviour with integer conversion; in the following example T4Frozen never reaches the value 790 because it turn back to 700 when it step over 767. This happen both on the target and on Dscope.
T4Frozen=700; while(TRUE){ PeriodoEncoder=(float)T4Frozen; PeriodoEncoder/=2.5; T4Frozen++; if(T4Frozen>790){ Dummy=700; } }
Have you declared it volatile? "Is it possible that a 32 bit float is affected by ISR during main loop reading in the way that low 16 bit are 'old' and the high 16 bit are 'new'?" Yes: of course that is entirely possible - due to the very nature of the way interrupts work! And, of course, it's even worse with floats because the processor has to do a lot of work to handle them - so even more chance for an interrupt to happen in the middle of it! "If so, which treatments can I adopt to avoid this problem?" Err - disable the interrupt...? BTW: do you really need to use floating point? Have you considered fixed-point? (wouldn't make any difference to this particular problem, though).