www.mikrocontroller.net

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


Autor: urmel88 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: urmel88 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: urmel88 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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) ) {}
?

Autor: Skua C:\> (skua)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.