Här är ett komplett exempel, testa med att ta bort anrop till någon subrutin o se att koden för dem försvinner i rutan "program-memory".
Kod: Markera allt
list p=16f688
#include <p16f688.inc>
__CONFIG _CPD_OFF & _CP_ON & _EC_OSC & _BOD_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _MCLRE_ON
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
MinnesGränser macro RAM_Min, RAM_Max
errorlevel -207
_StartRamAdress set RAM_Min
LedigRamAdress set RAM_Min
MaxRamAdress set RAM_Max
errorlevel +207
endm
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
VisaMinnesAnv macro
errorlevel -207
messg _StartRamAdress, #v(_StartRamAdress)
messg LedigRamAdress, #v(LedigRamAdress)
messg MaxRamAdress, #v(MaxRamAdress)
messg "Antal anv RAMbyte", #v(LedigRamAdress - _StartRamAdress), " av ", #v(MaxRamAdress - _StartRamAdress)
errorlevel +207
endm
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
VCall MACRO SubrutinAdress, SubrutinFinns
ifndef SubrutinFinns
#define SubrutinFinns SubrutinFinns
endif
call SubrutinAdress
endm
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
LVCall MACRO SubrutinAdress, SubrutinFinns
ifndef SubrutinFinns
#define SubrutinFinns SubrutinFinns
endif
errorlevel -306
pagesel SubrutinAdress
call SubrutinAdress
pagesel $
errorlevel +306
endm
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
RAMVar MACRO VariabelNamn, VariabelFinns
errorlevel -207
ifndef VariabelFinns
if LedigRamAdress > MaxRamAdress
error "LedigRamAdress > MaxRamAdress", VariabelNamn
endif
VariabelNamn equ LedigRamAdress
LedigRamAdress = LedigRamAdress + 1
#define VariabelFinns VariabelFinns
endif
errorlevel +207
endm
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
; Huvudprogram --------------------------------------
MinnesGränser 21h, 5Fh
org 0h
RAMVar var1, var1_
RAMVar var2, var2_
vcall Subrutin_1, Subrutin_1_
lvcall Subrutin_3, Subrutin_3_
stopp goto stopp
; Huvudprogram --------------------------------------
;ssssssssssssssssssssssssssssssssssssssssssssssssssss
ifdef Subrutin_1_
RAMVar var1, var1_
Subrutin_1
nop
nop
nop
vcall Subrutin_2, Subrutin_2_
nop
nop
return
endif
;ssssssssssssssssssssssssssssssssssssssssssssssssssss
;ssssssssssssssssssssssssssssssssssssssssssssssssssss
ifdef Subrutin_2_
Subrutin_2
nop
nop
nop
return
endif
;ssssssssssssssssssssssssssssssssssssssssssssssssssss
org 800h
;ssssssssssssssssssssssssssssssssssssssssssssssssssss
ifdef Subrutin_3_
Subrutin_3
nop
nop
nop
return
endif
;ssssssssssssssssssssssssssssssssssssssssssssssssssss
VisaMinnesAnv
end