Forum: Mikrocontroller und Digitale Elektronik Übergabe von Array Werten in ein anderes Array


von Matze T. (gruetzwurschd)


Lesenswert?

Hallo Leute,

ich habe mal wieder ein kleines Problemchen.
(Die lösung sollte mit WinAVR funktionieren)

Ich habe 2 mehrdimensionale Arrays mit jeweils 5x6 elementen.
Nun möchte ich die werte aus dem einen array in das andere übergeben. 
Und das möglcihst schnell.
Folgendes möchte ich nach Möglichkeit nicht verwenden:
1
for(unsigned char k=0;k<5;k++)
2
  {
3
  for(unsigned char j=0;j<6;j++)
4
    {
5
    wurst_array[k][j]=brot_array[k][j];
6
    }
7
  }

Hintergrund ist: ich möchte mir eine Art Ringpuffer anlegen, weil ich 
interrptgesteuert sowohl daten empfange als auch versende.Und das mit 
verschiedenen schnittstellen bzw. geschwidigkeiten. und zwischendrin 
habe ich nicht viel zeit.

Grüße Tarkan

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tarkan D. schrieb:
> Nun möchte ich die werte aus dem einen array in das andere übergeben.
Nimm memcpy();
Aber das kostet trotzdem ziemlich noch viel Prozessorzeit...

> ich möchte mir eine Art Ringpuffer anlegen
Ringpuffer funktionieren aber anders:
Da gibt es einen Speicherbereich, und in diesen Speicherbereich grifen 2 
Pointer: ein Schreib- und ein Lesezeiger.

von Karl H. (kbuchegg)


Lesenswert?

Tarkan D. schrieb:

> verschiedenen schnittstellen bzw. geschwidigkeiten. und zwischendrin
> habe ich nicht viel zeit.

Startegie ändern.
Nicht die Daten werden von einem Array zum anderen umkopiert, sondern 
die verwendenden Funktionen benutzen abwechselnd die beiden Arrays. Das 
ist dann einfach nur ein Pointer Swappen und dementsprechend schneller.

von Matze T. (gruetzwurschd)


Lesenswert?

Lothar Miller schrieb:
>> ich möchte mir eine Art Ringpuffer anlegen
> Ringpuffer funktionieren aber anders:
> Da gibt es einen Speicherbereich, und in diesen Speicherbereich grifen 2
> Pointer: ein Schreib- und ein Lesezeiger.

Deswegen ja so eine "Art" Ringpuffer. Ich habe es nicht mit einzelnen 
bytes zu tun, sondern mit paketen.Der Paket-Anfang darf nihct 
überschrieben werden bevor ich ihn abgeholt habe.

PS: gibt es eine Möglichkeit zu sehen wie lang bestimmter code zum 
ausführen braucht(ohne sich das aufwändig aus der dissassembly listening 
rauszurechnen)??

von Matze T. (gruetzwurschd)


Lesenswert?

Tarkan D. schrieb:
> PS: gibt es eine Möglichkeit zu sehen wie lang bestimmter code zum
> ausführen braucht(ohne sich das aufwändig aus der dissassembly listening
> rauszurechnen)??

Ohne Oszilloskop ?!? Rein interesse halber

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tarkan D. schrieb:
> PS: gibt es eine Möglichkeit zu sehen wie lang bestimmter code zum
> ausführen braucht
Nimm den Simulator: da ist eine Uhr eingebaut.

von sebastians (Gast)


Lesenswert?

> Der Paket-Anfang darf nihct überschrieben werden
> bevor ich ihn abgeholt habe.
Kein Problem. Lesezeiger erst weiterschieben wenn du das Paket ganz 
gelsen hast.
Du must nur aufpassen wenn das Paket halb am Ende und halb am Anfang des 
Ringpuffers liegt. Kannst du damit was anfangen oder musst du es zuerst 
zusammensetzen? Das Problem hast du damit nicht:
> ... Pointer Swappen ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.