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

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Användarvisningsbild
lizerdboy
Inlägg: 1610
Blev medlem: 6 oktober 2003, 22:24:12
Ort: Stockholm

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

Inlägg 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 ?
Användarvisningsbild
Icecap
Inlägg: 26809
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

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

Inlägg av Icecap »

Kanske du ska testa att skriva rätt?

MasterWorkArea_AnyOutputActive_Counter =! 0
blir ju till
MasterWorkArea_AnyOutputActive_Counter = !0
Användarvisningsbild
lizerdboy
Inlägg: 1610
Blev medlem: 6 oktober 2003, 22:24:12
Ort: Stockholm

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

Inlägg 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;
                }
            }

        }
Användarvisningsbild
lizerdboy
Inlägg: 1610
Blev medlem: 6 oktober 2003, 22:24:12
Ort: Stockholm

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

Inlägg av lizerdboy »

haha ja men faaaaaaan, asg , tack , de var bara jag som var dum i huvudet , :vissla:
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

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

Inlägg av snigelen »

Du skrev

Kod: Markera allt

(MasterWorkArea_AnyOutputActive_Counter =! 0)
Vilket alltid är sant samt tilldelar variabeln värdet !0 == 1. :-)
Användarvisningsbild
morten.dynamite
Inlägg: 64
Blev medlem: 9 juni 2012, 19:30:30
Ort: Charlottenberg

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

Inlägg 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 =!.
Användarvisningsbild
lizerdboy
Inlägg: 1610
Blev medlem: 6 oktober 2003, 22:24:12
Ort: Stockholm

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

Inlägg 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:
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

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

Inlägg 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".
Användarvisningsbild
lizerdboy
Inlägg: 1610
Blev medlem: 6 oktober 2003, 22:24:12
Ort: Stockholm

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

Inlägg 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 :)
Skriv svar