www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Mikrokontrolerji in C
Pojdi na stran Prejšnja  1, 2
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
VolkD
Član
Član



Pridružen-a: Pet 24 Sep 2004 21:58
Prispevkov: 14228
Aktiv.: 60.05
Kraj: Divača (Kačiče)

PrispevekObjavljeno: Sre Nov 07, 2007 3:06 am    Naslov sporočila:   Odgovori s citatom

ARM definitivno !
_________________
Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
bostjang
Član
Član



Pridružen-a: Tor 03 Jan 2006 15:29
Prispevkov: 3469
Aktiv.: 14.65
Kraj: Postojna

PrispevekObjavljeno: Tor Nov 20, 2007 12:01 pm    Naslov sporočila:   Odgovori s citatom

Evo malo pozen odgovor.
Kot primer navajam kodo, ki prenaša podatke iz pomnilnika na zunanje vodilo. Slednje uporablja ARM strojni vmesnik, nanj pa je v mojem primeru priključena CF kartica v 16 bitnem načinu. Uporabljal sem CARM s parametrom OPTIMIZE (7,SPEED), zunanje vodilo je imelo nastavljena 2 čakalna cikla.
Najprej napisana koda je tale:
Koda:

int a=1000;
for (;a;a--){
   EXT16 = *(u16_t *)buf;
   buf += 2;
}

Prevede se tako:
Koda:

   for (;a;a--){
L_94:
   EXT16 = *(u16_t *)buf;
MOV         R0,R6 ; buf
LDRH        R1,[R0,#0x0] ; buf
MOV         R0,#0x80000000
STRH        R1,[R0,#0x0]
   buf += 2;
ADD         R6,R6,#0x0002 ; buf
   }
SUB         R4,R4,#0x0001 ; a
MOV         R0,R4 ; a
CMP         R0,#0x0000 ; a
BNE         L_94  ; Targ=0xDC

Za en prehod zanke ARM potrebuje 15 ciklov. V kodi me moti vsakokratno nalaganje naslova za prenos podatkov, neuporaba hkratnega inkrementiranja indeksnega registra, premikanje števca po registrih za dekrementacijo in dodatno testiranje, ki se sicer lahko opravi z ukazom za odštevanje.
Ko sem uporabil vse omenjene tehnike in napisal kodo v zbirniku, je ta izgledala takole:
Koda:

void write_buf(char *buffer, int count){
__asm{
  LDR R3,=0x10100000
  LDR R4,=0x80000000
LOOP:
  LDRH R2,[R0],#0x2      ; EXT16 = *(u16_t *)buf; buf += 2;
  STRH R2,[R4]
  SUBS R1,R1,#0x1      ; a--;
LOOP1:
  BNE LOOP
}
}

Zdaj se v zanki izvaja pol manj ukazov (4 namesto 9). Za en prehod zanke koda potrebuje 10 ciklov oz. 50 % hitreje. To sem ugotovil z merjenjem, ki je dalo boljši rezultat kot simulacija, čeprav je bila tudi slednja hitrejša.
Med poizkušanjem sem ugotovil, da EMC ne ustavlja jedra med pisanjem podatkov na zunanje vodilo, to sem uporabil za nadaljnjo optimizacijo, kjer sem hitrost še podvojil s pomočjo 32-bitnega prenosa. O tem mogoče kdaj drugič.
Tukaj lahko dodam, da so razlike še večje pri kopiranju po RAM-u, ker lahko ARM z enim ukazom naloži in shrani tudi več 32-bitnih besed. Z ustrezno kodo se lahko doseže za mikrokrmilnik že zavidljive hitrosti (do nekje 100 MB/s).
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
matjazkariz
Član
Član



Pridružen-a: Sre 03 Nov 2004 18:09
Prispevkov: 1026
Aktiv.: 4.33

PrispevekObjavljeno: Tor Nov 20, 2007 12:26 pm    Naslov sporočila:   Odgovori s citatom

Citiram:
Za kateri procesor obstajajo knjižnice za IP komunikacijo, kateri procesor je najprimerje vzeti v tem primeru.


Sicer vas večina nad tem ne bo navdušena ampak glede TCP/IP je v primeru če moraš hitro neko stvar razviti izredno uporaben Rabbit (na primer RCM3700). Stvarco dobiš na modulu s konektorjem RJ45 in pinoutom uCja. Nekaj časa nazaj sem napisal en program za UDP komunikacijo. Preprosto uporabiš kar funkcije iz knjižnice:
Za pošiljanje udp_send(&sock, packet, UDP_length)
Sprejem udp_recv(&sock, buf, sizeof(buf))
itd...
Torej hardware že narejen plus knjižnice.... rabiš kakšno urco da nanj postaviš svojo spletno stran.
Poleg rabiš še software Dynamic C, ki pa prav tako stane.
Ni ravno primerno za neke serije, je pa zanimivo za hobi uporabo.

http://www.rabbitsemiconductor.com/

_________________
LP, Matjaž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Glitch
Član
Član



Pridružen-a: Pet 07 Apr 2006 11:40
Prispevkov: 1477
Aktiv.: 6.32

PrispevekObjavljeno: Tor Nov 20, 2007 12:29 pm    Naslov sporočila:   Odgovori s citatom

Pri "EMC ne ustavlja jedra" si verjetno hotel povedati, da EMC sam po sebi ne zahteva dodatnih cakalnih stanj (kar se zdi logicno, vodilo med jedrom in EMC mora biti ultra-hitro)? Namrec, zasedenost CPUja je tudi v tem primeru 100%. Predvidevam, da ne uporabljas DMA.

Ena opomba, en ukaz za load ali store ne pomeni en cikel ampak n+2 ciklov, kjer je n stevilo podatkov. Stevilo podatkov je omejeno s stevilom registrov.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
bostjang
Član
Član



Pridružen-a: Tor 03 Jan 2006 15:29
Prispevkov: 3469
Aktiv.: 14.65
Kraj: Postojna

PrispevekObjavljeno: Tor Nov 20, 2007 1:27 pm    Naslov sporočila:   Odgovori s citatom

Točno tako.
EMC (External Memory Controller) postavlja na AHB (Advanced High-performance Bus) čakalne cikle le v primeru, da se prejšnje pisanje še ni izvršilo in v primeru branja seveda. Med pisalnimi čakalnimi cikli zato CPU izvaja naprej program. To sem ugotovil eksperimentalno, ne iz ARM-ove dokumentacije.
DMA-ja ne uporabljam, kar je vidno iz kode. Uporabljam LPC2214, ki nima DMA-ja.
Ne trdim, da en ukaz load ali store pomeni traja en cikel. Daljše trajanje ukazov se tudi vidi iz mojih primerov.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Glitch
Član
Član



Pridružen-a: Pet 07 Apr 2006 11:40
Prispevkov: 1477
Aktiv.: 6.32

PrispevekObjavljeno: Tor Nov 20, 2007 1:33 pm    Naslov sporočila:   Odgovori s citatom

Saj nisem rekel, da trdis. Samo napisal sem opombo, da ne bo koga zavedlo.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
bostjang
Član
Član



Pridružen-a: Tor 03 Jan 2006 15:29
Prispevkov: 3469
Aktiv.: 14.65
Kraj: Postojna

PrispevekObjavljeno: Tor Nov 20, 2007 1:46 pm    Naslov sporočila:   Odgovori s citatom

Oprosti za moj komentar, se strinjam z opombo.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2
Stran 2 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 494 dni


Powered by phpBB © 2001, 2005 phpBB Group