mikrocontroller.net

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


Autor: Tarkan D. (gruetzwurschd)
Datum:

Bewertung
0 lesenswert
nicht 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:
for(unsigned char k=0;k<5;k++)
  {
  for(unsigned char j=0;j<6;j++)
    {
    wurst_array[k][j]=brot_array[k][j];
    }
  }

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tarkan D. (gruetzwurschd)
Datum:

Bewertung
0 lesenswert
nicht 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)??

Autor: Tarkan D. (gruetzwurschd)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: sebastians (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.