header Grundsatzfragen (Assembler)

OP #4632925
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
Gast #4632982
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
Gast #4633091
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
Gast #4633106
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
(Firma: Vescomp) #4633205
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren