Deklaration av variablar i ASM
Deklaration av variablar i ASM
Har någon lust att förklara det här för mig.
Skriver man så här i asm.
Och gör man det så förklara gärna CBLOCK och ENDC är det start och slut
på variabeldeklarationen? behöver man inte tala om i assembler vad det är för variabel eller kan det bara vara en siffra mellan 0-255?
Tacksam för svar.
Finns det nån bra sida där man kan läsa om upplägg i program är jag
intresserad!
CBLOCK 0x000
WREG_TEMP ;to save WREG during interrupt
STATUS_TEMP ;to save STATUS during interrupt
BSR_TEMP ;to save BSR during interrupt
FSR0H_TEMP ;to save FSR0H during interrupt
FSR0L_TEMP ;to save FSR0L during interrupt
FSR0H_SHADOW ;to save FSR0H during high interrupt
FSR0L_SHADOW ;to save FSR0L during high interrupt
Flags ;byte for indicator flag bits
TempData ;temporary data in main routines
TempRxData ;temporary data in Rx buffer routines
TempTxData ;temporary data in Tx buffer routines
TxStartPtrH ;pointer to start of data in Tx buffer
TxStartPtrL ;pointer to start of data in Tx buffer
TxEndPtrH ;pointer to end of data in Tx buffer
TxEndPtrL ;pointer to end of data in Tx buffer
RxStartPtrH ;pointer to start of data in Rx buffer
RxStartPtrL ;pointer to start of data in Rx buffer
RxEndPtrH ;pointer to end of data in Rx buffer
RxEndPtrL ;pointer to end of data in Rx buffer
TxBuffer:TX_BUF_LEN ;Tx buffer for data to transmit RxBuffer:RX_BUF_LEN ;Rx buffer for received data
ENDC
Skriver man så här i asm.
Och gör man det så förklara gärna CBLOCK och ENDC är det start och slut
på variabeldeklarationen? behöver man inte tala om i assembler vad det är för variabel eller kan det bara vara en siffra mellan 0-255?
Tacksam för svar.
Finns det nån bra sida där man kan läsa om upplägg i program är jag
intresserad!
CBLOCK 0x000
WREG_TEMP ;to save WREG during interrupt
STATUS_TEMP ;to save STATUS during interrupt
BSR_TEMP ;to save BSR during interrupt
FSR0H_TEMP ;to save FSR0H during interrupt
FSR0L_TEMP ;to save FSR0L during interrupt
FSR0H_SHADOW ;to save FSR0H during high interrupt
FSR0L_SHADOW ;to save FSR0L during high interrupt
Flags ;byte for indicator flag bits
TempData ;temporary data in main routines
TempRxData ;temporary data in Rx buffer routines
TempTxData ;temporary data in Tx buffer routines
TxStartPtrH ;pointer to start of data in Tx buffer
TxStartPtrL ;pointer to start of data in Tx buffer
TxEndPtrH ;pointer to end of data in Tx buffer
TxEndPtrL ;pointer to end of data in Tx buffer
RxStartPtrH ;pointer to start of data in Rx buffer
RxStartPtrL ;pointer to start of data in Rx buffer
RxEndPtrH ;pointer to end of data in Rx buffer
RxEndPtrL ;pointer to end of data in Rx buffer
TxBuffer:TX_BUF_LEN ;Tx buffer for data to transmit RxBuffer:RX_BUF_LEN ;Rx buffer for received data
ENDC
Till att börja med är det alltid en fördel att skriva *vilken* assembler det gäller, men nu råkar det vara så att jag kan gissa mig till att du använder PIC och MPLAB. I hjälpfilerna till MPLAB finns all information du behöver om CBLOCK, och vad du menar med "..bara vara en siffra mellan 0-255" vet jag inte. Själv använder jag direktivet RES när jag deklarerar variabler, för då får jag själv ange storlek. RES 1 ger ett register (8 bitar), RES 5 ger 5*8, osv.
Generellt sett är "Relocatable mode" mer modernt och smidigare eftersom
det blir färre hårda kopplingar till just den processor man jobbar med
för tillfället. Det blir alltså lite enklare att flytta koden mellan
olika processorer. "Absolut mode" är en relik från historen och det finns
idag ingen anledning att själv skriva kod så.
Sen är det en annan sak att 99% av all kod ute "på nätet" är skriven
i absolut mode, men den brukar i alla fall vara så jäkla dålig, så det
spelar mindre roll...
> CBLOCK och ENDC är det start och slut
CBLOCK = "Constant Block".
CBLOCK skapar ett antal *konstanter* med olika värden i sekvens.
O.b.s att detta inte har ett smack med allokering av RAM minne att göra !!
Konstanterna kan användas till vad som helst, och MPASM har ingen koll
på att du inte strulare till det för dig och t.ex sätter två konstanter till
samma värde och sedan använder dom som adresser...
RES direktivet däremot gör en RAM allokering på korrekt sätt.
> kan det bara vara en siffra mellan 0-255?
Siffra och siffra....
Det kan vara ett värde, ett tecken (t.ex ASCII), 8 st bit-flaggor eller vad
du nu vill använda ett register till. Det är helt upp till dig.
Vad var ditt exemepl till för processor ?
Förrutom sidan som du länkade till, se även : http://www.jescab.se/abs_reloc.html
det blir färre hårda kopplingar till just den processor man jobbar med
för tillfället. Det blir alltså lite enklare att flytta koden mellan
olika processorer. "Absolut mode" är en relik från historen och det finns
idag ingen anledning att själv skriva kod så.
Sen är det en annan sak att 99% av all kod ute "på nätet" är skriven
i absolut mode, men den brukar i alla fall vara så jäkla dålig, så det
spelar mindre roll...
> CBLOCK och ENDC är det start och slut
CBLOCK = "Constant Block".
CBLOCK skapar ett antal *konstanter* med olika värden i sekvens.
O.b.s att detta inte har ett smack med allokering av RAM minne att göra !!
Konstanterna kan användas till vad som helst, och MPASM har ingen koll
på att du inte strulare till det för dig och t.ex sätter två konstanter till
samma värde och sedan använder dom som adresser...
RES direktivet däremot gör en RAM allokering på korrekt sätt.
> kan det bara vara en siffra mellan 0-255?
Siffra och siffra....
Det kan vara ett värde, ett tecken (t.ex ASCII), 8 st bit-flaggor eller vad
du nu vill använda ett register till. Det är helt upp till dig.
Vad var ditt exemepl till för processor ?
Förrutom sidan som du länkade till, se även : http://www.jescab.se/abs_reloc.html
> Programmet var tagit ur ett exempel till18f452
OK, misstänkte att det var en PIC18. Men i så fall så är :
> WREG_TEMP ;to save WREG during interrupt
> STATUS_TEMP ;to save STATUS during interrupt
> BSR_TEMP ;to save BSR during interrupt
i princip onödiga. Interrupt systemet på PIC18 fungerar inte så,
om man inte envisas med att köra dubbla interrupt nivåer, vilket
i 99% av fallen är onödigt...
Men de kanske aldrig användes i koden i alla fall...
Var finns "programmet" (om det är publikt, alltså) ?
OK, misstänkte att det var en PIC18. Men i så fall så är :
> WREG_TEMP ;to save WREG during interrupt
> STATUS_TEMP ;to save STATUS during interrupt
> BSR_TEMP ;to save BSR during interrupt
i princip onödiga. Interrupt systemet på PIC18 fungerar inte så,
om man inte envisas med att köra dubbla interrupt nivåer, vilket
i 99% av fallen är onödigt...
Men de kanske aldrig användes i koden i alla fall...
Var finns "programmet" (om det är publikt, alltså) ?
Som jag skrev :
> Sen är det en annan sak att 99% av all kod ute "på nätet" är skriven
> i absolut mode,
Och Microchip är inget undantag...
OK, ett USART exmpel.
Jag antar att det enklaste är att bara plocka de delar som du vill använda.
Det är ju ett ganska komplext exempel med buffrar m.m. Är det så du
vill köra ? Att *läsa* koden är därmot aldrig fel! Det lär man sig en massapå.
Men sedan kan man skriva sin egen kod i alla fall.
Dessutom ska väl detta ingå i något annat annat jag.
> Sen är det en annan sak att 99% av all kod ute "på nätet" är skriven
> i absolut mode,
Och Microchip är inget undantag...

