PIC: villkorlig assemblering i abs-mode

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1541
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

PIC: villkorlig assemblering i abs-mode

Inlägg av persika »

Har gjort några makro som gör att man kan assemblera subrutiner och "variabler" villkorligt i abs-mode.

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                       
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Macroprogrammering är trevligt... :-)

Men,

Att ta fram något som enbart fungerar i abs mode är lite "mot strömmen" idag.
Det finns ingen anledning att inte köra relocatable mode, det ger så många andra fördelar.

Det som din "RAMvar" gör är samma samma sak som RES direktivet, så vitt jag förstår.
Och "VisaMinnesAnv" ger väl samma information som MAP filen ?
Både RES och MAP filen förutsätter dock att man kör relocatable mode...

Eftersom du uppenbarligen gillar macroprogrammering, har du kollat
Olin Lathrops macron i hans utveckligsmiljö ?
http://www.embedinc.com/pic/
Macrona finns i : http://www.embedinc.com/pic/std.ins.aspic.htm
Miljön bygger på en egen pre-processor som körs före MPASM :
http://www.embedinc.com/pic/prepic.txt.htm
Hela kittet kan plockas ner och används fritt...
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1541
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Inlägg av persika »

>Macroprogrammering är trevligt...

Ja, men det känns lite begränsat mot ett vanligt programmeringsspråk, går inte göra allt man tänker sig, lätt att få konstiga fel.

Tänkte mig göra ett makro-program som räknade ut behov av stack-minne för subrutinerna, men det gick jag bet på.
Likaså försökte jag göra den villkorliga assembleringen (ovan) för reloc-mod, men det gick inte.

Mycket intressant på Olin Lathrops sidor.
Hittade ett program som konverterar wav-filer till text-filer, har inte med denna tråd att göra, men intressant till annat.
Ska kolla mera på sidan efter julstöket, som nu står för dörren.
Skriv svar