bankad PIC

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

bankad PIC

Inlägg av persika »

Tycker PIC'kretsarna är bra, men gillar inte att file-register är indelat i bankar. Varför är det så, är det nån fördel med det ?


12F675
Användarvisningsbild
Icecap
Inlägg: 26630
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Det sparar programminne-bits och därmed behövs mindre kisel vilket ger billigare kretsar.
Användarvisningsbild
ucadv
Inlägg: 203
Blev medlem: 29 januari 2007, 23:13:49

Inlägg av ucadv »

rent allmänt brukar bankerna användas för att
1. göra ISAn kortare
2. göra interrupten snabbare

jag har svårt att se hur banker skulle spara minne och kiselarea

edit: "minner" :)
Senast redigerad av ucadv 26 oktober 2007, 11:12:33, redigerad totalt 2 gånger.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> jag har svårt att se hur banker skulle spara minner och kiselarea

Kortera instruktioner -> mindre kisel/instruktion.

Sedan är en stor del av svaret naturligtsvis "histora".
Om man enbart frågar sig varför det är som det är *idag*
så får man sannolikt fel svar...

> 1. göra ISAn kortare

Vad är "ISA" ?

> 2. göra interrupten snabbare

Hur då ?
Användarvisningsbild
ucadv
Inlägg: 203
Blev medlem: 29 januari 2007, 23:13:49

Inlägg av ucadv »

>Kortera instruktioner -> mindre kisel/instruktion.

switchbank instruktioner -> fler instruktioner -> tillbaka på ruta ett :)


>Vad är "ISA" ?

http://en.wikipedia.org/wiki/Instructio ... chitecture

>Hur då ?

http://en.wikipedia.org/wiki/8051#Impor ... plications

:)
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Att göra *arkitekturen* kortare !? Det förstår jag inte riktigt...
Hur då ? Färre instruktioner ? Färre sidor i manualen ?

Och länken om 8051 snackarar om olika registerbanker som
switchas vid interrupt, vilket har väldigt lite med PIC att göra.

Faktum kvarstår, att arkitekturen i dagens PIC ser ut som den gör
har *primärt* historiska orsakar. Inte att den skulle vara direkt
bättre än något annat på något sätt, dock är den tillräckligt bra
för att göra jobbet...
Användarvisningsbild
ucadv
Inlägg: 203
Blev medlem: 29 januari 2007, 23:13:49

Inlägg av ucadv »

> Att göra *arkitekturen* kortare !? Det förstår jag inte riktigt...
> Hur då ? Färre instruktioner ? Färre sidor i manualen ?

kom igen nu sodjan, spela inte dum!

>Och länken om 8051 snackarar om olika registerbanker som
>switchas vid interrupt, vilket har väldigt lite med PIC att göra.

läs gärna mitt första inlägg en gång till.


>Faktum kvarstår, att arkitekturen i dagens PIC ser ut som den gör
>har *primärt* historiska orsakar. Inte att den skulle vara direkt
>bättre än något annat på något sätt, dock är den tillräckligt bra
>för att göra jobbet...

*vad i hela världen snackar du om?*
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> läs gärna mitt första inlägg en gång till.

OK :

> rent allmänt brukar bankerna användas för att
> 1. göra ISAn kortare
> 2. göra interrupten snabbare

1. Jag ser inte hur instruktionsarkitekturen blir "kortare".
(De enskilda instruktionerna kanske...)

2. Jag ser inte hur interrupt blir snabbare genom bankerna i en PIC.
(Det du länkade till snackade om en helt annan arkitektur.)

> *vad i hela världen snackar du om?*

PIC, och varför de ser ut som de gör. D.v.s det som persika frågade om.
Jag börjar misstänka att du talar om något helt annat !?
Det skulle kunna förklara missförstånden...
Användarvisningsbild
ucadv
Inlägg: 203
Blev medlem: 29 januari 2007, 23:13:49

Inlägg av ucadv »

sodjan, det är fredag em och jag kanske är lite trött... men det är mycket irriterande att du klagar på min tolkning av ett ord (ok, en förkortning) du inte hade hört talas om för bara två timmar sedan.

när man säger ISA, så syftar man 98 gånger av 100 på instruktionsformatet. I det här samnhanget behövs väl inget geni för att lista ut att det är längden (antal bitar) på instruktionerna som blir kortare?


någon annan får förklara hur switchade bankar/register ger snabbare interrupt rutiner.

för nu går jag hem...
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Whatever... :-)

Bara persika är nöjd...

Trevlig helg !!
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7458
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Javisst blir OP'n kortare när man har bankswitchade register, men hur i glödheta interrupt response skulle bli snabbare har jag svårt att hänga med på.

Som jag ser det blir den långsammare av att behöva sätta bankselect bits i statusregistret i början av interrupthanteraren. Just för att undvika detta så allokerar jag om möjligt minnet för snabba interrupts i obankat RAM så att det bara är att köra på.

