Adressen im Mikrocontroller (C Prog.)

Gast #1022929
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
Gast
>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
Gast
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?
Gast
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) ) {}
?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.