Register eller RAM
Re: Register eller RAM
Hm...
Nej, en ADD skriver över en av operanderna.
För att göra r3=r2+r1 får man göra:
MOV r3, r2 ; Kopiera r2 till r3
ADD r3, r1 ; Addera r1 till r3
Nej, en ADD skriver över en av operanderna.
För att göra r3=r2+r1 får man göra:
MOV r3, r2 ; Kopiera r2 till r3
ADD r3, r1 ; Addera r1 till r3
Re: Register eller RAM
För AVR så finns det inte R3 = R1 + R2. Det finns däremot lite Word adresseringsmoder som kan använda två register bredvid varandra som 16 bitars tal.
Vad jag inte förstår är påståendet att 1024 bytes kan adresseras fritt som register i en PIC eftersom man alltid måste ange en bank.
Jag går med på att 128 bytes kan ses som alltid fritt adresserbart. Allt annat kräver någon form av book-keeping, antingen av den som programmerar assembler eller av kompilatorn som lägger till korrekt bank val när så behövs.
Vad jag inte förstår är påståendet att 1024 bytes kan adresseras fritt som register i en PIC eftersom man alltid måste ange en bank.
Jag går med på att 128 bytes kan ses som alltid fritt adresserbart. Allt annat kräver någon form av book-keeping, antingen av den som programmerar assembler eller av kompilatorn som lägger till korrekt bank val när så behövs.
Re: Register eller RAM
> Vad jag inte förstår är påståendet att 1024 bytes kan adresseras fritt som register i en PIC eftersom man alltid måste ange en bank.
Nej, man måste inte alltid ange en bank, den läggs till automatiskt.
Är redan rätt bank vald, behöver man inte göra något alls.
T.ex denna kod fungerar *alltid* och mot alla 1024 bytes:
BANKSEL <min-variabel>
ADDWF <min-variabel>
Du kan använda alla 1024 bytes fritt på det sättet. Bank-hanterningen är
alltså generell och fungerar (som mycket annat) likadan mot allt.
Indexregistren innehåller hela adressen (utan "bankning").
Men som sagt, poängen är att alla instruktioner fungerar mot allt.
Inte att en stor del av minnet är begränsat till "load/store". Att andra
instruktioner enbart fungerar mot en del av minnet. Att du inte kan göra
bit-tester på I/O-register på ett konsekvent sett, ska du kolla en flagga
får du först kolla vilken halva av I/O-memory som registret råkar ligga i,
sedan välja kod som passar för det. Om registret ligger utanför I/O-memory
(i "data space") blir det ytterligare en *tredje* metod för att kolla en bit.
Nej, man måste inte alltid ange en bank, den läggs till automatiskt.
Är redan rätt bank vald, behöver man inte göra något alls.
T.ex denna kod fungerar *alltid* och mot alla 1024 bytes:
BANKSEL <min-variabel>
ADDWF <min-variabel>
Du kan använda alla 1024 bytes fritt på det sättet. Bank-hanterningen är
alltså generell och fungerar (som mycket annat) likadan mot allt.
Indexregistren innehåller hela adressen (utan "bankning").
Men som sagt, poängen är att alla instruktioner fungerar mot allt.
Inte att en stor del av minnet är begränsat till "load/store". Att andra
instruktioner enbart fungerar mot en del av minnet. Att du inte kan göra
bit-tester på I/O-register på ett konsekvent sett, ska du kolla en flagga
får du först kolla vilken halva av I/O-memory som registret råkar ligga i,
sedan välja kod som passar för det. Om registret ligger utanför I/O-memory
(i "data space") blir det ytterligare en *tredje* metod för att kolla en bit.
Re: Register eller RAM
> Nej, 20MHz, likaså Tiny. Atxmega upp till 32MHz.
Xmega har en del nyheter och finesser. Men det finns ett par hakar.
- Enbart TQFP44, QFN44, TQFP64, QFN64, TQFP100 och BGA100 kapsel.
- Alltså ingen mindre än 44-pinnar.
- Och alltså inga DIP (inte så "hobbyist friendly").
Är det någon här som kör Xmega?
Xmega har en del nyheter och finesser. Men det finns ett par hakar.
- Enbart TQFP44, QFN44, TQFP64, QFN64, TQFP100 och BGA100 kapsel.
- Alltså ingen mindre än 44-pinnar.
- Och alltså inga DIP (inte så "hobbyist friendly").
Är det någon här som kör Xmega?
Re: Register eller RAM
Kollade just ATXMEGA128A1-AU på Farnell.
128KB flash.
8kB RAM.
8 bit.
Hardware multiplier
32MHz.
1,6 - 3,6V
103,92kr
Renesas RX210 (R5F52108ADFP)
512kB flash
64kB RAM
32 bit
FPU
50MHz
2,7 - 5,5V
111,25kr
Låter inte helt konkurrensdugligt faktisk... En gammal uppskrämd 8-bit arkitektur mot en modern µC.
Tar man RX600 kan man få en R5F562N8ADFP.
512kB flash
96kB RAM.
32 bit.
FPU
100MHz
2,7 - 3,6V
112,38kr
Känns inte som att de finns någon anledning att befatta sig med xmegan alls.
128KB flash.
8kB RAM.
8 bit.
Hardware multiplier
32MHz.
1,6 - 3,6V
103,92kr
Renesas RX210 (R5F52108ADFP)
512kB flash
64kB RAM
32 bit
FPU
50MHz
2,7 - 5,5V
111,25kr
Låter inte helt konkurrensdugligt faktisk... En gammal uppskrämd 8-bit arkitektur mot en modern µC.
Tar man RX600 kan man få en R5F562N8ADFP.
512kB flash
96kB RAM.
32 bit.
FPU
100MHz
2,7 - 3,6V
112,38kr
Känns inte som att de finns någon anledning att befatta sig med xmegan alls.
Re: Register eller RAM
Det var bara ett exempel eftersom det jämfördes med fel frekvens. Den där jämförelsen var ju däremot att jämföra äpplen med päron.
Sodjan, enbart bra kapslar tycker jag. Allt jag gör hemma är på hobbynivå men använder i princip aldrig DIP för det, ju mindre kapsel desto bättre. Så det är högst personligt vad som är hobbyvänligt och inte.
Har sett nån använt Atxmega här, men att den används så ofta tror jag inte.
Sodjan, enbart bra kapslar tycker jag. Allt jag gör hemma är på hobbynivå men använder i princip aldrig DIP för det, ju mindre kapsel desto bättre. Så det är högst personligt vad som är hobbyvänligt och inte.
Har sett nån använt Atxmega här, men att den används så ofta tror jag inte.
- Swech
- EF Sponsor
- Inlägg: 4743
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: Register eller RAM
ATSAM4N8BA-MU - 32 BIT MCU, CORTEX M4, 100MHZ, QFN
32 BIT MCU, CORTEX M4, 100MHZ, QFN-64
Architecture: ARM Cortex-M4
Program Memory Size: 512KB
RAM Memory Size: 64KB
CPU Speed: 100MHz
No. of I/O's: 47
Digital IC Case Style: QFN
No. of Pins: 64
Embedded Interface Type: I2C, SPI, UART, USART
Supply Voltage Min: 1.62V
Supply Voltage Max: 3.6V
MSL: MSL 3 - 168 hours
SVHC: No SVHC (20-Jun-2013)
Controller Family/Series: SAM4N
Core Size: 32bit
Operating Temperature Max: 85°C
Operating Temperature Min: -40°C
Peripherals: ADC, DAC, DMA, PWM, Timer
Program Memory Size: 512KB
SEK 48.50:-
Med ditt resonemang Icecap så är Renesas processor också en återvändsgränd
Dubbla priset mot en ARM, Nåja man får en MMU på köpet.
Swech
32 BIT MCU, CORTEX M4, 100MHZ, QFN-64
Architecture: ARM Cortex-M4
Program Memory Size: 512KB
RAM Memory Size: 64KB
CPU Speed: 100MHz
No. of I/O's: 47
Digital IC Case Style: QFN
No. of Pins: 64
Embedded Interface Type: I2C, SPI, UART, USART
Supply Voltage Min: 1.62V
Supply Voltage Max: 3.6V
MSL: MSL 3 - 168 hours
SVHC: No SVHC (20-Jun-2013)
Controller Family/Series: SAM4N
Core Size: 32bit
Operating Temperature Max: 85°C
Operating Temperature Min: -40°C
Peripherals: ADC, DAC, DMA, PWM, Timer
Program Memory Size: 512KB
SEK 48.50:-
Med ditt resonemang Icecap så är Renesas processor också en återvändsgränd
Dubbla priset mot en ARM, Nåja man får en MMU på köpet.
Swech
Re: Register eller RAM
> Kollade just ATXMEGA128A1-AU på Farnell.
> Renesas RX210 (R5F52108ADFP).......
Men det förutsätter att man tidigare inte har någon investering i AVR.
Annars tillkommer portning, utbildning o.s.v.
Men, om vi talar om hobbybruk så är minsta kapsel på 44 pinnar och
avsaknaden av DIP (eller SOIC) (för många) mer begränsande. Men visst,
om man klarar sig med 8-pinnar så räcker sannolikt gamla AVR också...
> Sodjan, enbart bra kapslar tycker jag.
Avsaknaden av kapslar som underlättar labbande (och ibland även 5V)
brukar av många anses som "hobbyist unfriendly". Sen så kanske några
tycker att det är OK och har rutiner för att jobba med TQFP eller QFN,
men det är verkligen inte alla.
> Renesas RX210 (R5F52108ADFP).......
Men det förutsätter att man tidigare inte har någon investering i AVR.
Annars tillkommer portning, utbildning o.s.v.

