Hallo, ich glaube beobachtet zu haben, dass mein Programm spinnt, wenn ich aus dem asynchron getakteten Timer heraus auf Variablen zugreife. Das würde ja auch Sinn ergeben, eben weil der Zugriff sozusagen asynchron erfolgt. Wie kann ich es denn jetzt aber machen, dass z.B. eine Variable in dem Timer asynchron hochgezählt und an anderer Stelle ausgelesen werden kann? Gruß Mr.Green
Gast
#1131489
Bitte http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=72859 lesen und Frage überarbeiten.
"Aus einem Timer heraus" kann auf gar nichts zugegriffen werden. Du meinst schätzungsweise einen Timer-Interrupt-Handler... Ohne Deinen Code zu sehen, kann man auch nur Vermutungen anstellen, was da schiefgehen könnte (z.B. volatile bei der Variablendeklaration vergessen usw...).
Ja, natürlich die ISR... Also: Timer2 ISR. Timer2 ist asynchron getaktet. Die Variable ist volatile. Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
Die ISR wird aufgerufen, selten wird start_meas auch 1, sodass er in die if innerhalb der main reingeht. Manchmal aber auch nicht.
Gast
#1131523
> selten wird start_meas auch 1 Das es das überhaupt wird, würde mich stark wundern. Es sei denn der Code zeigt hier nicht das wesentliche. Was versteckt sich hinter dem ...? Auf welche Weise wird denn meas_time == 1? Voodoo? Bitte http://www.avrfreaks.net/index.php?name=PNphpBB2&a... lesen und Frage überarbeiten.
Gast
#1131528
Und was soll dieses "asynchron" andauernd? Externer Takt oder was? Dann schreib das doch, bitte.
Wie meas_time== 1 wird? Nun, durch den else-Zwei würde ich sagen. Dafür braucht es nicht mal Voodoo... Was in der [...] steckt ist vollkommen ohne Belang, dahin kommt er ja nicht (wie ich oben schrieb) Asynchron heißt asynchron. Genauso, wie Atmel es im Datenblatt beschreibt (Mega8: S 119 ff). Nichts anderes. Natürlich extern getaktet; intern wäre es synchron zur Main-Clockdomain.
Maxi wrote: > Und was soll dieses "asynchron" andauernd? Externer Takt oder was? Dann > schreib das doch, bitte. Wozu? Wenn Du Ahnung von der Materie hättest, dann wäre "asynchroner Timer 2" im Zusammenhang mit AVR völlig eindeutig. Du solltest übrigens Deinen Umgangston hier im Forum ganz schnell verbessern! Du bist mir in den letzten Tagen häufiger mit extrem unverschämten Äußerungen aufgefallen. Man kann sich auch einigermaßen normal unterhalten.
Gast
#1131545
>Wie meas_time== 1 wird? Nun, durch den else-Zwei würde ich sagen. Dafür >braucht es nicht mal Voodoo... In dem Fall schon, denn wie kommt er denn in den Else-Zeig? >Asynchron heißt asynchron. Aber nicht so, wie Du das Wort verwendest. Es setzt nämlich zwei verschiedene Dinge in Beziehung. Wie in "X ist asynchron zu Y". Ob das Atmel richtig schreibt ist mir wurscht. Du fragst ja "hier" und nicht bei Atmel.
Gast
#1131554
Na gut. Dann halte ich halt die Klappe.
Gast
#1131571
>>Wie meas_time== 1 wird? Nun, durch den else-Zwei würde ich sagen. Dafür >>braucht es nicht mal Voodoo... >In dem Fall schon, denn wie kommt er denn in den Else-Zeig? Na, toll. Das war dann auch noch Mist von mir. Grrrr. Jedenfalls, ist es doch aber so, das er immer zwischen dem if- und dem else hin und her pendelt. Am Anfang ist meas_time == 0, dann geht er einmal in den else-zweig und setzt meas_time = 1. Dann wieder in den true-zweig und setzt meas_time = 0. Jetzt bin ich aber still.
Ja richtig! Das ist der gleiche Effekt, den ein Modulo hätte. Das habe ich aber gar nicht zur Diskussion gestellt..............
Maxi wrote:
> Na gut. Dann halte ich halt die Klappe.
Du sollst nicht die Klappe halten (es ist ja durchaus schön, dass Du
helfen willst!), sondern Du sollst dieses überhebliche
"Ich-weiß-alles"-Gehabe sein lassen...
Eigentlich sollte es nicht das Problem sein (wegen untersch. Gross / Kleinschreibung), aber es ist gefährlich zwei gleichlautende Bezeichner zu haben:
1 | |
2 | |
3 | |
Ruck zuck verliert man den Überblick, was wofür verwendet wird..
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.