JESCAB 
Produkter Tjänster Info Leveransvillkor Kontakt
 Snabb länkar:


abs_reloc

 

Samma kod skriven som "absolute mode" och "relocatable mode".

I en sådan här kort kod blir inte fördelarna med relocatable mode helt tydliga, men skillnaderna  i själva koden framgår förhoppningsvis. De punkter där det skiljer är markerade med rött. Notera också att men ska lägga till LKR filen till Linker Scripts i projekt-fönstret i MPLAB. Dessa LKR filer ligger i installationskatalogen för MPLAB.

 

Glöm inte att titta i MAP filen också, där det framgår vart länkaren har lagt koden och variablerna.

(I absolute mode skapas ingen MAP fil...)

 

Se även min infosida om relocatable mode.

 

Absolute mode

Relocatable mode

;*********************************************
;   Enkelt blink-a-led, 16F628A.
;
;*********************************************
;   Files required:  P16F628A.INC
;
;
;*********************************************
;
;
    list      p=16f628A
    #include <p16f628A.inc>

 __CONFIG   _DATA_CP_OFF & _CP_ON & _LVP_OFF & _BODEN_OFF & _BOREN_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _MCLRE_ON
;
;*********************************************
; Här början den igentligen koden...
; Vi måste ange h'0000' i koden eftersom
; länkaren inte används.
;
;
RESET_VECTOR    ORG     h'0000'
        goto    start
        nop
        nop
        nop
        goto    isr_routine
;       
;
;
;*********************************************
; Några variabler.
; De används inte i koden men visar skillanden
; mellan abs och reloc mode. Varablerna läggs i
; "shared/unbanked memory" för att slippa
; banksel...
;
Var1    EQU     h'70'
Var2    EQU     h'71'
Var3    EQU     h'72'
;
;
;
;*********************************************
; Huvudkoden.
; Notera användningen av ORG + adress !
;
;
MAIN    ORG     h'0010'
;
start
;
        banksel cmcon
        movlw   h'07'
        movwf   cmcon     ; Stäng av ADC.
;
        banksel trisa
        clrf    trisa
        clrf    trisb     ; Alla = utgångar.
;
        banksel t1con
        movlw   b'00110001'
        movwf   t1con     ; Se datablad...
;      
        banksel pie1
        movlw   b'00000001'
        movwf   pie1      ; Avbrott från TMR1.
;
        banksel intcon 
        bsf     intcon, peie
        bsf     intcon, gie  ; Avbrott...
;
loop
        goto loop      ; Vänta på avbrott...
;
;
;
;*********************************************
; Interruptkoden.
; Notera användningen av ORG + adress !
;
ISR_ROUTINE     ORG    h'0080'
;
isr_routine
;
        banksel porta
        comf    porta, f         ; Blinka !!
;
        banksel pir1
        bcf     pir1, tmr1if
;
        retfie
;
;*********************************************
;
  end

;*********************************************
;   Enkelt blink-a-led, 16F628A.
;
;**********************************************
;   Files required:  P16F628A.INC
;                     16F628A.LKR 
;
;**********************************************
;
;
    list      p=16f628A
    #include <p16f628A.inc>

 __CONFIG   _DATA_CP_OFF & _CP_ON & _LVP_OFF & _BODEN_OFF & _BOREN_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _MCLRE_ON
;
;**********************************************
; Här början den igentligen koden...
; "STARTUP" är definierat i LNK filen till
; h'0000'. Genom att kalla kodsegmentet nedan
; för STARTUP, så läggs det automatisk rätt.
;
STARTUP    CODE
        goto    start
        nop
        nop
        nop
        goto    isr_routine
;       
;
;
;**********************************************
; Några variabler.
; De används inte i koden men visar skillanden
; mellan abs och reloc mode. Varablerna läggs i
; "shared/unbanked memory" för att slippa
; banksel...
;
MY_VARS         UDATA_SHR
Var1    RES     1
Var2    RES     1
Var3    RES     1
;
;
;**********************************************
; Huvudkoden
; Ingen adress angiven, länkaren lägger
; koden där det är "ledigt"...
;
MAIN    CODE
;
start
;
        banksel cmcon
        movlw   h'07'
        movwf   cmcon     ; Stäng av ADC.
