mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Inhalt des Speicherbereiches


Autor: Hannes Weninger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte den Inhalt eines Speicherbereiches um 6 erhöhen und habs mit 
memcpy((VC_HANDLE+offsetImmer), arrSetzen[0], 1); versucht, nur leider 
klappt das nicht, im Speicherbereich steht dann irgendwas.
Gibts noch eine andere Methode außer memcpy?
Mit der Dereferenzierung gehts bei mir nicht, das unterstützt mein 
Kompiler nicht!!


lg
Hannes

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was meinst Du mit "Inhalt um 6 erhöhen"?

Soll der Inhalt um 6 Bytes verschoben werden?

Dafür gibt es die Funktion memmove.

Was meinst Du mit der von Deinem Compiler nicht unterstützten 
Dereferenzierung? Das klingt ... wirr.

Beschreibe genau, was Du tun willst. Poste Deinen Quelltext.

Sonst wird das nichts.

Autor: Hannes Weninger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der Inhalt des Speicherbereiches soll um 6 erhöht werden, ich habs bis 
jetzt so gemacht wie unten, ich hba mir den Inhalt mit memcpy geholt 
dann 6 dazugezählt und dann wieder in den Speicherbereich geschrieben 
nur leider wird dann nicht um 6 erhöht sondern ich bekomme bei den 
Speicherbereichen 1, 48 und 255 und ich weiß nicht wieso?

Vielleicht hat da jemand eine Idee.

Vielen Dank!!

lg
Hannes



  memcpy(&arrSetzen[0], VC_HANDLE+offsetImmer, sizeof(arrSetzen[0]));
    memcpy(&arrSetzen[1], VC_HANDLE+offsetImmer+4, 
sizeof(arrSetzen[1]));
    arrSetzen[0] = arrayTest10arrTest1[0] + 6;
    arrSetzen[1] = arrayTest10arrTest1[4] + 6;
    memcpy((VC_HANDLE+offsetImmer), arrSetzen[0], 1);
    memcpy((VC_HANDLE+offsetImmer+4), arrSetzen[1], 1);

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr wirr, das Ganze, wozu diese Kopierorgien ?

Ne Variable kannst Du direkt manipulieren, egal ob per Pointer oder per 
Name:
unsigned char * pointer_var = Adresse;

*pointer_var += 6;


Peter

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> der Inhalt des Speicherbereiches soll um 6 erhöht werden,

Damit wird es immer noch nicht klarer oder verständlicher.

Willst Du den Wert jedes einzelnen Bytes im Speicherbereich um den 
Betrag 6 erhöhen?
for (i = 0; i < ANZAHL; i++)
  Speicherbereich[i] += 6;

Wenn der "Speicherbereich" aber aus einem anderen Datentyp wie int oder 
long besteht, muss das entsprechend angepasst werden.

Dein Quelltext ist ohne die Definition der verwendeten Variablen 
vollkommen nutzlos.

Autor: Hannes Weninger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
_LOCAL   UDINT       VC_HANDLE;
_LOCAL USINT      arrSetzen[3];
_LOCAL   UINT       arrayTest10arrTest1[10];
_LOCAL DINT       offsetImmer;

Das sind die Variablendefinitionen.
Ich arbeite mit einem 8- Bit Prozessor, die Adressierung ist 32 Bit 
(DINT), Ich bin schon draufgekommen, dass ich nur einen speicherbereich 
erhöhe aber der Datentyp wahrscheinlich mehr Speicherbereiche hat (bei 
INT z.B. 2).
Ich erhöhe also irgendwas aber  mir ist nicht ganz klar, warum ich 0, 1, 
48, und 255 herausbekomme.

Vielen DANK.

lg
Hannes

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hannes Weninger

Du redest immer noch wirr. Ist es denn so schwer, mal ein paar 
grundlegende Informationen beeitzustellen?

-welcher Prozessor
-welcher Compiler
-ggf. welches Evaluationboard

Und einfach den Quellcode ohne Kürzungen als Anhang hier einstellen.
Ist eigentlich nicht wirklich schwer.

>Ich arbeite mit einem 8- Bit Prozessor, die Adressierung ist 32 Bit
>(DINT),

Was schon mal komisch klingt.

>Ich bin schon draufgekommen, dass ich nur einen speicherbereich
>erhöhe aber der Datentyp wahrscheinlich mehr Speicherbereiche hat (bei
>INT z.B. 2).

Kann es sein, dass du Assembler(Denken) mit C vermischst?

MFG
Falk

Autor: Hannes Weninger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, aber ich programmiere eine SPS in C,
Mein Problem ist, ich habe auf der SPS ein paar Tasten, und ich möchte 
jetzt im Speicher schauenm, was sich tut wenn eine Taste gedrückt wird 
und es passiert im Speicher folgendes:

Je nach Taste wird ein Bit gesetzt und gleichzeitig wird in einem 
anderen Speicherbereich bei jedem Tastendruck und bei jedem Loslassen um 
6 erhöht. Ich wollte das jetzt mit meinem Programm oben nach stellen, 
aber bei mir kommt eben nur 0, 1, 48, und 255 heraus, wenn ich genau die 
Speicherstelle, welche durch den realen Tastendruck erhöht wird, mit 
meinem Programm erhöhe.

Vielen Dank für Eure Anregungen.

lg
Hannes

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.