OK, ett USART exmpel.
Jag antar att det enklaste är att bara plocka de delar som du vill använda.
Det är ju ett ganska komplext exempel med buffrar m.m. Är det så du
vill köra ? Att *läsa* koden är därmot aldrig fel! Det lär man sig en massapå.
Men sedan kan man skriva sin egen kod i alla fall.
Dessutom ska väl detta ingå i något annat annat jag.
Tack för visat intresse av att hjälpa.
Det är guld värt när man inte fattar.
Ja jag tänkte försöka förstå programmet för att sedan plocka ut det som verkar intressant för mig. Finns det någonstans man kan få hjälp med just sådana frågor om programupplägg som detta.
Förutom mplabs hjälp som jag fick tips om innan.
Det är guld värt när man inte fattar.
Ja jag tänkte försöka förstå programmet för att sedan plocka ut det som verkar intressant för mig. Finns det någonstans man kan få hjälp med just sådana frågor om programupplägg som detta.
Förutom mplabs hjälp som jag fick tips om innan.
Problemet är att det är väldigt personligt hur man vill organisera
sin kod. I mina exempel syns hur jag har gjort. Sen tillkommer
fler "regler" när man skapar projekt med flera filer o.s.v.
Min uppfattning är i alla fall att relocatable mode till viss del ger en
snygg struktur av sig självt.
Och igentligen är det inget som är specifikt eller unikt för just PIC kod...
sin kod. I mina exempel syns hur jag har gjort. Sen tillkommer
fler "regler" när man skapar projekt med flera filer o.s.v.
Min uppfattning är i alla fall att relocatable mode till viss del ger en
snygg struktur av sig självt.
Och igentligen är det inget som är specifikt eller unikt för just PIC kod...
