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
> ich definiere 2 globale Variablen....
Du hast das volatile vergessen.
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....
PS Schreibs doch einfach so
1 | while(1) |
2 | {
|
3 | cli(); |
4 | P = 255-PINB; |
5 | sei(); |
6 | }
|
macht genau dasselbe mit weniger Aufwand
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
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
soundmachine schrieb: > kann man kurz und knapp den sinn von volantile > erklären Das kannst du kurz und knapp selber raus finden. Tz...
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).
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.