Hur många av er här kör STM32?
Re: Hur många av er här kör STM32?
> Jag anmälde tråden för att få två trådar som håller sig till ämnet...
Vad har det för betydelse att *trådstartaren* väljer att "bredda" ämnet?
Vad har det för betydelse att *trådstartaren* väljer att "bredda" ämnet?
Re: Hur många av er här kör STM32?
Lugn lugn Vi vill inte att diskussionen ska bli som Stackoverflow.
Här är lösningen.
https://github.com/mpaland/printf
Bara anropa
Jag antar också att jag får söka efter en equivalent metod för sscanf för att konvertera om text till float.
Här är lösningen.
https://github.com/mpaland/printf
Bara anropa
Kod: Markera allt
sprintf_(text, "%f", a);
Re: Hur många av er här kör STM32?
Men är det inte bara att slå på stöd för float via rätt linker options?
Istället för att länka in en implementation av funktionen från en helt ny källa?
Istället för att länka in en implementation av funktionen från en helt ny källa?
Re: Hur många av er här kör STM32?
Du menar så här?
Om det hade fungerat med RTOS så hade jag inte frågat
Om det hade fungerat med RTOS så hade jag inte frågat
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Hur många av er här kör STM32?
Ett RTOS är bara ett sätt att köra fler trådar efter varandra o ta hand om lite interrupts.
Det är INTE ett hinder i att ha funktioner i systemet!
Så jag tror att man ska enabla float-funktionerna andra ställen också.
Det är INTE ett hinder i att ha funktioner i systemet!
Så jag tror att man ska enabla float-funktionerna andra ställen också.
Re: Hur många av er här kör STM32?
Detta testade jag med igår och det gav hard fault. Orsaken var då att stack size var för litet. Så jag flyttade runt lite kod så jag deklarerar inte några stora arrayer i trådarna. Då fungerar det.
Nu var det så att jag kan ej konvertera om float till text i RTOS. Utanför RTOS fungerar det. Men med sprintf_ funktionen så fungerar det.
Mitt nästa problem är att lösa sscanf, som ej fungerar med RTOS om man ska konvertera char array till float.
Uppdatering:
För er som kör RTOS och ska få över char array till float så rekommederar jag inte sscanf. Jag rekommenderar.
Uppdatering 2:
Inte för att skryta. Men gillar verkligen nostalgin här
Nu var det så att jag kan ej konvertera om float till text i RTOS. Utanför RTOS fungerar det. Men med sprintf_ funktionen så fungerar det.
Mitt nästa problem är att lösa sscanf, som ej fungerar med RTOS om man ska konvertera char array till float.
Uppdatering:
För er som kör RTOS och ska få över char array till float så rekommederar jag inte sscanf. Jag rekommenderar.
Kod: Markera allt
float value = (float)atof(text); // char array to float
Inte för att skryta. Men gillar verkligen nostalgin här
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Hur många av er här kör STM32?
Om du använder ett RTOS brukar man väl vilja ha funktioner som är threadsafe, kanske där problemet ligger, eller att du har för liten stack.
Vore ju intressant om du talade om vilket RTOS du använder.
Vore ju intressant om du talade om vilket RTOS du använder.
Re: Hur många av er här kör STM32?
Det var för liten stack som jag hade. Jag använder ju bilder så jag deklarerade bilderna någon annanstans.
Men det var CMSIS_V2.
Men det var CMSIS_V2.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Hur många av er här kör STM32?
Hade du inte samma problem i en annan tråd med sprintf och float? Hur löste du den?
Om du måste utöka stacken för sprintf och float tror jag du behöver se över din stackhantering...
Om du måste utöka stacken för sprintf och float tror jag du behöver se över din stackhantering...
Re: Hur många av er här kör STM32?
Det var inte sprintf som var fel på. Snarare att få float till char[] som var problemet.
Re: Hur många av er här kör STM32?
Problemet med sprintf i FreeRTOS är att det allokerar minne första gången det anropas. Ett trick att funka i trådarna är att göra en dummy-sprintf innan initiering av FreeRTOS i main(). Då slipper man hard faults. Eventuellt borde man kanske skydda med en mutex. Dock har jag aldrig haft problem.
Re: Hur många av er här kör STM32?
Jag har kört mycket med CubeMX och HAL. Har haft förvånande lite problem med det. Om man kör med en stor skärm är nya STM32CubeIDE ganska trevligt.
Dock föredrar jag att debugga i Ozone istället för i CubeIDE.
Att sätta upp timers, DMA, interrupts mm är oerhört enkelt med CubeMX.
Dock föredrar jag att debugga i Ozone istället för i CubeIDE.
Att sätta upp timers, DMA, interrupts mm är oerhört enkelt med CubeMX.
Re: Hur många av er här kör STM32?
På tal om timers!
Jag undrar hur jag kan få ner min TIM3 till 1 Hz. Jag tänker ha en räknare som räknar 1 gång per sekund.
Men min prescaler kan endast godta 16 bit värden.
Sätter jag prescaler = 83 så är min 84 Mhz klocka på 1 Mhz.
Men hur gör jag resten då?
Min nuvarande konfiguering är att klockan är på 84 Mhz. Då skapar jag en räknare som körs på 84/(1+20), dvs 4 Mhz.
Jag har en period på 10000.
Nu har jag en räknare på 400 Hz.
1*10^6*(84/(1+20)/10000) = 400.
Och 10000/400 = 25. Alltså en PWM signal som har period på 25 sekunder?
Jag undrar hur jag kan få ner min TIM3 till 1 Hz. Jag tänker ha en räknare som räknar 1 gång per sekund.
Men min prescaler kan endast godta 16 bit värden.
Sätter jag prescaler = 83 så är min 84 Mhz klocka på 1 Mhz.
Men hur gör jag resten då?
Min nuvarande konfiguering är att klockan är på 84 Mhz. Då skapar jag en räknare som körs på 84/(1+20), dvs 4 Mhz.
Jag har en period på 10000.
Nu har jag en räknare på 400 Hz.
1*10^6*(84/(1+20)/10000) = 400.
Och 10000/400 = 25. Alltså en PWM signal som har period på 25 sekunder?
Re: Hur många av er här kör STM32?
Ditt RTOS (vilket jag har för mig att du använder) bör ha funktionalitet för det.
Re: Hur många av er här kör STM32?
Såg detta nu att en hårdvaruräknare fungerar inte med RTOS. Man måste ha en mjukvaruräknare.
Men hur gör man detta i CubeMX?
Men hur gör man detta i CubeMX?