Sida 3 av 5

Re: Hur många av er här kör STM32?

Postat: 24 maj 2020, 14:28:22
av sodjan
> 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?

Re: Hur många av er här kör STM32?

Postat: 24 maj 2020, 14:35:26
av DanielM
Lugn lugn :) Vi vill inte att diskussionen ska bli som Stackoverflow.

Här är lösningen.
https://github.com/mpaland/printf

Bara anropa

Kod: Markera allt

sprintf_(text, "%f", a);
Jag antar också att jag får söka efter en equivalent metod för sscanf för att konvertera om text till float.

Re: Hur många av er här kör STM32?

Postat: 24 maj 2020, 14:38:11
av sodjan
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?

Re: Hur många av er här kör STM32?

Postat: 24 maj 2020, 14:41:13
av DanielM
Du menar så här?
Om det hade fungerat med RTOS så hade jag inte frågat :)

Re: Hur många av er här kör STM32?

Postat: 24 maj 2020, 14:46:24
av Icecap
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å.

Re: Hur många av er här kör STM32?

Postat: 24 maj 2020, 14:53:47
av DanielM
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.

Kod: Markera allt

float value = (float)atof(text); // char array to float
Uppdatering 2:
Inte för att skryta. Men gillar verkligen nostalgin här :P
20200524_150652.jpg

Re: Hur många av er här kör STM32?

Postat: 24 maj 2020, 15:29:22
av TomasL
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.

Re: Hur många av er här kör STM32?

Postat: 24 maj 2020, 15:35:15
av DanielM
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.

Re: Hur många av er här kör STM32?

Postat: 24 maj 2020, 15:54:12
av Rick81
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...

Re: Hur många av er här kör STM32?

Postat: 24 maj 2020, 16:05:30
av DanielM
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?

Postat: 25 maj 2020, 00:52:28
av Andax
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?

Postat: 25 maj 2020, 00:57:21
av Andax
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.

Re: Hur många av er här kör STM32?

Postat: 30 maj 2020, 19:45:14
av DanielM
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?

Re: Hur många av er här kör STM32?

Postat: 30 maj 2020, 20:15:21
av hummel
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?

Postat: 30 maj 2020, 20:23:17
av DanielM
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?