Matrisberäkningar med för STM32?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

hawkan skrev:Inte så smidigt i C. Men det går såklart att lösa.
T ex returnera en pekare till en struct som innehåller all data man kan önska sej.
Dom borde bygga om C så att man kan göra det. Varför dem aldrig ändrar C förstår jag inte. Går det inte bara lägga till?
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

hummel skrev:
Al_Bundy skrev:
AndLi skrev: Det var en annorlunda vinkling av kritiken man hör om C, normalt brukar vara att det just tillåter användaren att göra vad som helst som får kritik för att användaren/programmeraren måste ha full koll för att inte ta sönder något. Men visst kan man inte C så blir det ju svårt att göra det man vill, upplever samma sak med JavaScript, helt värdelöst, det förstår mig inte...
Det är inget fel att hålla koll. Men varför går det inte passera en 2D array igenom en funktion och i funktionen så ska man mäta dimensionen på denna 2D array?
Varför kan inte C returnera flera värden samtidigt?

Varför har dem...medvetet...byggt C på detta vis?
Ofta genererar en pekare mindre kod än att passa en stor datastruktur vid anrop.
Du får snabbare kod (vilket du efterfrågar) genom pass by reference.
Okej. Så det kanske därför C är konstruerat så där? Det ska vara optimerat? Men C++ då?
Användarvisningsbild
Icecap
Inlägg: 26628
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Matrisberäkningar med för STM32?

Inlägg av Icecap »

En funktion i C kan fint skicka tillbaka fmer data än en variabel - man ska bara veta hur.

Vid att ange adressen på en eller fle variabler i parameterlistan TILL funktionen kan den skriva i dom och sedan bara rapportera tillbaka om allt gick bra eller inte - som exempel.
hawkan
Inlägg: 3421
Blev medlem: 14 augusti 2011, 10:27:40

Re: Matrisberäkningar med för STM32?

Inlägg av hawkan »

Och det är så du ska göra med dina matriser, Al.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Jag gör det redan. Men jag tycker att C kompilatorn borde förstå att man kanske vill skicka en 2D array rakt ut från en funktion. Ska väll inte vara så svårt att fixa och optimera detta, enligt dem som har skapat språket?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46906
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av TomasL »

Jamen, det är ju bara att skicka basadressen på din Array som argument i funktionsanropet.
Lätt som en plätt.
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: Matrisberäkningar med för STM32?

Inlägg av SvenW »

Om man skapar en variabel inne i en funktion så läggs den i en stack-frame. Dessa data förvinner när man lämnar funktionen även om de returneras.
Om man kör med en debugger fattar man sånt här efterhand.
Man tar alltså alltid med en pekare in som pekar på något som inte försvinner.
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Matrisberäkningar med för STM32?

Inlägg av sodjan »

> Känns som om vi kommit en bit ifrån ämnet nu men C har inte pass by reference.

Det håller jag inte med om. Alla pekar argument är per definition en "by reference" till det som pekaren "pekar på".

> Du skickar en pekare by value.

Ja, men det som pekaren pekar på är "by reference".

> Ändrar du pekaren i en underfunktion är den fortfarande oförändrad en nivå upp.

Man ändrar inte pekaren, utan det som pekaren pekar på. D.v.s. det som skickades "by reference".

Om jag anropar en funktion skriven i C från ett Cobol program så kan jag t.ex. skriva:

CALL MY-C-FUNC USING VAR1 BY REFERENCE VAR2 BY REFERENCE GIVING RET-VALUE.

C funktionen kan använda de pekare som den får för att direkt ändra VAR1 och VAR2.
(RET-VALUE får alltså C funktionens returvärde...)
Användarvisningsbild
AndLi
Inlägg: 18230
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av AndLi »

Al_Bundy skrev:
hawkan skrev:Inte så smidigt i C. Men det går såklart att lösa.
T ex returnera en pekare till en struct som innehåller all data man kan önska sej.
Dom borde bygga om C så att man kan göra det. Varför dem aldrig ändrar C förstår jag inte. Går det inte bara lägga till?
Varför lägga till något som redan finns?

Och för övrigt uppdateras C standarden löpande, därav K&R C, AnsiC,C99,C11,C18....
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

TomasL skrev:Jamen, det är ju bara att skicka basadressen på din Array som argument i funktionsanropet.
Lätt som en plätt.
Hur gör du om du har allokerat ett visst minne för 2D arrayen och sedan vill du radera den? Det är det jag har gjort. Så fort jag inte använder en matris längre, så raderar jag den, för att spara minne. :)
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

AndLi skrev:
Al_Bundy skrev:
hawkan skrev:Inte så smidigt i C. Men det går såklart att lösa.
T ex returnera en pekare till en struct som innehåller all data man kan önska sej.
Dom borde bygga om C så att man kan göra det. Varför dem aldrig ändrar C förstår jag inte. Går det inte bara lägga till?
Varför lägga till något som redan finns?

Och för övrigt uppdateras C standarden löpande, därav K&R C, AnsiC,C99,C11,C18....
Det har inte hänt så mycket sedan C99.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46906
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av TomasL »

Jamen, när du raderat den, så har du ju ingen matris kvar.
Dessutom, dynamisk minnesallokering i inbäddade system är ingen bra grej. Bör undvikas som pesten.
hawkan
Inlägg: 3421
Blev medlem: 14 augusti 2011, 10:27:40

Re: Matrisberäkningar med för STM32?

Inlägg av hawkan »

Du gör free() på pekaren till minnet. Kräver att minnet är allokerat med malloc().
Annars blir det fel. Att hålla på med malloc/free är inte speciellt effektivt.
Bättre du lägger de på stacken.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46906
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av TomasL »

Eller kör arrayerna statiskt deklarerade, och fyller dem med nya värden vid behöv
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

TomasL skrev:Jamen, när du raderat den, så har du ju ingen matris kvar.
Dessutom, dynamisk minnesallokering i inbäddade system är ingen bra grej. Bör undvikas som pesten.
Jasså? Så malloc, mmset och free bör ej användas alls?
Skriv svar