Forum: Compiler & IDEs Bitverschiebung + Integer


von Stefanie (Gast)


Lesenswert?

Hallo,
ich habe zwei unsigned int Variablen. Die Variable Alarm_high besitzt 
den Wert 0xFF;
1
for(i=Alarm_Flag; i<16; i++)
2
{
3
4
  if (Alarm_high & (1 <<  i))  
5
  {
6
    ... //Warum komme ich bei i>=8 nicht mehr hier rein??
7
    break;
8
  }            
9
}

von Rolf Magnus (Gast)


Lesenswert?

Stefanie schrieb:
> //Warum komme ich bei i>=8 nicht mehr hier rein??

Erwartest du was anderes? Bei 0xFF sind doch genau die Bits 0 bis 7 
gesetzt, Bits >= 8 aber nicht.

von Stefanie (Gast)


Lesenswert?

OK, ich habe ihr nun den Wert "65535" zugewiesen und ich komme trotzdem 
nicht rein. Liegt dass daran, dass ich es auf einem 8Bit-Prozessor 
teste?

Die Laufvariable i ist auch vom Typ int.

von Rolf Magnus (Gast)


Lesenswert?

Stefanie schrieb:
> OK, ich habe ihr nun den Wert "65535" zugewiesen und ich komme trotzdem
> nicht rein. Liegt dass daran, dass ich es auf einem 8Bit-Prozessor
> teste?

Nein.

> Die Laufvariable i ist auch vom Typ int.

Zeig doch mal ein komplettes Programm, das den Fehler aufweist. Momentan 
kann man nur raten.

von Ralf (Gast)


Lesenswert?

An dem Code liegt's nicht.

Werden 'Alarm_Flag' und 'Alarm_high' evtl. in einer ISR gesetzt/ 
geändert?
Oder 'heimlich'?:

Ralf schrieb in "Tipps zum Fehler finden":
> Reihenfolge der globalen Variablen ändern, wenn's geht. Falls es dann
> eine andere Variable trifft -> Stacküberlauf.

von Ralf (Gast)


Lesenswert?

Äähm, bist Du sicher, dass die Schleife nicht abgearbeitet wird? Wenn 
'...' sozusagen 'wegoptimiert' wird, kann mann die Abfrage vergessen.

von Stefanie (Gast)


Lesenswert?

Vielen Dank!
Das ist dann wohl aktuell auch das Problem, ich bin mit meinem Speicher 
anscheinend am Ende bzw. habe falsche Compilereinstellungen.

Gibt's hier irgend ein allgemeines Tutorial dazu? Ich nutze den 
Codevision-Compiler und weiß natürlich, dass man im Handbuch auch 
nachsehen muss...

von Ralf (Gast)


Lesenswert?

Also, wenn der RAM ausgeht, hat das nicht so viel mit den 
Compileroptionen zu tun. Variable aus dem RAM (auch Stack) in Register 
auslagern, ich glaube nicht dass da viel kommt.

von Stefanie (Gast)


Lesenswert?

OK, das Problem ist, dass ich bei dem Projekt viele z.T. große Variablen 
haben, die dauerhaft ihren Inhalt haben (und ich nicht nur temporär 
erzeugen kann).
Was gibt es da für eine Lösung?

von Ralf (Gast)


Lesenswert?

- µC mit mehr RAM
- Wertebereiche überdenken um kleinere Varialben verwenden zu können
- Puffer für Datenübertragung verkleinern, dafür mehrmals senden

von Rolf Magnus (Gast)


Lesenswert?

Stefanie schrieb:
> Ich nutze den Codevision-Compiler

Dann ist GCC das falsche Forum, denn Codevision ist nicht GCC.

von Stefanie (Gast)


Lesenswert?

Danke für die Info, wußte ich bereits ;-)

Dennoch war meine Startfrage sehr allgemein (Compilerunabhängig) und 
manche Profis habe mit beiden Erfahrungen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.