Forum: Mikrocontroller und Digitale Elektronik Binärzahlen im Flash ablegen


von Eumel (Gast)


Lesenswert?

Hallo, ich will einige Binärzahlen im Flash ablegen. Mein Code sieht so 
aus:
1
.db
2
3
; 00
4
0b01111110,
5
0b01111110,
6
; 01
7
0b01111110,
8
0b00110000,
9
; 02
10
0b01111110,
11
0b01101101,
12
; 03
13
0b01111110,
14
0b01111001,
15
; 04
16
0b01111110,
17
0b00110011,
18
; 05
19
0b01111110,
20
0b01011011,
21
; 06
22
0b01111110,
23
0b01011111,
24
; 07
25
0b01111110,
26
0b01110000,
27
; 08
28
0b01111110,
29
0b01111111,
30
; 09
31
0b01111110,
32
0b01111011,
33
; 10
34
0b00110000,
35
0b01111110

das geht aber nicht da erwartet wird, dass alle Zahlen schön in einer 
Reihe hinter dem .db stehen (keine Zeilenumrüche, da gibts eine 
Fehlermeldung)

Gibts eine Möglichkeit wie ich das trotzdem in dieser für mich 
übersichtlicheren Form im AVR Studio darstellen kann ohne 
Fehlermeldungen zu produzieren?
Danke.

von Karol B. (johnpatcher)


Lesenswert?

Was für Werkzeuge (Assembler) setzt du denn ein? I.d.R. maskiert ein 
Backslash am Ende der Zeile den Zeilenumbruch, probiere es also Mal mit:
1
.db
2
3
; 00
4
0b01111110, \
5
0b01111110, \
6
; ...
7
0b01111110

von Eumel (Gast)


Lesenswert?

Ich benutze das AVRStudio 6.
Danke für deinen Vorschlag, klappt leider nicht.

von Tom (Gast)


Lesenswert?

".db" an jedem Zeilenanfang

von Spess53 (Gast)


Lesenswert?

Hi

>".db" an jedem Zeilenanfang

Dann belegt aber zum Beispiel diese Zeile
1
  .db 0b01111110

zwei Byte, da der Assembler bei einer ungeradzahligen Anzahl von Bytes 
in einer Zeile eine Null ergänzt.

Ich würde es so
1
; 00
2
.db 0b01111110,0b01111110
3
; 01
4
.db 0b01111110,0b00110000,
5
; 02
6
.db 0b01111110,0b01101101
7
....
machen.

MfG Spess

von Peter D. (peda)


Lesenswert?

Karol Babioch schrieb:
> Was für Werkzeuge (Assembler) setzt du denn ein? I.d.R. maskiert ein
> Backslash am Ende der Zeile den Zeilenumbruch, probiere es also Mal mit:
> .db
>
> ; 00
> 0b01111110, \
> 0b01111110, \
> ; ...
> 0b01111110

Was soll das bringen, 7 Zeilen, aber nur 2 '\' ?
Jede Zeile muß verlängert werden, außer die letzte.

Und Zeilenkommentare mittendrin kann ja auch nicht gehen. Sie müssen in 
C-Notation sein /* ... */
1
.db \
2
/* bla blub */ \
3
0b111 \
4
0b101 \
5
/* usw. */ \

von ITler (Gast)


Lesenswert?

Es ist abhängig wie er den Code übnersetzt:

- AVR Assembler -> AVR Assembler Syntax (z.B. ";" für Kommentare)

oder

- GCC AS -> C Preprocessor etc.

Da ";" für Kommentare genutzt werden, nehme ich an es wird der 
AVR-Assembler verwendet. Der "\" sollte aber funktionieren um eine 
logische Zeile auf mehrere Zeilen zu verteilen.

Die Syntax ist hier beschrieben:

http://www.atmel.no/webdoc/avrassembler/avrassembler.wb_Syntax.html

Dort steht auch das .db immer eine gerade Anzahl von Argumenten verlangt 
und ggf. auffüllt. Das muss auch so sein, da der Programmspeicher ja 
wortweise addressiert wird.

Grüße
Markus

von Peter D. (peda)


Lesenswert?

ITler schrieb:
> - AVR Assembler -> AVR Assembler Syntax (z.B. ";" für Kommentare)

Der AVR Assembler benutzt auch den C-Präprozessor.
Nur ein Komma fehlte in meinem Beispiel:
1
AVRASM ver. 2.1.41  db.asm Wed Feb 13 09:55:47 2013
2
3
4
5
                 .db \
6
                 /* bla blub */ \
7
                 0b111, \
8
                 0b101 \
9
                 /* usw. */ \
10
000000 0507
11
000001 0000      nop

von Eumel (Gast)


Lesenswert?

Nochmals vielen Dank an alle!
Ich werde mich an den Vorschlag von Spess halten.
Noch kurz zur Info was es eigentlich sein soll: Ein Lookup-Tabelle für 
die Siebensegmentanzeige einer Uhr. Also 00 bis 59. Geht so wohl am 
schnellsten :)

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.