Matrisberäkningar med för STM32?
Re: Matrisberäkningar med för STM32?
Hm, program kopieras alltid in i RAM på en PC, och körs från RAM... ty processorn kan inte ladda instruktioner från en hårddisk, sdkort, eller liknande, utan endast RAM... (även/endast ROM/FLASH på en typisk mikrokontroller).
Angående samplingshastighet, varför så långsam? Är det bara för att du vill vara säker på att programmet ska hinna göra alla beräkningar på aktuell processor? Eller finns det någon annan fördel med långsam (500 - 1000ms) sampling, istället för t.ex 10ms, som ju jag tänker vore bättre?
Angående samplingshastighet, varför så långsam? Är det bara för att du vill vara säker på att programmet ska hinna göra alla beräkningar på aktuell processor? Eller finns det någon annan fördel med långsam (500 - 1000ms) sampling, istället för t.ex 10ms, som ju jag tänker vore bättre?
Re: Matrisberäkningar med för STM32?
Jag tog först 1 sekund för jag skulle göra mina beräkningar i Java och köra Raspberry Pi.
Sedan gick jag över till C++ då jag insåg att jag behövde prestanda. C++ var för stort verktyg för mig så jag gick till C istället. Att kunna Java och C++ samtidigt är väldigt krävande.
Sedan gick jag över till STM32 och programmerade ett bibliotek i C, den jag håller på att utveckla just nu. Jag ska bygga en observability matrix, även kallad observationsmatrisen.
Där efter gick jag ned till 0.5 sekunder i samplingsintervall för jag insåg hur snabbt C var jämfört med Java. Då fick jag dubbelt så mycket data och då kunde inte STM32 klara utav all denna data. Jag ska ju hålla på att först och främst reglera temperatur, adaptivt. Då tror jag att 0.5 sekunders samplingsintervall är nog perfekt. Behövs inte snabbare eller segare.
Så jag går nu över för att hitta något super super super smalt linux OS som har varken något av något. Bara styrning av I/O, inget mer. Inget X, USB, tangentbord eller något. Bootloader + C program endast.
Då lär jag få ett stabilt och bra reglersystem som har mycket ramminne
Sedan gick jag över till C++ då jag insåg att jag behövde prestanda. C++ var för stort verktyg för mig så jag gick till C istället. Att kunna Java och C++ samtidigt är väldigt krävande.
Sedan gick jag över till STM32 och programmerade ett bibliotek i C, den jag håller på att utveckla just nu. Jag ska bygga en observability matrix, även kallad observationsmatrisen.
Där efter gick jag ned till 0.5 sekunder i samplingsintervall för jag insåg hur snabbt C var jämfört med Java. Då fick jag dubbelt så mycket data och då kunde inte STM32 klara utav all denna data. Jag ska ju hålla på att först och främst reglera temperatur, adaptivt. Då tror jag att 0.5 sekunders samplingsintervall är nog perfekt. Behövs inte snabbare eller segare.
Så jag går nu över för att hitta något super super super smalt linux OS som har varken något av något. Bara styrning av I/O, inget mer. Inget X, USB, tangentbord eller något. Bootloader + C program endast.
Då lär jag få ett stabilt och bra reglersystem som har mycket ramminne
Re: Matrisberäkningar med för STM32?
Bearing, linux har som ett av de första stegen i bootningen att montera ett minimalt filsystem i ram. Det kallas initramfs och innehåller t ex kernel modules för t ex diskhantering. Det frigörs så småningom och rootfilsystem mm monteras. Har en ganska vag bild av hur det fungerar, många år sedan jag pillade med sånt. Men man skulle kunna lägga till nåt där.
Samtidigt måste man boota från något media, även med initramfs. Och det är väl minst lika enkelt att då boota ett riktigt, minimalt linux och köra där. Dags att börja googla efter minimal linux raspberry.
Samtidigt måste man boota från något media, även med initramfs. Och det är väl minst lika enkelt att då boota ett riktigt, minimalt linux och köra där. Dags att börja googla efter minimal linux raspberry.
Re: Matrisberäkningar med för STM32?
Bootloader finns ju inbyggt i rom. Den läser filen kernel.img från sd-kortet till ram och exekverar det som hamnar på adress 0x80000. Det behövs alltså inget initramfs eller strippat linux om man bara vill köra sin kod. Det är bara läsa instruktionerna ovan och bygga koden på rätt sätt.
Det kräver förstås att du lär dig skillnaderna mellan stm32 och bc2xxx. Till exempel hur man adresserar minnet, använder serieport och IO. Allt är dokumenterat och det finns bibliotek att välja på.
Enklare och snabbare att komma igång är det säkert att bara ladda ner RealtimePi och köra, men då har du ju Linux i botten.
Det kräver förstås att du lär dig skillnaderna mellan stm32 och bc2xxx. Till exempel hur man adresserar minnet, använder serieport och IO. Allt är dokumenterat och det finns bibliotek att välja på.
Enklare och snabbare att komma igång är det säkert att bara ladda ner RealtimePi och köra, men då har du ju Linux i botten.
Re: Matrisberäkningar med för STM32?
Jag tror att till att börja med så kommer jag köra ett Linux OS. Jag tänkte inte börja på #1 bästa, utan jag försöker få saker att fungera först.
Har ni någon bra rekommendation på ett Linux OS som har X-server, terminalbaserat och har inga så kallade interrupts?
Har ni någon bra rekommendation på ett Linux OS som har X-server, terminalbaserat och har inga så kallade interrupts?
Re: Matrisberäkningar med för STM32?
Du menar att du vill att hela linuxkärnan ska köra pollat och inte använda interrupt?
Re: Matrisberäkningar med för STM32?
Isåfall skulle jag nog börja med att prova RealtimePI. Det är lätta att installera: https://github.com/guysoft/RealtimePi
När du fått igång din kod och provat att det funkar läs på om "isolcpu" och "tasksel". Det gör att du kan köra din kod på en kärna och låta linux använda dom andra kärnorna i CPUn.
När du fått igång din kod och provat att det funkar läs på om "isolcpu" och "tasksel". Det gör att du kan köra din kod på en kärna och låta linux använda dom andra kärnorna i CPUn.
Re: Matrisberäkningar med för STM32?
Jag menar att själva Linux systemet ska endast utföra enkla saker så som att visa på terminalen, USB kommunikation och själva C-programmet. Inget mer.AndLi skrev:Du menar att du vill att hela linuxkärnan ska köra pollat och inte använda interrupt?
Re: Matrisberäkningar med för STM32?
USB är inte enkelt.
Video är inte enkelt.
Men ja, ett Linux system som bara utför "the bare minimum" ska väl gå att ordna antar jag.
Det kanske är jag som är ute att cykla men det viktiga är väl att samplingen går stabilt och det kan ju fixas med en interrupt och lite timer-styrning.
Om sedan matematiken tar 100ms eller 150ms lär ju ha mindre betydelse om bara samplingen är stabil.
Video är inte enkelt.
Men ja, ett Linux system som bara utför "the bare minimum" ska väl gå att ordna antar jag.
Det kanske är jag som är ute att cykla men det viktiga är väl att samplingen går stabilt och det kan ju fixas med en interrupt och lite timer-styrning.
Om sedan matematiken tar 100ms eller 150ms lär ju ha mindre betydelse om bara samplingen är stabil.
Re: Matrisberäkningar med för STM32?
Det här förstår jag inte. Varför blir det mer data? Det blir väl exakt samma beräkning som ska köras per sample oavsett samplingsintervall? Så datan (storleken på matriserna) blir väl samma? Den enda ändringen du behöver göra borde väl vara att justera någon konstant som innehåller samplingsintervallet. Ändra "dt" från 1.0 till 0.5?Al_Bundy angående ändring från 1s till halv sekund skrev: då fick jag dubbelt så mycket data och då kunde inte STM32 klara utav all denna data
Tidigare skrev du:
Din senaste version har 144x144. Kommer denna ändring för att du ökat samplingshastigheten, eller har du ändrat något annat?Men max är 36x36 för just det program jag tänker använda
Re: Matrisberäkningar med för STM32?
Mitt förslag är att du börjar med vilken RPi-dist som helst som har X, ssh och vad nu du mer önskar.
Kör ditt program och analysera resultatet och kolla efter ev samplingsjitter mm.
Är det ett problem, då är det dags att se över vilka processer som kör i OS:et som du kan vara utan.
Lär dig hur du stänger av dem.
Till slut har du kanske har ett Linux OS med serieports terminal som i praktiken endast kör ett skal och ditt beräkningsprogram.
Skulle det sedan fortfarande vara ett problem med samplingsjitter eller realtidsegenskaper så kan man labba att köra helt utan OS eller byta till RealTimePi om det nu inte duger som startdist enligt vad jag skrivit ovan.
Kör ditt program och analysera resultatet och kolla efter ev samplingsjitter mm.
Är det ett problem, då är det dags att se över vilka processer som kör i OS:et som du kan vara utan.
Lär dig hur du stänger av dem.
Till slut har du kanske har ett Linux OS med serieports terminal som i praktiken endast kör ett skal och ditt beräkningsprogram.
Skulle det sedan fortfarande vara ett problem med samplingsjitter eller realtidsegenskaper så kan man labba att köra helt utan OS eller byta till RealTimePi om det nu inte duger som startdist enligt vad jag skrivit ovan.
Re: Matrisberäkningar med för STM32?
Eftersom att han kör kalmanfilter och grejer lär väl ett jitter på ett par promille inte ha någon betydelse. Brus från ADC, tidskonstanter i temperaturgivare, begränsningar i prestanda på drivsteg för utsignal, och liknande tror jag har betydligt större betydelse.
Re: Matrisberäkningar med för STM32?
Jag kör inte kalmanfilter just nu, men det kanske blir aktuellt i framtiden. Jag kör MPC och systemidentifiering.bearing skrev:Eftersom att han kör kalmanfilter och grejer lär väl ett jitter på ett par promille inte ha någon betydelse. Brus från ADC, tidskonstanter i temperaturgivare, begränsningar i prestanda på drivsteg för utsignal, och liknande tror jag har betydligt större betydelse.
Fast borde man inte kunna ha en godtycklig Linuxdist för valfri dator? Jag behöver inte köra en Paj. Men målet var att jag skulle programmera till realtidssystem. Jag brukar alltid köra Ubuntu.mankan skrev:Mitt förslag är att du börjar med vilken RPi-dist som helst som har X, ssh och vad nu du mer önskar.
Kör ditt program och analysera resultatet och kolla efter ev samplingsjitter mm.
Är det ett problem, då är det dags att se över vilka processer som kör i OS:et som du kan vara utan.
Lär dig hur du stänger av dem.
Till slut har du kanske har ett Linux OS med serieports terminal som i praktiken endast kör ett skal och ditt beräkningsprogram.
Skulle det sedan fortfarande vara ett problem med samplingsjitter eller realtidsegenskaper så kan man labba att köra helt utan OS eller byta till RealTimePi om det nu inte duger som startdist enligt vad jag skrivit ovan.
För jag valde först 72 punkter, nu valde jag 144 punkter. Alltså jag bara gjorde lite mera tester. Hur mycket mätdata jag egentligen ska använda mig av, visar sig. Jag kanske klarar mig på 30x30 matriser, men troligtvis inte.bearing skrev:Det här förstår jag inte. Varför blir det mer data? Det blir väl exakt samma beräkning som ska köras per sample oavsett samplingsintervall? Så datan (storleken på matriserna) blir väl samma? Den enda ändringen du behöver göra borde väl vara att justera någon konstant som innehåller samplingsintervallet. Ändra "dt" från 1.0 till 0.5?Al_Bundy angående ändring från 1s till halv sekund skrev: då fick jag dubbelt så mycket data och då kunde inte STM32 klara utav all denna data
Tidigare skrev du:Din senaste version har 144x144. Kommer denna ändring för att du ökat samplingshastigheten, eller har du ändrat något annat?Men max är 36x36 för just det program jag tänker använda
Vad sägs som någon minimal Debian dist? Debian är trygg, tråkigt och säker.Icecap skrev:USB är inte enkelt.
Video är inte enkelt.
Men ja, ett Linux system som bara utför "the bare minimum" ska väl gå att ordna antar jag.
Det kanske är jag som är ute att cykla men det viktiga är väl att samplingen går stabilt och det kan ju fixas med en interrupt och lite timer-styrning.
Om sedan matematiken tar 100ms eller 150ms lär ju ha mindre betydelse om bara samplingen är stabil.
Re: Matrisberäkningar med för STM32?
Vad tror ni om att bygga eget Linux? Det finns hur mycket manualer som helst.
Eller ska man satsa på typ Ubuntu Server, bara för att det är enkelt?
Eller ska man satsa på typ Ubuntu Server, bara för att det är enkelt?
Re: Matrisberäkningar med för STM32?
Bygga eget vinner man inget på. Om inte raspbian/ubuntu eller realtimepi funkar så är det bara "bare metal" som gäller.