Forum: Mikrocontroller und Digitale Elektronik Adressen im Mikrocontroller (C Prog.)


von urmel88 (Gast)


Lesenswert?

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

von STK500-Besitzer (Gast)


Lesenswert?

>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.

von Peter D. (peda)


Lesenswert?

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

von urmel88 (Gast)


Lesenswert?

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?

von urmel88 (Gast)


Lesenswert?

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

von Skua C. (skua)


Lesenswert?

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
Noch kein Account? Hier anmelden.