Ny på GCC, diverse fågor...

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Ny på GCC, diverse fågor...

Inlägg av mri »

Warning angående attribute packed i gcc om man jobbar på Arm ellerr dylik processor som bara läser sina datatyper från alignade addresser: attribute packed sätter också alignment till 1 byte för strukturen.
Mitt råd är att nogrannt läsa dokumentationen för dessa attribut annars kan det bli överraskningar.
Zeela
Inlägg: 176
Blev medlem: 28 augusti 2008, 11:23:49
Ort: Åtvidaberg
Kontakt:

Re: Ny på GCC, diverse fågor...

Inlägg av Zeela »

Vad är det med switch som är crap jämfört med pascals Case?
Användarvisningsbild
Icecap
Inlägg: 26148
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Ny på GCC, diverse fågor...

Inlägg av Icecap »

I Pascal kan man (om jag minns rätt) för en Case 1-7, alltså motsvarighet till alla värden mellan (och inklusiva) de två värden, 1, 2, 3, 4, 5, 6 & 7.
Detta går ju i C också, det blir bara lite mer skrivning.
Zeela
Inlägg: 176
Blev medlem: 28 augusti 2008, 11:23:49
Ort: Åtvidaberg
Kontakt:

Re: Ny på GCC, diverse fågor...

Inlägg av Zeela »

Jo, men det har ju egentligen inget med Case att göra. Det är ju en annan feature, nämligen Set och språkets hantering av såna.
Användarvisningsbild
Icecap
Inlägg: 26148
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Ny på GCC, diverse fågor...

Inlägg av Icecap »

Jag hakar på lite, trådkapar helt enkelt.

Använder GCC med Eclipse till RX-processorn. Jag enabler C99.
Det har varit en del småsaker, en av dom är just packningen av variabelstrukturer - men den del har jag löst.

Programmet jag har gjort fungerar bra - om jag inte slår på optimering. Det är testat och har kört stabilt genom ett bra tag.

Men aktiverar jag optimeringen (likgiltigt om det är för hastighet eller kodstorlek) blir det en hel del problem med att få saker och ting att fungera.

Jag minns att ha sett att optimeringen i GCC "ibland" har en del utmaningar för sig och att det helt enkelt fungerar uselt.

Jag har inte problem med minnesplatsen, programmet använder 9% av tillgängligt programminne men det är ju bara detta projekt. Finns det något känd man kan göra för att optimeringen faktisk kan fungera eller är det bara en framtida feature?
SvenW
Inlägg: 1124
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: Ny på GCC, diverse fågor...

Inlägg av SvenW »

Debbuggning fungerar inte alltid med optimering och det har sina naturliga orsaker.
Hur det är specifikt för med RX-processorn vet jag inget om.

Mina erfarenheter begränsas till Intel Pc, ARM och AVR.
Vissa konstiga saker har kanske skett någon gång, men jag minns inga större bekymmer
annat än att icke-optimerad kod blivit för stor eller för långsam.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Ny på GCC, diverse fågor...

Inlägg av mri »

Slår man på optimering i gcc får man se till att skriva koden korrekt enligt standarden. Fullösningar som andra kompilatorer (visual c t.ex) sväljer kan ge buggar i gcc. Visst kan gcc ha buggar också men generellt är optimeringen aggresiv och tar alla tillfällen att trixa om c standarden öppnar upp för sådant.
Användarvisningsbild
baron3d
EF Sponsor
Inlägg: 1339
Blev medlem: 1 oktober 2005, 23:58:43
Ort: Torestorp

Re: Ny på GCC, diverse fågor...

Inlägg av baron3d »

Fungerar med -O1, från och med -O2 händer en massa.
Har själv för vana att använda -Wall, så att man får varningar vid minsta konstighet.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6952
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Ny på GCC, diverse fågor...

Inlägg av Marta »

Nya nybörjarproblem när jag skall byta från Pascal till GCC.

Skall ha en länkad lista, men fastnar i moment22... Strunta i om det är något struntfel, det är principen för forwarddeklarerade types som är det viktiga.

