Forum: Mikrocontroller und Digitale Elektronik header Grundsatzfragen (Assembler)


von André M. (killroymenzel)


Lesenswert?

Hallo,

Ich überarbeite gerade meine libs die ich geschrieben habe.
Jetzt möchte ich zu den einzelnen files (z.B. MAX7219)
eine Header-datei schreiben, so daß ich nicht immer den Header vom 
Programm ändern muss.

Das dort dann die Portdefinition stehen ist klar.
Aber ich würde auch gerne die Speicher definitionen reinschreiben.

also

;  Port_config
.equ    MAX_Port  =  PortD
.equ    MAX_CS    =  6

;  Konfigurationswerte
.equ  MAX_cascade  =  0x01  ;Anzahl der kascadierten ICs
.equ  MAX_codeB  =  0x0F  ;welcher DIGIT ist 7seg
.equ  MAX_digit  =  0x03  ;(scan-limit) fängt bei 0 an
.equ  MAX_bright  =  0x0F  ;Maximal (nur für init)
.equ  MAX_Shutdown  =  0x01  ;normal operation
.equ  MAX_test  =  0x01  ;alle LEDs an


.dseg
MAX_Copy:   .byte   = 8

.eseg
MAX_config:  .db  0x09, MAX_codeB, 0x0A, MAX_bright, 0x0B, MAX_digit, 
0x0C, MAX_Shutdown, 0x0F, MAX_test, 0

_

somit habe ich allerdings, wenn ich mehrere header-dateien einfüge 
mehrere stellen von .dseg, .eseg und natürlich die ganzen .equ....

Geht das überhaupt?

Ich würde es gerne vorher wissen, bevor ich meine ganzen libs umschreibe 
und teste.



Andre

von spess53 (Gast)


Lesenswert?

Hi

>somit habe ich allerdings, wenn ich mehrere header-dateien einfüge
>mehrere stellen von .dseg, .eseg und natürlich die ganzen .equ....

Solange nicht noch ein .cseg auftaucht, kein Problem.

MfG spess

von Georg (Gast)


Lesenswert?

André M. schrieb:
> somit habe ich allerdings, wenn ich mehrere header-dateien einfüge
> mehrere stellen von .dseg, .eseg und natürlich die ganzen .equ....

Das braucht man garnicht unbedingt, es genügt die Definitionen als 
global, export oder wie immer das im jeweiligen Assembler heisst zu 
deklarieren und in Modulen die sich drauf beziehen als External oder so. 
Dann löst das der Linker auf.

z.B.:
1
        PUBLIC   start, main, loop
2
        ORG      0H
3
START:  Tu was...
4
5
in einem anderen Modul
6
7
        EXTRN    start
8
        JMP      start
Dann setzt der Linker JMP 0 ein.

Ganze Blöcke wie Port-Adressen bindet man als Header ein, aber für 
Labels ist das fehleranfällig: wenn du z.B. den Teil bei Start 
rausschmeisst, bekommst du Fehlermeldungen, wenn du aber Start in einem 
Header definiert hast nicht.

Georg

von spess53 (Gast)


Lesenswert?

Hi

>Das braucht man garnicht unbedingt, es genügt die Definitionen als
>global, export oder wie immer das im jeweiligen Assembler heisst zu
>deklarieren und in Modulen die sich drauf beziehen als External oder so.

Es geht um AVR-Assembler. Der kennt so etwas wie 'global',' export' 
nicht.

MfG spess

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

André M. schrieb:
> somit habe ich allerdings, wenn ich mehrere header-dateien einfüge
> mehrere stellen von .dseg, .eseg und natürlich die ganzen .equ....
>
> Geht das überhaupt?

 Selbstverstandlich.
1
    .DSEG
2
aa:            .byte   1
3
    .CSEG
4
.ORG  0x0000
5
_Reset:
6
    ldi    yl,byte1(RAMEND)
7
    out    SPL,yl
8
    .DSEG
9
bb:            .byte   1
10
    .CSEG
11
    ldi    yh,byte2(RAMEND)
12
    out    SPL+1,yh
13
    .DSEG
14
cc:            .byte   1
15
    .ESEG
16
ee:            .byte   1
17
    .CSEG
18
    sei
 Die Startadresse fur CSEG natürlich nur einmal. Alles andere packt der
 Compiler schön hintereinander.

von André M. (killroymenzel)


Lesenswert?

Ich danke euch allen für die Hilfe und Erklärungen. ....



Andre

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.