Gast
#1750831
Hallo Community, hier ein (für mich jedenfalls) recht kurioses Problem, bei dem ich Eure Hilfe benötige! Ich hole erst mal aus: Ich benutze einen µC (deRFmega128 von DresdenElektronik), das AVR Studio und den MAC Layer von Atmel in der Version 2.4.2. Hier speziell die PAL - API. Diese API stellt eine Funktion bereit, mit der Daten über die Serielle Schnittstelle empfangen und gesendet werden können. Das Empfangen funktioniert tadellos. Von HTerm gesendete Daten können vom µC erkannt und verarbeitet werden. Nun zum kuriosen Teil des Ganzen: Das Senden an den PC funktioniert nur teilweise. Rufe ich die Funktion zum Senden von Daten zum Beispiel aus einer Timer - Routine oder einer undendlichen While - Schleife aus auf, so kann ich die Daten auch wunderbar im HTerm sehen. Rufe ich die Funktion jedoch aus einem switch - case oder einem if - Konstrukt heraus auf, so passiert gar nichts. Auch Debugging hat mich hier nicht weitergebracht. Ich habe die Funktion schon einmal komplett durchgesteppt und mir alles genau angeschaut, aber ich kann einfach nicht entdecken wo dort etwas verloren geht. Als Rückgabewert gibt die Funktion die tatsächlich übermittelten Bytes zurück. Dieser Rückgabewert entspricht auch tatsächlich der Anzahl an Bytes, die ich übertragen will. Ich habe schon vermutet, dass der Puffer vielleicht nicht richtig geleert wird, oder sowas ähnliches, aber wenn ich die Daten mit einem Timer alle paar Sekunden zum Beispiel losschicke, dann kommen sie nicht stoßweise an, sondern immer schön einzeln, Byte für Byte... Der zweite Gedanke der mir kam, war dass vielleicht irgendwelche Interrupts etwas kaputt machen. Also habe ich die Funktion in cli() und sei() "eingepackt". Leider mit dem gleichen Ergebnis. Auch Delays konnten das Problem nicht beheben. Den Tipp hatte mir ein Arbeitskollege gegeben. Der Code, den ich benutze ist ein adaptiertes Beispiel von Atmel, dass sich Wireless UART nennt. Ich habe den entsprechenden Teil des Codes mal angehängt:
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 | |
Hat vielleicht jemand eine Ahnung, wie das zustande kommt? Ich habe wirklich schon ne Menge versucht, aber nichts hat mich weitergebracht. Auch google war nichts in der Richtung bekannt. Mit freundlichen Grüßen, Henning