MeckPommER
21.03.2008, 00:15
Moinsens ...
ich möchte die Datenübertragung optimieren bei meinem Bot, aber mir fehlt die zündende Idee. Vielleicht hat ja jemand von euch einen Geistesblitz oder mehr Background als ich und kann mir helfen. Ich hab mir alles eher aus den Fingern gesogen als das ich irgendwelchen fundierten Hintergrund hätte, darum meine Hoffnung :)
Der Sachverhalt ist wie folgt:
-Zwei Controller sind über 2 Ports verbunden. Es gibt einen Port für das Senden von 8 Bit und einen Port für das Empfangen von 8 Bit.
-Die Controller werden nicht immer mit der selben Geschwindigkeit betrieben (=kein gemeinsames Clock-signal)
-Es gibt keine weiteren Steuerleitungen ausser diesen Busleitungen
-die Leitungen sind arg lang, Störungen sind nicht nur nicht ausgeschlossen, sondern sehr wahrscheinlich ;-)
Derzeit splitte ich das zu übertragende Byte in zwei Nibbles auf und verfahre wie folgt:
- der sendende µC legt das zu übertragende höherwertige Nibble auf bit0-3 des "Send"-Busses zusammen mit einem Marker-Bit4, das es sich um das höherwertige Nibble handelt.
- der empfangende µC schickt das zurück, damit der Sender vergleichen kann, ob es richtig angekommen ist.
- der sendende µC erkennt den richtigen Empfang und schickt das Nibble erneut mit einem gesetzten Bit 5, um dem Empfänger anzuweisen, das er den Wert speichern soll.
- der Empfänger-µc speichert das höherwertige Nibble
- der Sender legt das niederwertige Nibble auf den Bus und löscht das Marker-Bit4
- der Empfangende µC schickt das zurück, damit der Sender vergleichen kann, ob es richtig angekommen ist.
- der sendende µC erkennt den richtigen Empfang und schickt das nibble erneut mit einem gesetzten bit5, um dem empfänger anzuweisen, das er den wert speichern soll.
- der empfänger-µc speichert das niederwertige nibble
- der empfänger setzt höher- und niederwertiges Nibble wieder zu einem byte zusammen
- der sender µC kommt zum nächsten byte ...
In Assembler ist das natürlich schon mit wenigen Schritten bewerkstelligt, trotzdem gehen mir viel zu viele Taktzyklen ins Land, bis z.B. 128 Bytes übertragen wurden.
Maximal liege ich momentan bei ca. 176KBytes pro Sekunde, was ich durch einfachere Routinen gerne noch minimieren würde. Es kommt mir nicht auf Listings an, sondern um die Prinzipien, nach denen es noch schneller gehen könnte.
Manchmal denkt man ja als Laie viel zu kompliziert :)
ich möchte die Datenübertragung optimieren bei meinem Bot, aber mir fehlt die zündende Idee. Vielleicht hat ja jemand von euch einen Geistesblitz oder mehr Background als ich und kann mir helfen. Ich hab mir alles eher aus den Fingern gesogen als das ich irgendwelchen fundierten Hintergrund hätte, darum meine Hoffnung :)
Der Sachverhalt ist wie folgt:
-Zwei Controller sind über 2 Ports verbunden. Es gibt einen Port für das Senden von 8 Bit und einen Port für das Empfangen von 8 Bit.
-Die Controller werden nicht immer mit der selben Geschwindigkeit betrieben (=kein gemeinsames Clock-signal)
-Es gibt keine weiteren Steuerleitungen ausser diesen Busleitungen
-die Leitungen sind arg lang, Störungen sind nicht nur nicht ausgeschlossen, sondern sehr wahrscheinlich ;-)
Derzeit splitte ich das zu übertragende Byte in zwei Nibbles auf und verfahre wie folgt:
- der sendende µC legt das zu übertragende höherwertige Nibble auf bit0-3 des "Send"-Busses zusammen mit einem Marker-Bit4, das es sich um das höherwertige Nibble handelt.
- der empfangende µC schickt das zurück, damit der Sender vergleichen kann, ob es richtig angekommen ist.
- der sendende µC erkennt den richtigen Empfang und schickt das Nibble erneut mit einem gesetzten Bit 5, um dem Empfänger anzuweisen, das er den Wert speichern soll.
- der Empfänger-µc speichert das höherwertige Nibble
- der Sender legt das niederwertige Nibble auf den Bus und löscht das Marker-Bit4
- der Empfangende µC schickt das zurück, damit der Sender vergleichen kann, ob es richtig angekommen ist.
- der sendende µC erkennt den richtigen Empfang und schickt das nibble erneut mit einem gesetzten bit5, um dem empfänger anzuweisen, das er den wert speichern soll.
- der empfänger-µc speichert das niederwertige nibble
- der empfänger setzt höher- und niederwertiges Nibble wieder zu einem byte zusammen
- der sender µC kommt zum nächsten byte ...
In Assembler ist das natürlich schon mit wenigen Schritten bewerkstelligt, trotzdem gehen mir viel zu viele Taktzyklen ins Land, bis z.B. 128 Bytes übertragen wurden.
Maximal liege ich momentan bei ca. 176KBytes pro Sekunde, was ich durch einfachere Routinen gerne noch minimieren würde. Es kommt mir nicht auf Listings an, sondern um die Prinzipien, nach denen es noch schneller gehen könnte.
Manchmal denkt man ja als Laie viel zu kompliziert :)