Sida 6 av 7

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 2 augusti 2020, 13:35:17
av DanielM
2. Jag behöver inte sätta en pekare på orginalvärdet. Arrayen är alltid på index 0 så fort jag anropar funktionen med den :)

4. Är det någon assemblerskillnad mellan P++ jämfört med P?


Nu hittade jag problemet! Denna gör INTE som den ska göra.

Kod: Markera allt

// Repeat, substract, power and then sum
// MATLAB:
// Q = sum(pow(P-repmat(Q, 1, size(P, 2)), 2), 1);
static void repmat_substract_power_sum(float Q[], const float P[]){
	// First row of Repeat -> Substract ->Ppower^2 -> Sum
	float q = *Q; // First column and first row value
	for(uint16_t j = 0; j < Pcolumns; j++){
		*Q = *P - q; // Substract
		*Q = *Q * *Q; // Power^2
		Q++;
		P++;
	}

	// The rest of the rows of Repeat -> Substract -> Power^2 -> Sum
	for(uint16_t i = 1; i < Prows; i++){
		q = *Q; // First column value at row i
		for(uint16_t j = 0; j < Pcolumns; j++){
			*Q = *P - q; // Substract
			Q[j] += *Q * *Q; //  Power^2 -> Sum to the top row at column index j
			Q++;
			P++;
		}
	}
}
Här är ett problem.

Om jag håller på och trixa med Q++ lite här och där, sedan så anropar jag Q[j] där jag vill skriva till ett specifikt index. Då fungerar det inte.

Kod: Markera allt

Q[j] += *Q * *Q; //  Power^2 -> Sum to the top row at column index j
Lösningen var att byta ut till denna rad:

Kod: Markera allt

Q[-Pcolumns*i] += *Q * *Q; //  Power^2 -> Sum to the top row at column index j
Nu är det optimalt.

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 2 augusti 2020, 17:08:45
av Rick81

Kod: Markera allt

Q[-Pcolumns*i] += *Q * *Q;
Ser inte rätt ut med negativa index?

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 2 augusti 2020, 17:59:56
av DanielM
Det är korrekt med tanke på att jag förflyttar ju pekaren med Q++ :)

Testa så ska du få se att det är korrekt utfört och indexerat.

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 2 augusti 2020, 18:41:19
av DanielM
Laddar upp två stycken exempel nu. YALE och JAFFE. YALE är alltså identifiering av YALE databasen. JAFFE är Japanese Female Facial Expression databas.

JAFFE har matrisdimensionerna som är deklarerad som statiska

Kod: Markera allt

float 213*8 
float 65536*8
uint16_t 1*213
float 213*8 
uint16_t 1*213
YALE har matrisdimensionerna som är deklarerad som statiska

Kod: Markera allt

float 166*13 
float 77760*13
uint16_t 1*166
float 166*13 
uint16_t 1*166
Jag återanvänder alla matriser och skapar inget nytt. Förutom kanske några variabeler och en array på ca 10-20 element i form av uint16_t.

Nu vet vi hur mycket FLASH som behövs på ett ungefär. Visst är en STM32 helt borträknad här nu? Jag måste ha alltså typ Raspberry?

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 2 augusti 2020, 19:07:54
av AndLi
Varför är stm32 borträknad? Det är bara att sätta externt flash?

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 2 augusti 2020, 19:32:25
av DanielM
Men var inte det för RAM endast?

Annars hittar jag QSPI för W25Q32 W25Q128. 32:an är på 4 Mb och 128 är på 16 Mb. Jag tror en 16 Mb räcker gott och väl för mig.
Dessutom har jag bestämt mig för kameran OV2640.

Men jag har dock inte bestämt mig för LCD. Ska man ha en med "många pinnar" eller ska man ta en med SPI? Jag har aldrig riktigt förstått vad "många" pinnar ska vara bra till.

