PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Flüchtige Variablen?!



z-man
01.07.2004, 21:05
Hi, erstmal! Bin ein ziemlicher noob auf dem Gebiet der MC Programmierung! Habe als Hardware nen ATMega8 und als Software das (hoffe ich doch) neueste WinAVR! Mein problem ist es nun das ich eine Art fernsteuerbares Lauflicht machen wollte! Hardwaremäßig kein problem, und Softwaremäßig eigentlich auch nicht (habe schon ein wenig erfahrung in C/C++)! Ich habe eigentlich alles zussammen, mein Problem ist jetzt jedoch das wenn mein Programm auf den Timerinterrupt für das weiterlaufen schaltet es wohl eine meiner vorher deffinierten (global) variablen überschreibt! Die wird zwar nach dem rücksprung wieder zurückgesetzt (im mainloop ist sie wieder richtig...) aber ich brauche ihren Wert während der Interruptbearbeitung...gibt es eine möglichkeit die variable vor dem überschreiben zu schützen? Oder zumindest ihren speicherplatz so zu deffinieren das sie nichtmehr gelöscht wird...
Big Thx schonmal!
ps: Ich versuche so schnell wie möglich meinen Source hinterhezuposten damit ihrs einfacher habt! Er ist aus einigen bsps und tutorials zussammengeflickt...

GorchFock
01.07.2004, 21:11
du kannst sie einfach speichern indem du eine 2 variable nimmst und diese mit der zuspeichernden gleich setzt.

z-man
02.07.2004, 13:30
??Wie soll ich das denn machen? Ich kann doch nicht die variable sichern bevor der interrupt aufgerufen wird und die Variable doppelt zu halten ist ja auch ein wenig dumm!

GorchFock
03.07.2004, 08:11
wenn du sie initaliesirst dann ist sie da schon mal fest und wenn du dann im weitern program ablauf sie überschriebn läst ist sie weg. wenn du nun aber sgast das deine variable die du überschrieben läst nochmals absicher willst weil du sie im späternen programablauf benötigst dann nimmste einfach einen 2. variable und schiebst deine 1. dort rein.somit wird diese nicht mehr verändert auser du schiebst erneut....und die 2. variable schiebst du bei bedarf wieder in deine 1.

z-man
05.07.2004, 11:39
Soo, sorry das ich so selten schreibe! Das ist nicht fehlendes interrese sondern elternbegrenztes inet*grml* Also, ich hab das ganze jetzt mal neugeschrieben, jetzt funktioniert es komischerweise, allerdings nur solange ich nicht versuche dem PC über usart antwort zu schicken, dafür hab ich folgenden source gefunden:


/************************************************** *********
Funktionsbibliothek für den USART des Atmega8
************************************************** *********/

#include <avr/io.h>

#define F_CPU 4000000
#define USART_BAUD_RATE 9600
#define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16l)-1)

void USART_Init(void) {
UCSRB = _BV(RXCIE) | _BV(TXCIE) | _BV(RXEN) | _BV(TXEN);
UBRRL = (unsigned char) USART_BAUD_SELECT;
}

void USART_transmit (unsigned char c) {
while (!(UCSRA & (1<<UDRE))) {}
UDR = c;
}

unsigned char USART_receive (void) {
while(!(UCSRA & (1<<RXC))) {}
return UDR;
}

void USART_transmit_string (unsigned char *string) {
while (!(UCSRA & (1<<UDRE))) {}
while ( *string)
USART_transmit (*string++);
}

Sobald ich damit ein Zeichen sende scheinen mir alle Variablen verloren zu gehen (oder zuimindest läuft das Programm nichtmehr normal...)! Ich schätze mal nicht das der fehler an der usart bib liegt. Gibts vielleicht ne Anleitung wie ich das ganze mit dem studio simulieren kann und mir angucken kann was da genau passiert?