Gast
#3253354
Hallo, ich habe auf meinem Rechner zwei Programme laufen, die Daten auf zwei unterschiedlichen COM Schnittstellen zum Mikrocontroller senden. Der Mikrocontroller empfängt die Daten interruptgesteuert und legt diese in zwei Ringbuffern ab. Anschließend führt der Mikrocontroller ein paar einfache Datenmanipulationen durch und schickt die Daten auf einer dritten COM Schnittstelle wieder zum Mikrocontroller zurück. Der Grund warum ich so viele Schnittstellen brauch ist, dass hier später mehrere PCs Daten zum Mikrocontroller senden sollen. Zum Testen ist es aber ganz praktisch, dass erstmal alles auf einem PC laufen zu lassen. Kurz gesagt kann man sagen, dass der Mikrocontroller die Daten von zwei COM Schnittstellen aufsammelt, die Daten verändert und dann gebündelt auf eine weitere COM rausschickt. Wenn ich nur ein Programm am PC laufen lasse und quasi simuliere, dass ein PC Daten zum Mikrocontroller sendet, dann funktioniert alles problemlos. Der Mikrocontroller empfängt die Daten, verändert sie und schickt sie wieder raus. Wenn ich jedoch simuliere, dass zwei PCs Daten zum Mikrocontroller schicken, dann produziert der uC irgendwann nen Blödsinn. Er schickt dann statt "00410" zum Beispiel "004♥♥" raus. Wenn ich die Daten, die ich zum Mikrocontroller sende, etwas langsamer sende (als nach jeder Zeile, die ich sende, 0.2 Sekunden warte, dann funktioniert es. Meine Vermutung ist nun, dass der Mikrocontroller mit den zwei interruptgesteuerten UART Receives irgendwie nicht klarkommt und da Müll produziert. Mein Programm sieht so aus:
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 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
Ich hab versucht mein Programm aufs Wesentliche zu reduzieren, da ich wie gesagt vermute, dass der Fehler irgendwo im Interrupt Management liegt. Das mein Ringbuffer zu klein ist und der dann irgendwie die Daten überschreibt kann ich mir nicht vorstellen, da die beiden Ringbuffer jeweils 256Byte groß sind. Hat jemand von euch vielleicht ne Idee, was da schief laufen könnte?