Hallo, ich beschäftige mich seit ein paar Wochen mit Mikrocontroller Programmierung und verwende dazu einen ATMEGA328PB welcher auf einem Board über UART mit dem Rechner kommuniziert. (Eigentlich sind es insg. 10 Mikrocontroller aber für das beschriebene Problem sollte nur der Master Controller relevant sein)
Im eigentlichen Skript geht es darum einen Datensatz mit Positionswerten zu generieren, aber ich bin auf einen Fehler gestoßen welcher den Mikrokontroller abstürzen lässt (zumindest springt er in die Main zurück).
Der Fehler ist auch mit dem unten aufgeführten Minimalbeispiel vorführbar, daher muss ich scheinbar irgendwas fundamentales missverstehen das nichts mit der Wertgenerierung an sich zu tun hat.
Im aktuellen Zustand gibt das Skript des mikrokontrollers beim Start die Standardmeldung "Master ready" über UART aus und ich erhalte die Ausgabe über hTerm am Rechner. Dann geht das Skript in eine Warteschleife in der es auf einen beliebigen Input über UART wartet. Sobald ich irgendein Zeichen sende müsste die generate_ramp Funktion durchlaufen und mit der Ausgabe "Exit function" abschließen. Das tut sie auch, allerdings nur für ramp_freq >= 2.0 Für ramp_freq <= 1.0 stürzt das Skript ab und der Kontroller startet neu, was sich dadurch äußert, dass wieder die Standardmeldung "Master ready" ausgegeben wird. Der "tolerierbare Bereich" rutscht tiefer wenn ich die globale Variable DATA_FREQ auf 256 setze, dann gehen also auch Werte zwischen 1.0 und 2.0 aber nicht kleiner 1.0.
Ich habe also versucht manuell Werte für seq_Length vorzugeben und dabei festgestellt:
- Werte <= 452 funktionieren problemlos
- Werte >= 453 führen zu fehlerhafter UART Ausgabe aber es sind korrekte Zeichen dabei
- Werte zwischen 456 und 506 führen zu einer Endlosschleife der UART Ausgabe)
- Werte >= 507 führen zum altbekannten Neustart
Gebe ich den Wert von seq_Length direkt ohne Variable vor so funktioniert das Skript problemlos auch für Werte weit über 512.
Ich hoffe ich habe alles beschrieben was hilfreich sein kann und dass irgendwer besser versteht was hier vor sich geht. Für hilfreiche Kommentare wäre ich sehr dankbar.
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 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 |
|
73 |
|
74 |
|
75 |
|
76 |
|
77 |
|