Resultat ut från macro PIC16f887

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Anders_Peter
Inlägg: 66
Blev medlem: 24 juli 2008, 00:40:30
Ort: Skövde

Resultat ut från macro PIC16f887

Inlägg av Anders_Peter »

Hej

Om man har ett macro så 'skickar' man in värden till macrot, men hur är bästa sätt att hantera restultat ut från macrot på?

Ett exempel på macro:

Kod: Markera allt

;
;********************** Variabeltilldelningar *******************
;Generella variabler	
Variabler_Gen	UDATA_SHR
Test_1	RES 1	;Variabel för att testa macro				
Test_2	RES 1	;Variabel för att testa macro
;***************************************************************

;********************** Test med macro *****************************
;Ett macro
Testa_Macro macro Värde_1, Värde_2
     	movlw Värde_1	;Hämta in första värdet till macro...
     	movwf Test_1	;... och skriv till Test_1	
     	movlw Värde_2	;Hämta in andra värdet till macro...
     	movwf Test_2	;...och skriv till Test_2
	endm
;*******************************************************************

;********************* Huvudprogram ********************************
Main 
		;Anropa macro
		Testa_Macro .9, .76
		end 		
;*****************************************
Om jag inuti macrot skriver:

movlw .93 ;Ett värde för att testa
movwf Result_ut ;Skriv resultatet till denna variabel

och deklarerar Result_ut som en variabel, så kan jag
använda innehållet i Result_ut efter anrop av macrot, men om jag inte vill
deklarera en variabel för att få ut ett eller flera resultat
ur macrot, finns det något annat sätt än att inuti macrot skriva till en deklarerad variabel?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Resultat ut från macro PIC16f887

Inlägg av sodjan »

Ett macro ger aldrig ett "resultat ut".
Du har nog inte riktigt förstått hur ett macro fungerar.
Tror du att det är något som finns i själva PIC'en ??
Ett macro genererar bara ren kod och det är ingen skillnad på den
och kod som du lika väl hade kunnat skriva direkt.
Anders_Peter
Inlägg: 66
Blev medlem: 24 juli 2008, 00:40:30
Ort: Skövde

Re: Resultat ut från macro PIC16f887

Inlägg av Anders_Peter »

Min tanke var att kunna ha ett 'bibliotek' med olika macron som har en färdig funktion man kan lyfta in i sin kod och därmed slippa att deklarera variabler utanför macrot.

Med tanke på ovanstående tänkte jag att det kanske fanns någon 'funktion' utan att behöva deklarera för att få ut ett resultat, men om det är samma som att skriva kod direkt så förstår jag att det inte finns något 'resultat ut'.

Nej, jag förstår att macro inte är något som finns i PIC:en.

Tack för svaret!
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Resultat ut från macro PIC16f887

Inlägg av AndersG »

Min tanke var att kunna ha ett 'bibliotek' med olika macron som har en färdig funktion man kan lyfta in i sin kod och därmed slippa att deklarera variabler utanför macrot.
Att ha makrobibliotek är helt rätt, men kan du utveckla litet vad du vill göra? Som sodjan skriver så är makrot bara en sök/byt funktion eg. Som kan underlätta arbetet och göra koden lättare att läsa.
Anders_Peter
Inlägg: 66
Blev medlem: 24 juli 2008, 00:40:30
Ort: Skövde

Re: Resultat ut från macro PIC16f887

Inlägg av Anders_Peter »

I exempelvis Siemens styrsystem finns möjlighet att programmera 'svarta lådor' block som innehåller en färdig kod som man kan lyfta in i sin övriga kod, dessa kan programmeras som så att man har 'insignaler' och 'utsignaler' till/från detta block. Om man vill kan man inuti detta block använda sig av enbart lokala variabler, När man använder sig av enbart lokala variabler behöver man aldrig tänka på att de koliderar med övriga variabler utanför blocket.

Det var detta jag hade i åtanke att det kanske gick att göra på liknande sätt.

Det jag menar med att skicka in värden till macrot är Värde_1 och Värde_2 i denna rad:
Testa_Macro macro Värde_1, Värde_2.


Har förresten en fråga till om macro:

Om jag byter plats på macrot och anropet till macrot, alltså har anropet före macrot så får jag följande fel: Error[122] E:\!\ELEKTRONIK\PIC16F887\TEST887.ASM 73 : Illegal opcode (.9)

Vad kan detta bero på?, använder MPLAB IDE v8.10
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Resultat ut från macro PIC16f887

Inlägg av v-g »

Ett makro skapar ju bara kod på det ställe du anropar macrot. Dvs funktionellt är det exakt samma som att skriva koden i macrot. Där du "anropar" macrot säger du egentligen bara "skriv ut koden här".

Du kan "skicka in" och "få ut" data ur macrot på samma sätt som du skickar in datat i "anropet". Dina "Värde_1" &"2" kan lika gärna vara ett variabelnamn.

Det som är fiffigt med macros är om man gör samma sak på många olika ställen så kan det bli mycket överskådligare med macro. DOCK ska man alltid överväga mellan macro och funktion/subrutin.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Resultat ut från macro PIC16f887

Inlägg av sodjan »

> Om jag byter plats på macrot och anropet till macrot, alltså har anropet före macrot så får jag
> följande fel: Error[122] E:\!\ELEKTRONIK\PIC16F887\TEST887.ASM 73 : Illegal opcode (.9)
> Vad kan detta bero på?,

En vild gissning...
Kanske för att du försöker använda macrot innan det är definierat ?
Eller också så förstår jag inte frågan riktigt...

> Om man vill kan man inuti detta block använda sig av enbart lokala variabler,

Läs på om LOCAL (kap 4.44 i MPASM manualen).

Förresten, du har läst "Chapter 7. Macro Language" också, eller hur ?
Anders_Peter
Inlägg: 66
Blev medlem: 24 juli 2008, 00:40:30
Ort: Skövde

Re: Resultat ut från macro PIC16f887

Inlägg av Anders_Peter »

Du har förstått rätt Sodjan, ok så det är alltså därför jag får felkoden.

Manual till MPASM, hmm visste inte att det fanns manual utöver hjälpen i MPASM, får väl ta på dumstruten och skämmas en stund...och sedan läsa denna manual som jag nu har laddat hem.

Tack för infon!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Resultat ut från macro PIC16f887

Inlägg av sodjan »

Japp, MPASM har ju lite svårt att använda något (t.ex ett macro) som den inte känner till.
En intressant följdfråga är *varför* du provade att byta plats på macrot och anropet ?
Vad var det du ville uppnå med det ?

Och jo, den tryckta (tja, PDF då) manualen är lite enklare när man läser in sig
på något nytt. Online hjälpen i MPLAB fungerar helt OK när man redan vet
vad man letar efter, så att säga.
Anders_Peter
Inlägg: 66
Blev medlem: 24 juli 2008, 00:40:30
Ort: Skövde

Re: Resultat ut från macro PIC16f887

Inlägg av Anders_Peter »

Jag ville helt enkelt testa att göra ett macro och då skrev jag vid första försöket anropet först och sedan macrot och då fick jag felkoden, provade att byta plats mellan anrop och macro och ja då funkade det ju.

Så det var helt enkelt 'när man inte vet vad man gör så läs det man kan hitta i hjälpen och testa tills det funkar'.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Resultat ut från macro PIC16f887

Inlägg av AndersG »

Jo, det är så att du inte kan använda ett makro före du definierat det. Så är det i alla språk.
Skriv svar