When I run this code on my STM32L1 board, the debugger hangs once it reaches to a Float (in this case the variable 'Distance') or Delay, I mean it seems like it's processing, however it never goes through, and I have to close it and run the debugger again, which hangs of course again. Note that the code builds without errors or warnings. Is there's any special configuration for float ?
The following is the related part of the code:
void Delay(int x){ //input milliseconds, delay that number of milliseconds int a,b; for(a=0; a<x; a++){ for(b=0; b<1000; b++){ } } } . . . volatile int timespan = 0; // Total pulse width int main(void){ float Distance; // actual distance in cm . . . while(1){ TIM4_Echo_Read(); Distance = (timespan / 58.0); if (Distance <= 100){ GPIOB->BSRRL = (1<<7); } else { GPIOB->BSRRH = (1<<7); } Delay(10); }
timespan is declared as a global int. Note that none of this happens when I declare Distance as int instead of float.
Any idea why the debugger keeps getting stuck on float instructions?
If the target cpu is correctly chosen it should be using software libraries, and not permitting the FPU to be selected. If FPU code existed it would likely fault much earlier than this.
Check other things like the firmware and drivers for your debug pod, not sure that is the issue, but you should be able to stop the debugger and see exactly where it is stuck, and not require a reset or power cycle.
Do I have to define it or mention the float library at the start of the code? As of now I'm only including: #include <stdio.h> #include "stm32l1xx.h"
If yes, any idea what is the float software library for STM32Lxx?