Sida 19 av 70

Re: Matrisberäkningar med för STM32?

Postat: 16 januari 2019, 19:02:14
av Mr Andersson
Från tidigare inlägg tror jag han menar saker som min_funktion(malloc(n))
Sparar du inte pekaren från malloc läcker du minne. Ingenting görs automatiskt.

Re: Matrisberäkningar med för STM32?

Postat: 16 januari 2019, 20:35:21
av Al_Bundy
Okej. Tackar. Då vet jag.

Re: Matrisberäkningar med för STM32?

Postat: 20 januari 2019, 18:49:25
av Al_Bundy
Nu är jag klar med mitt matrisbibliotek. :) Den innehåller väldigt mycket som MATLAB kan. Grundläggande t.ex. QR-fakorisering, LU-faktorisering, pinv osv.

Re: Matrisberäkningar med för STM32?

Postat: 20 januari 2019, 18:55:48
av AndLi
Men vi får inte se antar jag?

Re: Matrisberäkningar med för STM32?

Postat: 20 januari 2019, 19:40:05
av Al_Bundy
Jo. Jag ska bara göra en exempellista på kommandon och praktiska exempel så man vet hur man ska använda denna :) Kommer snart!

Re: Matrisberäkningar med för STM32?

Postat: 20 januari 2019, 21:21:31
av Al_Bundy
Nu är den klar. Här är exempelkoden. Om ni hittar bättre lösningar eller liknande så säg bara till.

Något mystiskt som jag inte har lyckats lösa är denna.

Kod: Markera allt

passing argument 1 of ‘create’ from incompatible pointer type [-Wincompatible-pointer-types]
Denna får jag vid denna kod.

Kod: Markera allt

/*
	 * Create a matrix
	 */
	float values1[5][5] = { { 1, 76, 86, 1, 5 },
							{ 1, 5, -6, 0, 3 },
							{ -5, 7, 3, 87, 3 },
							{ -8, 3, 1, 4, -1 },
							{ 7, 9, 1, 28, 4 } };

	matrix* A = create(&values1, 5, 5); // <--passing argument 1 of ‘create’ from incompatible pointer type [-Wincompatible-pointer-types]

Re: Matrisberäkningar med för STM32?

Postat: 20 januari 2019, 23:22:43
av Shimonu
Du ger en pekare till create some inte stämmer med typen du satt i deklarationen till create.

Re: Matrisberäkningar med för STM32?

Postat: 20 januari 2019, 23:33:15
av Al_Bundy
Funktionen create har denna dekleration

Kod: Markera allt

matrix* create(float* arr2D, int n, int m);
Denna funktion får noteringen
expected ‘float *’ but argument is of type ‘float (*)[5][5]’
Nu löste jag problemet! :)

Jag uppdaterar projektet.

Re: Matrisberäkningar med för STM32?

Postat: 21 januari 2019, 08:22:40
av Rick81
Koden ser ju lovande ut (bara kollat den, inte testat). Bra jobbat!

Har du verifierat att den ger samma resultat som ditt matlab exempel du visade?

Hur lång tid tar det lösa 36x36 matriser med sv på stm32f4?

Re: Matrisberäkningar med för STM32?

Postat: 21 januari 2019, 14:21:44
av Al_Bundy
Tackar!

Jag har verifierat med GNU Octave, vilket använder samma MATLAB kod. Det stämmer.

Det har jag inte testat än. Jag vet inte riktigt hur jag ska kunna testa det. Det viktigaste för mig är att få konstant samplingsintervall. Hade jag kört detta på ett operativsystem så skulle jag få olika samplingsintervall. Men kör jag direkt C på en mikroprocessor (jag vet, man kör inte C direkt på en uC, men ni förstår vad jag menar) så kommer man få konstant samplingsitervall om temperaturen är konstant.

Re: Matrisberäkningar med för STM32?

Postat: 21 januari 2019, 18:12:20
av Klas-Kenny
Jag vet inte riktigt hur jag ska kunna testa det.
Ett enkelt sätt brukar vara att typ sätta en utgång hög innan du kör beräkningarna, sen sätta den låg direkt efter.

Sen är det bara att hänga på oscilloskopet.
Tiden det tar att sätta utgången hög/låg är i de flesta fall försumbar om man inte testar funktioner som går på väldigt få instruktioner.

Re: Matrisberäkningar med för STM32?

Postat: 21 januari 2019, 20:16:30
av Rick81
Du kan också sätta upp en timer eller systick med 1 ms upplösning och mäta ticks före och efter operationen

Re: Matrisberäkningar med för STM32?

Postat: 21 januari 2019, 20:26:07
av baron3d
Eller läsa "performance counter" före och efter och sedan beräkna skillnaden.

Re: Matrisberäkningar med för STM32?

Postat: 21 januari 2019, 21:10:15
av Al_Bundy
Tackar.

Jag ska testa det. Kan inte ni testa det också? Lagar mat.

Re: Matrisberäkningar med för STM32?

Postat: 21 januari 2019, 22:01:05
av Rick81
För att få konstants samplingsintervall rekommenderar jag köra ADC mot buffer via DMA och använda timer för trigga varje ADC. efter X ADC sätter du upp interupt där du växlar DMA buffer. På så sätt kan du köra samplingen parallellt med matris operationer och kan använda i princip all cpukraft till beräkningar.

Vi vet ju inte vilka 36x36 operationer du vill göra.....