Sida 14 av 70
Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 19:19:55
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?
Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 19:20:34
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å?
Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 19:55:12
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.
Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 20:02:15
av hawkan
Och det är så du ska göra med dina matriser, Al.
Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 20:21:05
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?
Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 20:37:02
av TomasL
Jamen, det är ju bara att skicka basadressen på din Array som argument i funktionsanropet.
Lätt som en plätt.
Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 20:42:26
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.
Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 21:16:43
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...)
Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 21:17:31
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....
Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 22:18:39
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.

Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 22:20:22
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.
Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 22:21:28
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.
Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 22:21:42
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.
Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 22:26:43
av TomasL
Eller kör arrayerna statiskt deklarerade, och fyller dem med nya värden vid behöv
Re: Matrisberäkningar med för STM32?
Postat: 14 januari 2019, 22:54:28
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?