Ich habe die globaloverflow variable jetzt auch als volatile deklariert.
Aba funktioniert immer noch ned.
Hi
Ich habe hier mit der Methode versucht die Signal() funktion in
die Timer()funktion über die Variable globaloverflows hinüberzuleiten.
Da ich den Timer nicht die ganze Zeit brauch sondern nur immer
speziel für verschiedenen Aufgaben. Das LED soll ned die ganze Zeit immer blinken im später Programm.
Ich hoffe ihr blickt durch.
danke
Ich habe die globaloverflow variable jetzt auch als volatile deklariert.
Aba funktioniert immer noch ned.
Hallo barlip,
wass ist den mit:
gemeint?tmp+globaloverflows;
dass tut nix. (mein compiler gibt hier eine warnung)
gruss
Henk
hallo, in den neuen winavr-version gibt es kein "outp() mehr und kein sbi und cbi". da kommen dann warnmeldungen.
mfg pebisoft
Hi
Bei meiner Version von WinAVR funktioniert sbi() und cbi() noch.
Daran kann es also ned liegen.
Warum wurden die beiden Funktionen rausgenommen?
mit : tmp+globaloverflows;
meine ich
tmp += globaloverflows; << besser ausgedrückt
also i bekommt die 50 ( 50*20ms = 1 sek.)
i wird in tmp kopiert // überflüssiger schirtt weiß auch ned warum ich das gemacht habe
auf die 50 (tmp) wird die Zahl der aktuellen überläufe(globaloverflows) draufgerechnet
nun wird for so lange "geschleift" bis 50 weitere überläufe passiert sind
also tmp == globaloverflows
da ja bei jedem über lauf globaloverflows++ passiert
SIGNAL(SIG_OVERFLOW0)
{
TCNT2= 236;
globaloverflows++;
}
TCNT2= 236; <-- ist dieser schritt eigentlich überflüssig fängt er auto matisch wieder bei 236 an ?????
oder kennt jm. ne anderen gute möglich keit das signal BUFFEROVERFLOW0
in der Hauptroutine zu empfangen??
anstatt in der nebenroutine SIGNAL()
danke für eure Hilfe
Hallo barlip,
in SIGNAL function steht TCNT2=236 (Timer ZWEI)
in initimer function steht TCNT0=236 (Timer NUL)
vielleicht eine verschreibung?
TCNT0 ist dass actuelle Register dass hochzahlt, wenn mann
TCNT0 beliebig auslehst wird man immer ein anderen wert bekommen
abhangig von bis wie weit die timer gerade gezahlt hat beim auslesen.
Wenn du TCNT0 nicht wieder beschreibst wird die timer immer nach
MAX (0xFF) bei 0x00 anfangen. Dass aufsneu beschreiben vom TCNT im interupt function ist ja richtig.
Du hattest schon globaloverflows als volatile definiert?
volatile unsigned int globaloverflows=0;
Mit WinAvr macht dass ein richtigen unterschied.
Schick sonst mahl die compilierten listfile, kann ich vielleicht nachgucken wo's schief geht.
gruss
Henk
ja war ein schreibfehler.
so trotzdem danke für eure
hilfe,
habe nun das ganze ein bischen umgebaut und nun funktionierts..
zwar leider 2 variablen mehr aber egal.
wer will kann es sich ja mal anschauen ..
guten n'baned noch
Ist ja auch schon,
immer freudig wenn's functioniert.
versteh nur nicht was im interrupt function mit
if(gofs>=65000)
{
gofs = 0;
}
gemeint ist.
wenn gofs 65535 ist wird gofs auomatisch durchnummerieren
und wieder bei 0 anfangen.
gruss
Henk
Genau .
Aba da ich gerade 65535 nicht genau wusste sondern nur etwas mit 65xxx
und ich auch nicht mein Buch rausholen woltte habe ich einfach 65000
genommen.
Ist dieser Schritt denn eigentlich überflüssig?? Gibts es einen Bufferoverflow wenn ich einen höhere Zahl als 65535 reinspeichere? oder fängt es automatisch bei 0 an..
Theoretisch müsste doch ein Bufferoverflow passieren oder ist dort
eine Sicherung drinnnen..
danke
Code:ein integer is 16 bit bit 15 (links) bis zum bit0 (rechts) 1111 1100 0000 0000 5432 1098 7654 3210 xxxx xxxx xxxx xxxx Einige Beispiele... 0000 0000 0000 0000 = hex 0x0000 = decimal 0 0 0 0 0 0000 0000 0000 0001 = hex 0x0001 = decimal 1 0 0 0 1 0000 0000 0000 0010 = hex 0x0002 = decimal 2 0 0 0 2 0000 0000 0000 0100 = hex 0x0004 = decimal 4 0 0 0 4 0000 0000 0000 1000 = hex 0x0008 = decimal 8 0 0 0 8 0000 0000 0001 0000 = hex 0x0010 = decimal 16 0 0 1 0 usw..usw..usw... 1001 0110 1100 0111 = hex 0x96C7 = decimal 38599 9 6 C 7 1111 1111 1111 1111 = hex 0xFFFF = decimal 65535 F F F F unsigned int var; var = 0xFFFF; //oder var = 65535; var=var+2; //dann bevindet sich danach 0x0001 (1) in 'var' 65535+2=65537 oder 0xFFFF+0x0002=0x10001 0001 0000 0000 0000 0001 = 0x1FFFF xxxx xxxx xxxx xxxx <-- nur diesen bits werden angeschaut bei 'int' uder 'unsigned int' so dort steht '1' Dass umrechnen von hex <---> decimal kan mann auch mit die windows calculator machen.
Gruss
Henk
Lesezeichen