Hallo! Wie genau funktioniert das eigentlich mit den Adressen in den Mikrocontrollern? (Wir benutzen einen Atmega644). Was zum Beispiel bedeutet genau 0x7C00? Wenn mir ein PC Programm eine Anfangsadresse (die 2 Byte lang ist) auf den Mikrocontroller sendet und mir zusätzlich auch die Länge eines Datenpakets, welches auf den Mikrocontroller soll, in Bytes sendet, wie kann ich dann bestimmen, was die letzte Adresse des Datenpakets sein wird? Könnte ich einfach in C machen: addresse + laenge ? Oder ist das totaler Humbug? Dankeschön
>Was zum Beispiel bedeutet genau 0x7C00? Das ist eine Zahl in hexadezimaler Schreibweise. >addresse + laenge ? Ja, wobei das letzte Element der Liste bei adresse + länge - 1 steht. Bei addresse + laenge steht schon das erste nach der Liste.
urmel88 wrote: > Wenn mir ein PC Programm eine Anfangsadresse (die 2 Byte lang ist) auf > den Mikrocontroller sendet und mir zusätzlich auch die Länge eines > Datenpakets, welches auf den Mikrocontroller soll, in Bytes sendet, wie > kann ich dann bestimmen, was die letzte Adresse des Datenpakets sein > wird? Du meinst wohl über die UART? Dann muß der MC die Daten interpretieren, es sind alles nur Bytes. Er wird in der Regel nicht die Daten an eine bestimmte Stelle schreiben und sich damit den Speicher zerschießen. Außer es ist ein Bootloader. Peter
hallo und dankeschön! Ja, genau über den UART kommen die Daten. Also das Programm sendet immer einen Byte der Daten. Ich habe eine Funktion, die ein Wort (2 Bytes) braucht und dieses dann in den Speicher korrekt schreiben kann. Ich muss also 2 einzelne Bytes, die vom Programm gesendet werden, zusammenfügen. Wie mache ich das? Und als Adressen kann ich dann auch einfach Integerzahlen verwenden, oder? Der rechnet das dann selbstständig in Hex um?
tut mir leid, ich habe noch was vergessen. Wie stelle ich eigentlich sicher, dass nun neue Daten im UDR0 sind, so dass ich nicht zweimal das gleiche aneinander hänge? Ist es da klug den ersten Teil in einer Variable first abzuspeichern und dann: while ( (first == UDR0) ) {} ?
Zahlen sind intern Binär gespeichert Hex ist nur eine andere Intepretation. Auf Gleichheit testen ist nicht gut zerlege doch mal z.b. 514 in Einzelbytes. Solltest sowieso deine Daten per Interrupt empfangen.
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.