;
        banksel trisa
        clrf    trisa
        clrf    trisb     ; Alla  = utgångar.
;
        banksel t1con
        movlw   b'00110001'
        movwf   t1con     ; Se datablad...
;      
        banksel pie1
        movlw   b'00000001'
        movwf   pie1      ; Avbrott från TMR1.
;
        banksel intcon 
        bsf     intcon, peie
        bsf     intcon, gie  ; Abrott...
;
loop
        goto loop      ; Vänta på avbrott...
;
;
;
;**********************************************
; Interruptkoden.
; Notera användningen av CODE !
;
ISR_ROUTINE     CODE
;
isr_routine
;
        banksel porta
        comf    porta, f         ; Blinka !!
;
        banksel pir1
        bcf     pir1, tmr1if
;
        retfie
;
;*********************************************
;
  end

 

Här kommer MAP filen för exemplet ovan.

 

"Section info" listar resultatet av varje CODE och UDATA/UDATA_SHR direktiv, plus

lite som läggs till automatisk men som är ointressant just nu...

 

"Symbols" listar alla symboler vilka kan vara "lables" eller variabler (det är igentligen samma

sak, bara något som innehåller en adress till flashminnet eller till RAM minnet...)

Notera att symboler skapade med EQU *inte* kommer med i denna lista! Utan enbart de

symboler där MPASM/MPLINK *vet* att det är just en *adress* till något i minnet.

En symbol skapad med EQU kan ju innehålla precis vad som helst...

 

MPLINK 4.11, Linker
Linker Map File - Created Wed Jul 04 15:29:15 2007

 

                                 Section Info
                  Section       Type    Address   Location Size(Bytes)
                ---------  ---------  ---------  ---------  ---------
                  STARTUP       code   0x000000    program   0x00000a
                   .cinit    romdata   0x000005    program   0x000004
                     MAIN       code   0x000007    program   0x00002a
              ISR_ROUTINE       code   0x00001c    program   0x00000e
                  .config       code   0x002007    program   0x000002
                  MY_VARS      udata   0x000070       data   0x000003

 

                              Program Memory Usage
                               Start         End     
                           ---------   ---------     
                            0x000000    0x000022     
                            0x002007    0x002007     
            36 out of 2182 program addresses used, program memory utilization is 1%

 

                              Symbols - Sorted by Name
                     Name    Address   Location    Storage File                    
                ---------  ---------  ---------  --------- ---------               
              ISR_ROUTINE   0x00001c    program     static C:\DATA\proj\abs_reloc\reloc.asm
                     LOOP   0x00001b    program     static C:\DATA\proj\abs_reloc\reloc.asm
                    START   0x000007    program     static C:\DATA\proj\abs_reloc\reloc.asm
                     VAR1   0x000070       data     static C:\DATA\proj\abs_reloc\reloc.asm
                     VAR2   0x000071       data     static C:\DATA\proj\abs_reloc\reloc.asm
                     VAR3   0x000072       data     static C:\DATA\proj\abs_reloc\reloc.asm

 

                              Symbols - Sorted by Address
                     Name    Address   Location    Storage File                    
                ---------  ---------  ---------  --------- ---------               
                    START   0x000007    program     static C:\DATA\proj\abs_reloc\reloc.asm
                     LOOP   0x00001b    program     static C:\DATA\proj\abs_reloc\reloc.asm
              ISR_ROUTINE   0x00001c    program     static C:\DATA\proj\abs_reloc\reloc.asm
                     VAR1   0x000070       data     static C:\DATA\proj\abs_reloc\reloc.asm
                     VAR2   0x000071       data     static C:\DATA\proj\abs_reloc\reloc.asm
                     VAR3   0x000072       data     static C:\DATA\proj\abs_reloc\reloc.asm


 

 


Denna sida senast uppdaterad 26-Jan-2013