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
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.
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);
Sehr wirr, das Ganze, wozu diese Kopierorgien ? Ne Variable kannst Du direkt manipulieren, egal ob per Pointer oder per Name:
1 | unsigned char * pointer_var = Adresse; |
2 | |
3 | *pointer_var += 6; |
Peter
> 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?
1 | for (i = 0; i < ANZAHL; i++) |
2 | 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.
_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
@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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.