I Pascal blir det
type
DataPtr:^Data;
Data: record
Back,
Forw:DataPtr;
SomeDataTypes....
end;

I GCC försökte jag

typedef struct {
Data* Back,
Forw;
SomeDataTypes
}Data;

Men det tar den inte för Data är odefinierat. Hur definierar jag en pekare till en ännu inte definierad datatyp? Längden är ju känd så det borde vara lika möjligt i C som det är i Pascal.
Användarvisningsbild
baron3d
EF Sponsor
Inlägg: 1339
Blev medlem: 1 oktober 2005, 23:58:43
Ort: Torestorp

Re: Ny på GCC, diverse fågor...

Inlägg av baron3d »

typedef struct Data Data;

struct {
Data* Back,
Forw;
SomeDataTypes
} Data;
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6952
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Ny på GCC, diverse fågor...

Inlägg av Marta »

'Data' redeclared as different kind of symbol'...

För tydlighets skull, det är GCC och inte G++ jag använder om det nu har betydelse.
Findecanor
Inlägg: 982
Blev medlem: 2 juli 2010, 23:04:07

Re: Ny på GCC, diverse fågor...

Inlägg av Findecanor »

Jag ser två fel:
1. Du måste deklarera typen "Data" innan du kan använda den. Alltså "typedef struct Data Data" gör "Data" till ett typ-alias för "struct Data". Detta måste göras före "struct Data { ... }" som definierar typen "struct Data".
Innan du har deklarerat typen "Data" så förstår kompilatorn inte vad en pekare till det är, men den förstår alltid vad en pekare till en struct är för något.
2. Du måste skriva '*' före varje pekares namn i strukturen: "Data *Back, *Forw". (Inte helt självklar syntax, jag vet ...)

Alternativt skulle du kunna skriva:

Kod: Markera allt

typedef struct Data {
   struct Data *Back, *Forw; /* OBS: "struct Data", inte "Data" */
   SomeDataType whatever;
} Data;
ie
EF Sponsor
Inlägg: 1276
Blev medlem: 23 oktober 2006, 13:12:57
Ort: Tyresö

Re: Ny på GCC, diverse fågor...

Inlägg av ie »

Ett exempel på hur det ser ut i min kod:

Kod: Markera allt

typedef struct sender_queue_t SENDER_QUEUE;
struct sender_queue_t
{
	uint8_t *sender;
	SENDER_QUEUE *next;
};
static SENDER_QUEUE *sender = NULL;
Findecanor
Inlägg: 982
Blev medlem: 2 juli 2010, 23:04:07

Re: Ny på GCC, diverse fågor...

Inlägg av Findecanor »

@ie: Din användning av stora, små bokstäver och ändelsen "_t" är ganska okonventionell.
Vanligare är att endast värdetyper har namn som slutar med "_t" just för att visa att de är typer, att struktur-typer är i "camel case" ("SenderQueue") och att endast macron (vilket inkluderar konstanter) är i endast versaler.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6952
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Ny på GCC, diverse fågor...

Inlägg av Marta »

Det blev alternativet som Findecanor visat. gcc accepterar det och pekarna tycks fungera. Däremot är jag fortfarande alldeles yr när det gäller vad som deklareras med de olika placeringarna av typnamnet före och efter {....} Är väl jag som är för gammal...

Nu till nästa tillkortakommande hos C vs Pascal. Programmet som skall porteras har en hel del var-deklarerade pekare. Hur deklareras en pekare till en pekare och hur görs dereference både för att komma åt det den till slut pekar på och att peka om denna pekare så den nya adressen följer med tillbaka?

T.ex. i Pascal: procedure UpdateData( var DataPtr; Data, Length);

Denna procedur skall då placera in Data i en länkad lista och beroende på Length så kan det hända att DataPtr ändras och den nya skall följa med tillbaka. Vissa procedurer har två sådana pekare som kan ändras, så att använda return är inte lösningen.
Skriv svar