Vad i helsike händer, IF-sats funkar inte

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Icecap
Inlägg: 26105
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Vad i helsike händer, IF-sats funkar inte

Inlägg av Icecap »

Jag använder enum en del, just för att undvika vissa saker och i t.ex. ett meny-system kunde lägga till funktioner utan att det strular enormt.

Använder det också i min "dekoda text"-funktion för att enkelt kunde lägga in kommandon som behövs och ändra i ett senare skede om det behövs.

Jag har dock aldrig deklarerat någon variabel som enum, bara kollat värden kontra en enum-lista.
Användarvisningsbild
jesse
Inlägg: 9233
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Vad i helsike händer, IF-sats funkar inte

Inlägg av jesse »

TomasL skrev:I följande kod:

Kod: Markera allt

debug = global_inst.KB_Pump_varmedrift_e;
hur deklareras debug?
hur deklareras .KB_Pump_varmedrift_e?

Om KB_Pump_varmedrift_e är en uint16 så borde den kunna jämföras med ett 32-bitars tal utan att det blir junk i de 2 översta byten. Så varför blir det det i det här fallet? Känns som att det har med denna struct att göra, eller hur du extraherar data ur den.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Vad i helsike händer, IF-sats funkar inte

Inlägg av TomasL »

Du har deklarationen högst upp i första inlägget.
"debug" är en uint16, glömde ta med den deklarationen
Användarvisningsbild
jesse
Inlägg: 9233
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Vad i helsike händer, IF-sats funkar inte

Inlägg av jesse »

OK, men det är väl när du lägger in ditt 16-bitars tal i variabeln som det blir fel. Använder man normal C-kod så bör ju talet omvandlas till 32-bitars innan det lagras i global_inst.KB_Pump_varmedrift_e. Försöker man skriva byte för byte så måste man ju vara helt säker på hur många bytes som ska skrivas. Det är ju typiskt med just C att man ofta blandar olika typer på egentligen helt olämpliga sätt på grund av att man har arrayer med ett visst antal bytes osv... Detta och att olika kompilatorer beter sig olika gör ju koden livsfarlig att försöka porta till ett annat system t.ex..
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Vad i helsike händer, IF-sats funkar inte

Inlägg av TomasL »

Som sagt väldigt lurigt, eftersom, beroende på Processor/Kompilator så kan en enum vara 16 eller 32 bitar, kanske till och med 64 bitar. Och troligen i bland 8 bitar.
Användarvisningsbild
Andax
Inlägg: 4373
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Vad i helsike händer, IF-sats funkar inte

Inlägg av Andax »

Buggen är alltså inte i IF-satsen utan i felaktig tilldelning av enum-variabeln tidigare.
Att du sedan får det att funka med tilldelning till debug är ju bara för att du gör samma fel igen och som då tar ut varandra.
Skulle tilldelningen gjorts korrekt så spelar inte den underliggande variabelstorleken roll.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45168
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Vad i helsike händer, IF-sats funkar inte

Inlägg av TomasL »

Exakt, problemet härstammar ursprungligen ifrån att variabeln aldrig blev initierad. Ett lätt misstag att göra, tyvärr.
Skriv svar