Globale Variablen / Interrupt

Gast #1698952
Lesenswert?

Hallo, habe hier im Formum jetzt knapp eine Stunde gesucht und nicht so 
recht fündig geworden, da ihr mir das letzte mal super helfen konntet, 
hoffe ich es ist dieses mal auch der Fall.
Folgendes Problem:
ich definiere 2 globale Variablen....In der main werden diese einmal mit 
leben gefüttert
z.B. P=255-PINB;
danach werden die Interrupts freigeschaltet über sei(); im interrupt 
wird der timer t1 mit dem wert P vorgeladen und toggelt so eine led.
in der while schleife der main schreibe ich nun folgendes:

while(1)
{
cli();
pneu=255-PINB;
if(pneu!=P)
P=pneu;
sei();
}

dummerweise lädt er den timer nicht mit dem neuen p sondern mit dem was 
in der main am anfang eingelesen wurde munter weiter.

was kann das denn sein???er müsste doch beim nächsten interrupt mit dem 
neuen P vorladen,

(P ist global definiert)

Dabke für eure Hilfe
Gast #1698960
Lesenswert?

hmmm...kannst du mir das etwas genauer erklären...habe vor 4 wochen das 
erste mal einen atmega8 in der hand gehabt...programmiere mit winavr 
gcc...

in der main den wert übernimmt er ja auch....
#1698967
Lesenswert?

soundmachine schrieb:
> hmmm...kannst du mir das etwas genauer erklären...

Dann zeig dein komplettes Programm.
Dann hat man auch etwas, das man verbessern kann.

> habe vor 4 wochen das
> erste mal einen atmega8 in der hand gehabt...programmiere mit winavr
> gcc...

Goggle mal nach volatile oder benutze die Forumssuche. Das Thema globale 
Variablen und volatile taucht jeden Tag mindestens 3 mal auf
Gast #1698971
Lesenswert?

das geht leider nicht, da in der isr noch zähler laufen die im falle 
eines umschaltens der taktfrewuenz auf 0 gesetzt werden sollen....dies 
würde er bei deiner sache aber ständig machen und der zähler würde 
garnicht hochlaufen....kann man kurz und knapp den sinn von volantile 
erklären
#1698981
Lesenswert?

soundmachine schrieb:
> das geht leider nicht, da in der isr noch zähler laufen die im falle
> eines umschaltens der taktfrewuenz auf 0 gesetzt werden sollen....dies
> würde er bei deiner sache aber ständig machen und der zähler würde
> garnicht hochlaufen....kann man kurz und knapp den sinn von volantile
> erklären

Zeig deinen Code.
Das ist Unsinn was du da plapperst.

P verändert seinen Wert nur dann, wenn von PINB ein anderer Wert 
eingelesen wird. Ob du da vorher noch mit pneu operierst oder nicht. Die 
ganze Operation, mach eine Zuweisung nur dann, wenn sich der neue Wert 
vom alten Wert unterscheidet, ist 0-Operation, weil im Endeffekt IMMER 
dass gleiche Ergebnis rauskommt: P hat entweder den alten Wert (wenn 
sich PINB nicht verändert hat) oder es hat den neuen Wert (wenn sich 
PINB verändert hat).
Gast #1698983
Lesenswert?

hallo kark-heinz....habs mir im  tutorial durchgelesen...klingt 
schlüssig...vielen dank nochmal...ich werds gleich ausprobieren.
Nur schonmal top wenn man weis wo man den hebel ansetzen muss.

is halt immer ein unterschied zwischen theorie und praxis  ;-)


also danke nochmal
Gast #1699004
Lesenswert?

sooooo.....habs grad mal ausprobiert...es funzt...super sache...das mit 
dem volatile kannte ich halt nicht...
@ karl heinz...unsinn war das nur bedingt, denn wenn PINB umgeschaltet 
wird sollen noch weitere aktionen durchgeführt werden (aber eben nur 
wenn was umgeschaltet wird) deshalb die if anweisung


aber danke nochmal
#1699009
Lesenswert?

soundmachine schrieb:
> sooooo.....habs grad mal ausprobiert...es funzt...super sache...das mit
> dem volatile kannte ich halt nicht...
> @ karl heinz...unsinn war das nur bedingt, denn wenn PINB umgeschaltet
> wird sollen noch weitere aktionen durchgeführt werden (aber eben nur
> wenn was umgeschaltet wird) deshalb die if anweisung

Was lernen wir daraus:
Poste deinen Code so wie er bei dir im Editor steht.

Insbesondere: Vermeide es, Code nur in Auszügen zu präsentieren. 
Kürzeren Code kann man direkt einfügen (Copy&Paste). Längeren Code hängt 
man als Dateianhang an. In beiden Fällen hat man jedoch weniger Arbeit, 
als wie wenn man den vermeintlich relevanten Codeabschnitt abtippt. Von 
Tippfehlern, die während des Abtippens entstehen reden wir erst mal gar 
nicht.
Und nein: Für die meisten hier ist alles unter 100 Zeilen Peanuts. Viele 
hier arbeiten beruflich an Projekten die ein paar Zehntausend Zeilen 
umfassen, manchmal noch mehr (1 oder 2 Nullen hinten drann). Wir sind 
gewohnt mit solchen Codemengen umzugehen. Ein Programm aus 200 Zeilen 
stellt die meisten noch lange nicht vor irgendwelche Probleme.

Aber: Wir hätten gerne möglichst vollständigen Code. Alles was du nicht 
explizit postest, müssen wir raten. Wenn du verhindern willst, dass wir 
uns das Schwarze unter den Fingernägeln erraten, dann zeig ganz einfach 
alles.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren