header Grundsatzfragen (Assembler)

OP #4632925
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
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
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
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)
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.