Frage zu Assembler Preprocessor directives

Gast #1718447
Lesenswert?
• ▲
▼
Hallo!

Ich habe dem AVR-Tutorial ein Codeschnipsel entnommen um mir vom 
Assembler den Wert für UBRR0 bei gegebener Taktfrequenz und Baudrate 
berechnen zu lassen. Ist der Baudratenfehler zu hoch, so wird mit einer 
Fehlermeldung abgebrochen. Ansonsten soll der Wert für UBRR0 ausgegeben 
werden. Hier das Minimalbeispiel:
1
#include <m88PAdef.inc>             ;Definitionsdatei ATMega88PA
2

3
        #define XTAL 8000000        ;Systemtakt 8 MHz
4
        #define BAUD 9600           ;Baudrate
5

6
        ;Berechnungen für Baudratenfehler
7
        #define UBRR0_VAL   ((XTAL+BAUD*8)/(BAUD*16)-1)     ;Gerundeter Wert für UBBR0
8
        #define BAUD_REAL   (XTAL/(16*(UBRR0_VAL+1)))       ;Reale Baudrate
9
        #define BAUD_ERROR  ((BAUD_REAL*1000)/BAUD-1000)    ;Fehler in Promille
10
 
11
        #if ((BAUD_ERROR > 10) || (BAUD_ERROR < -10))       ;Max. +/-10 Promille, sonst Fehlermeldung
12
            #error "Fehler bei Baudrate grösser 1 Prozent!"
13
        #else
14
            #message "UBBR0 = " UBRR0_VAL
15
        #endif
16

17

18
        .CSEG
19
        nop

Als Ausgabe erfolgt:
test.asm(14): UBBR0 =  ( ( 8000000 + 9600 * 8 ) / ( 9600 * 16 ) - 1 )

Wie bekomme ich es hin, dass dieser Term fertig ausgerechnet dort 
erscheint? Es wäre schön wenn mir hier jemand weiterhelfen kann!

Viele Grüße, Chris
Gast #1719006
Lesenswert?
• ▲
▼
Danke für die Antwort! Schade, ich dachte es wäre vielleicht irgendwie 
möglich für die Ausgabe ebenfalls eine Auswertung des Terms zu 
erreichen. Schließlich geschieht dies auch in der if-Anweisung und man 
kann den Wert auch später im Programm dem entsprechenden Register 
zuweisen.
Gast #1719023
Lesenswert?
• ▲
▼
Nobody schrieb:
> Naja, die Frage wäre wozu Du den Wert brauchst. An sich ist der konkrete
> Wert völlig irrelevant für den Leser.

Ich hätte den Wert (der ja später UBRR0 zugewiesen wird) bei der 
Assemblierung einfach gerne gesehen. Quasi zur Kontrolle oder als 
zusätzliche Information. Das ist natürlich nicht so wichtig, aber es 
wäre halt ganz nett gewesen.

Nobody schrieb:
> Wenn es darum geht Deine Neugierde zu befriedigen, dann schau im
> Assemblerlisting nach.

Ja, das geht natürlich auch :-)


Danke!

Antwort schreiben

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.

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.