Du tänker kanske på riktigt avanserade saker där man gör tskswitch genomatt ställa om ett basregister och sedan är alla register "nya" så man slipper spara undan en massa saker. Någon sådan funktionalitet finns ju inte i PIC.

En av de stora fördelarna med PIC18 tycker jag är just att man slipper bankselect för alla SFR's. Dessa är valbara genom en enda override-bit som väljer denna bank. Där finns även lite RAM för just snabba interrupts t.ex.

Där är också en liten switchbar area som väl är det närmaste man kommer det Du nämner. Det kan vara bra om man vill skriva reentrant kod utan att behöva skyffla så mycket. Nog avändbart i kompilatorer, men har hittills aldrig haft nytta av det i PIC. Har använt stackframes någon gång i x86 (V20), men det är inte ofta man har nytta av sådant vid "teknisk programmering".
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1541
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Inlägg av persika »

Oj, oj... här har varit en livlig disskussion...

Kanske det finns/funnits nån tillverkningsteknisk anledning till att bankarna kommit till.
Men jag tycker det verkar vara mest trassligt med bankar från programmerarens sida sett.

Jag har försökt komma underfund med hur det funkar med bankarna, men inte fått det funka på det sätt jag tänkt.

Har gjort några exempel, som adderar två variabler
som ligger på "samma ställe", men i olika bankar.
Får inte rätt resultat, båda variablerna ändrar sig samtidigt.
Det blir inte rätt i MPSIM, har inte kört det i en riktig pic'krets.

Ett exempel med att addera variablerna direkt, ett annat med pekare och som switchar mellan bankarna för att välja variabel.

12F675

;------------------

; Exempel, addera två tal på olika sätt

TAL equ 020h
TAL2 equ 0A0h

;------------------
; Exempel 1

; lägg värden i TAL och TAL2
banksel TAL
movlw 011h
movwf TAL ; TAL := 011h

banksel TAL2
movlw 022h
movwf TAL2 ; TAL2 := 022h

; addera de två talen
banksel TAL
movf TAL, w
banksel TAL2
addwf TAL2, w

; efter detta exempel får w = 044h

;------------------
; Exempel 2

; ställ in pekare
movlw TAL
movwf FSR ; pekar på TAL

; lägg värden i TAL i båda bankarna
bcf status, RP0 ; bank 0
movlw 011h
movwf INDF ; (TAL,bank0) := 011h

bsf status, RP0 ; bank 1
movlw 022h
movwf INDF ; (TAL,bank1) := 022h

; addera de två talen
bcf status, RP0 ; bank 0
movf INDF, w
bsf status, RP0 ; bank 1
addwf INDF, w

; efter detta exempel får w = 044h

;------------------
Användarvisningsbild
ucadv
Inlägg: 203
Blev medlem: 29 januari 2007, 23:13:49

Inlägg av ucadv »

marta>>

använ t.ex. bank 0 till normalt arbete och bank 1 till interrupt så slipper du pusha och popa register i din interrupt rutin


en del processorer som tex ARM7 byter "bank" automatisk när en interrupt kommer (okej, kanske inte riktigt samma sak, men ni förstår poängen?)
BoF
EF Sponsor
Inlägg: 222
Blev medlem: 7 oktober 2006, 16:43:37

Inlägg av BoF »

Ja nu var det PIC som gällde och den kan bara anropa avbrott till bank 0. I själva interupt kan koden självklart banka om och anropa rutiner i andra banker, men det är väl inte så klok då man vill att interupt koden skall vara så effektiv som möjlig.

Dom olika bankerna är en teknik som håller nere antal bitar som programräknar måste innehålla.
Att indela minnet i olika segment (banker) gör att PC (program counter) kan göras mindre tex. som för en PIC16 familj bara 13bitar.

Så med andra ord är det som Icecap säjer, det kostar på att kunna adressera minne utan att ta till olika tekniska lösningar.
Användarvisningsbild
ucadv
Inlägg: 203
Blev medlem: 29 januari 2007, 23:13:49

Inlägg av ucadv »

jesus...

det kanske inte alltid fungerar på en PIC, men att använda banker för att snabba upp interruptrutiner är standard inom industrin. jag fick en smärre chock när jag läste era kommentarer!

en normal interruptrutin i ett riktigt program (det vill säga en som är större än 32 byte) kan se ut så här:

Kod: Markera allt

min_interrupt:
    spara register 1 till 16 på stacken
    sköt avbrottsarbetet (innehållet i registrarna kan ändras här)
    läs tillbaka register 1 till 16 från stacken
    returnera från interrupt
med bank switch blir det mer som

Kod: Markera allt

min_interrupt:
    byt till bank 1
    sköt avbrottsarbetet
    byt tillbaka till  bank 0
    returnera från interrupt
så vilken är snabbast?


BoF>>
hur kan PCn blir mindre? PCn adresserar program minnet (flashet), jag fick för mig att det vara data minnet (ram) som var delade i banker. om inte annat blir programmet *längre* när man lägger in en massa instruktioner för att byta bank ?
Skriv svar