En fråga! Om jag har deklarerat arrayerna som statiska. Då behöver man väll inge mycket RAM? För ramet är väll till för att allokera minne som är ej skapat vid kompileringen?

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 2 augusti 2020, 20:49:49
av Rick81
Kolla devkitet med stm32f7 jag tipsade om det hade externt ram och flash

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 2 augusti 2020, 22:12:03
av AndLi
Vad skulle begränsa dig att bara ansluta RAM externt? Det beror ju bara på hur acessen sker, om du behöver sköta skyfflandet manuellt ellet kärnan har support för det. Vid manuellt arbete kan du ju skriva drivers till att möjligt..

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 2 augusti 2020, 22:13:18
av Rick81
Const ska du använda för lägga arrayer i flash. Men du kan inte modifiera dem då.

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 2 augusti 2020, 22:17:09
av DanielM
Du tror att det är mer värt att köpa ett färdigt utvecklingskit jämfört med att köpa delar för sig?

Vi kan jämföra lite priser. Låt oss säga att jag tänkte ha en STM32FF446RE. Det är ca 300 kr med frakt från Condrad.

Sedan skulle jag vilja ha en LCD: 115 kr
https://www.banggood.com/3_2-Inch-ILI93 ... rehouse=CN

Kamera: 85 kr
https://www.banggood.com/XD-95-OV2640-C ... rehouse=CN

Extra QSPI flash: 20 kr
https://www.banggood.com/W25Q32-W25Q128 ... rehouse=CN


Lägg på frakt också: 30 kr med försäkring mot tullen.

Så sammanlagt: 300+115+85+20+30 = 550 kr.

Och jämfört med STM32F7508-DK = 472 kr.
Så då kanske det är rent av värt att gå på en STM32F7508-DK?

https://www.digikey.se/product-detail/e ... D/10209874
https://www.digikey.se/product-detail/e ... ND/5267791

Vad föredrar ni? Jag föredrar den billigaste. :lol:

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 2 augusti 2020, 22:20:58
av DanielM
Rick81 skrev: 2 augusti 2020, 22:13:18 Const ska du använda för lägga arrayer i flash. Men du kan inte modifiera dem då.
Det behövs inte. Dom ska inte ens ändras :) Det är modellens parametrar.
Nu kanske ni är så van med PCA och LDA inom statistiken? Det är detta jag har använt för att hitta fram modellen.

Jag kan säga att det kan ta flera minuter för att räkna fram en modell. Jag använder Generalized Eigenvalue Problem algoritmen.

\(Av = \lambda B v\)

Denna är enormt svår att beräkna. Speciellt om \(B\) är singulär, vilket oftast alltid är inom bildigenkänning. Då får man använda regularisering.

\(Av = \lambda (B+\alpha I) v\)

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 2 augusti 2020, 22:45:30
av AndLi
Jag skulle föredra det som är mest komplett och testat redan.. om det redan finns komponenter specade för projektet vill jag ha en mockup så lika slutgiltiga kortet som möjligt..

Men jag jobbar ju med det i ett vinstdrivande företag och några tusen hit eller dit för labkort ses ju knappt som en kostnad.

Första riktiga pcb brukar också tas fram relativt tidigt i projekten och det är mot det största delen av kodandet sker. Finns få saker som kan skapa sådan frustration som glappande prototyper och en eller två dagars strul är är ju ett antal tusen i kostnad...

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 2 augusti 2020, 23:31:19
av DanielM
Tackar för informationen.
Då väljer jag komplett. Ett STM32F7508-DK får det bli, om det inte finns en mer värd F7:a.

Notera att jag är bara behov utav minne, kamera, processor och LCD.

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 3 augusti 2020, 00:23:03
av Rick81
Displayen på STM32f7 devkitet är ju dessutom större och högre upplösning än den du tänkt beställa. Och den har microSDkortshållare så du kan ha flera GB på dina modeller om du behöver.

Dock får du köpa till kamera.

Re: Linuxbaserade processorsystem VS FreeRTOS

Postat: 3 augusti 2020, 00:29:16
av DanielM
Min Ili9341 LCD har också SD kort bakom sig.

Du menar en STM32F4DIS-CAM ?

Nu behöver jag bara 8-bit bilder med tanke på min algorithm vill endast ha 8 bit bilder. Det räcker. Svartvita bilder är ockdå bra.