Men, om vi talar om hobbybruk så är minsta kapsel på 44 pinnar och
avsaknaden av DIP (eller SOIC) (för många) mer begränsande. Men visst,
om man klarar sig med 8-pinnar så räcker sannolikt gamla AVR också...

> Sodjan, enbart bra kapslar tycker jag.
Avsaknaden av kapslar som underlättar labbande (och ibland även 5V)
brukar av många anses som "hobbyist unfriendly". Sen så kanske några
tycker att det är OK och har rutiner för att jobba med TQFP eller QFN,
men det är verkligen inte alla.
Re: Register eller RAM
Sodjan,
Jag förstår att man med två instruktioner i följd kan simulera effekten av att man kan se hela ram som en registerfil. Men med det resonemanget så ska man väl tillåta att man använder två instruktioner för avr vid jämförelsen.
Sen håller jag med Swech om att cortex-m4 för knappt inga pengar alls ger bra mycket bang för pengarna.
Jag förstår att man med två instruktioner i följd kan simulera effekten av att man kan se hela ram som en registerfil. Men med det resonemanget så ska man väl tillåta att man använder två instruktioner för avr vid jämförelsen.
Sen håller jag med Swech om att cortex-m4 för knappt inga pengar alls ger bra mycket bang för pengarna.
Re: Register eller RAM
Jo, men min poäng är att allt "minne" hanteras på ett enda sett på PIC.
På AVR är det 3-4 olika minnes-type med olika egenskaper och flera olika
instruktioner för att göra samma sak beronde på var i minnet det sker.
Och genom att t.ex allokera det minne som en viss rutin behöver till
samma bank, så behöver man så klart inte switcha så ofta. Poängen
är fortfaranda att alla arit/logiska/bit/whatever instruktioner fungerar
mot allt minne. Det är ju det som är den stora skillnaden. Och det är
delvis därför (även om vissa så klart påstår att det inte spelar någon
roll) som AVR behöver 131 olika intruktioner mot 41 för PIC16F1xxx.
Samma PIC-instruktion fungerar helt enkelt mot allt.
> Men med det resonemanget så ska man väl tillåta att man använder två instruktioner för avr vid jämförelsen.
Tre, du behöver även skriva tillbaka resultatet.
T.ex:
BANKSEL <en-variabel>
DECF <en-variabel>
Motsvarar:
LDS r2, <en-variabel>
DEC r2
STS <en-variabel>, r2
Om vi har 3 räknare som ligger i samma bank:
BANKSEL <variabel1>
DECF <variabel1>
DECF <variabel2>
DECF <variabel3>
Mot:
LDS r2, <variabel1>
DEC r2
STS <variabel1>, r2
LDS r2, <variabel2>
DEC r2
STS <variabel2>, r2
LDS r2, <variabel3>
DEC r2
STS <variabel3>, r2
Blir det fler kör man sannolikt indexerat/indirekt.
På PIC kan även (t.ex) DECF köra indexerat/indirekt.
På AVR är det enbart LD/ST som kan köra indirekt.
På AVR är det 3-4 olika minnes-type med olika egenskaper och flera olika
instruktioner för att göra samma sak beronde på var i minnet det sker.
Och genom att t.ex allokera det minne som en viss rutin behöver till
samma bank, så behöver man så klart inte switcha så ofta. Poängen
är fortfaranda att alla arit/logiska/bit/whatever instruktioner fungerar
mot allt minne. Det är ju det som är den stora skillnaden. Och det är
delvis därför (även om vissa så klart påstår att det inte spelar någon
roll) som AVR behöver 131 olika intruktioner mot 41 för PIC16F1xxx.
Samma PIC-instruktion fungerar helt enkelt mot allt.
> Men med det resonemanget så ska man väl tillåta att man använder två instruktioner för avr vid jämförelsen.
Tre, du behöver även skriva tillbaka resultatet.
T.ex:
BANKSEL <en-variabel>
DECF <en-variabel>
Motsvarar:
LDS r2, <en-variabel>
DEC r2
STS <en-variabel>, r2
Om vi har 3 räknare som ligger i samma bank:
BANKSEL <variabel1>
DECF <variabel1>
DECF <variabel2>
DECF <variabel3>
Mot:
LDS r2, <variabel1>
DEC r2
STS <variabel1>, r2
LDS r2, <variabel2>
DEC r2
STS <variabel2>, r2
LDS r2, <variabel3>
DEC r2
STS <variabel3>, r2
Blir det fler kör man sannolikt indexerat/indirekt.
På PIC kan även (t.ex) DECF köra indexerat/indirekt.
På AVR är det enbart LD/ST som kan köra indirekt.
Re: Register eller RAM
Det är den allra första Xmegan. Atmel säger "Not recommended for new designs – use XMEGA AU series" om den. Den pinkompatibla och bättre ATXmega128A1U(-AU) kostar hälften så mycket. (-AU anger vilken kapsel det är).Icecap skrev:Kollade just ATXMEGA128A1-AU på Farnell.
Den relativt nya (~ett år) XMegaE5-serien är 32-pinnars. Dock bara SMD även där. Men kopplingsplattevänliga kort med plats för avkoppling, programerings-sockel och någon lysdiod kostade mig 37 kr för tre kort hos OSHpark.sodjan skrev:- Alltså ingen mindre än 44-pinnar.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Register eller RAM
Vad man kan konstatera är att En PIC med samma instruktionshastighet gör jobbet minst lika snabbt och ofta betydligt fortare än en AVR.
Om vi pratar 8-bitars prollar.
Om vi pratar 8-bitars prollar.
Re: Register eller RAM
Tänk så olika slutsatser man kan dra från samma data. Det beror väl helt på vad det är man gör?
Jag får väl damma av mitt exempel igen (snyggar till variabelnamnen bara).
Ovanstående loop kommer att gå snabbare på en AVR än en PIC eftersom AVRen kan ha både loop1, loop2 och result i register och alltså inte behöver någon LD eller ST.
Jag är ringrostig på AVR assembler men det borde bli nåt i stil med:
Alla instruktioner går på en instruktionscykel (d.v.s. en klockcykel) utom då hoppen som ibland tar två cykler beroende på om villkoret är uppfyllt eller inte.
Jag får väl damma av mitt exempel igen (snyggar till variabelnamnen bara).
Kod: Markera allt
for loop1 = 0 to 7
for loop2 = 0 to 7
result=loop2+loop1*8
gör "nåt" med result
next loop2
next loop1
Jag är ringrostig på AVR assembler men det borde bli nåt i stil med:
Kod: Markera allt
ldi r16,0 ; loop1 = r16
loop1: ldi r17,0 ; loop2 = r17
loop2: mov r18,r16 ; result = r 18 (används även som mellanlagring)
lsl r18 ; skulle kunna använda MUL, men i just detta fall går skiften minst lika snabbt
lsl r18
lsl r18
adc r18,r17
och här gör vi nåt med r18
inc r17 ; next loop2
cpi r17,7
brne loop2
inc r16 ; next loop1
cpi r16,7
brne loop1
Re: Register eller RAM
Nä du, det kommer att gå snabbare på en PIC, räknat i instruktioncykler!
Re: Register eller RAM
Ja, i instruktionscykler kanske, men en instruktionscykel på en PIC gör fyra gånger så mycket saker som en instruktionscykel på AVR.