Sida 1 av 1

C if sats ändrar värde på testad variabel, är jag en idiot ?

Postat: 3 augusti 2013, 19:56:16
av lizerdboy
Jag har nu suttit och letat efter ett fel i min kod, felet kommer från att en variabel ändrar värde helt plötsligt.
Jag tog bort alla rader som ändrar på den variabel, men utan skillnad.

nu spårade jag ner problemet till denna if-sats, ( jag har tagit bort alla andra referenser till variabeln i koden innan jag hitta vart felet uppstår )

Kod: Markera allt

            
            // Master Area ( the hole thing)
            if((MasterWorkArea_AnyOutputActive_Counter =! 0) || (MasterWorkArea_AnyOutputActive != 0))
            {
                // yeep, some output is enabled , so SET this output if any other output is enabled
                AreaInternal_ChainStatus = true;
            }
innan STM32 vilket är processorn som koden körs på går in i if satsen så är
MasterWorkArea_AnyOutputActive_Counter = 0
MasterWorkArea_AnyOutputActive = 0

och när den kollar villkoren så ändras MasterWorkArea_AnyOutputActive_Counter till 1 och if-satsen anses vara true

så frågan är nu, är jag bara helt dum i huvudet eller är det något som är tok galet ?? :humm:

jag har flyttat på variabelns adress i minnet, så det verkar inte som att den skrivs över av någon annan variabel som kommer utanför sitt skriv område
och värdet sätts alltid till 1, om jag återställer variablen så sätts den bara tillbaka till 1 när den går in i if-satsen igen

någon ?

Re: C if sats ändrar värde på testad variabel, är jag en idi

Postat: 3 augusti 2013, 19:59:52
av Icecap
Kanske du ska testa att skriva rätt?

MasterWorkArea_AnyOutputActive_Counter =! 0
blir ju till
MasterWorkArea_AnyOutputActive_Counter = !0

Re: C if sats ändrar värde på testad variabel, är jag en idi

Postat: 3 augusti 2013, 20:00:20
av lizerdboy
gjorde ett test med att byta ut variablen "Ftest" mot en lokal variabel .

men det blir samma resultat

Kod: Markera allt

  uint32_t Ftest = 0;  // MasterWorkArea_AnyOutputActive_Counter


    // check if we should use chain function
    if(ChainEnable != false)
    {
        // If so check if it is master area = 0, or Area ID we should chain output with
        if(ChainAreaID == 0)
        {
            // Master Area ( the hole thing)
            if((Ftest =! 0) || (MasterWorkArea_AnyOutputActive != 0))
            {
                // yeep, some output is enabled , so SET this output if any other output is enabled
                AreaInternal_ChainStatus = true;
            }
        }
        else
        {
            // Okay we should chain with the status on another area 
            // loop untill we find the area ID, and then check its status
            for(Tcount = 0; Tcount < AreaSettingsNumer; Tcount++)  
            {
                if(AreaSettings[Tcount][A_ID] == ChainAreaID)
                {
                  // Area found, get it's output status
                  AreaInternal_ChainStatus = AreaSettings[Tcount][A_Is_OutputStatus];
                  break;
                }
            }

        }

Re: C if sats ändrar värde på testad variabel, är jag en idi

Postat: 3 augusti 2013, 20:00:58
av lizerdboy
haha ja men faaaaaaan, asg , tack , de var bara jag som var dum i huvudet , :vissla:

Re: C if sats ändrar värde på testad variabel, är jag en idi

Postat: 3 augusti 2013, 20:03:38
av snigelen
Du skrev

Kod: Markera allt

(MasterWorkArea_AnyOutputActive_Counter =! 0)
Vilket alltid är sant samt tilldelar variabeln värdet !0 == 1. :-)

Re: Sv: C if sats ändrar värde på testad variabel, är jag en

Postat: 3 augusti 2013, 20:04:11
av morten.dynamite

Kod: Markera allt

            
            // Master Area ( the hole thing)
            if((MasterWorkArea_AnyOutputActive_Counter =! 0) || 
      (MasterWorkArea_AnyOutputActive != 0))
 
Borde vara

Kod: Markera allt

            
            // Master Area ( the hole thing)
            if((MasterWorkArea_AnyOutputActive_Counter != 0) || 
      (MasterWorkArea_AnyOutputActive != 0))
 
I första uttrycket skriver du =!.

Re: C if sats ändrar värde på testad variabel, är jag en idi

Postat: 3 augusti 2013, 20:04:21
av lizerdboy
yeep de funka fint, o jag som har suttit och stirrat på den raden ett bra tag nu.
EF löser biffen på två röda :lol:

Tack Icecap , i bland har man suttit och kodat för länge, och de här var ett bra tecken på att jag ska ta o göra middag :tumupp:

Re: C if sats ändrar värde på testad variabel, är jag en idi

Postat: 3 augusti 2013, 20:07:45
av blueint
"MasterWorkArea_AnyOutputActive_Counter =! 0"

Tolkas !0 som "1" och eftersom "MasterWorkArea_AnyOutputActive_Counter =" kvarstår så blir det i praktiken "MasterWorkArea_AnyOutputActive_Counter = 1".

Re: C if sats ändrar värde på testad variabel, är jag en idi

Postat: 3 augusti 2013, 20:12:30
av lizerdboy
Yeep , det är solklart vad som hände, bara jag som helt missa att dom var omvända.

Tack allihopa för dom snabba svaren :tumupp:

nu är det dags att ge upp för i dag känner jag :)