 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Naturist Član

Pridružen-a: Tor 02 Okt 2007 20:01 Prispevkov: 11 Aktiv.: 0.05 Kraj: Primorska
|
Objavljeno: Pon Nov 05, 2007 1:34 am Naslov sporočila: Mikrokontrolerji in C |
|
|
Še pred kratkim sem bil mnenja da je najbolje programirat v zbirniku, saj imaš popolno kontrolo nad programom, sem delal en projekt s PIC-om, v zbirniku nekaj napisat vzameme kar precej časa, poleg tega postane kar veliko vrstic in koda nepregledna.
Potem si prenesem prevajanik CC5x, prepišem v C, koda v C-ju izgleda veliko preprostejša.
Če delaš v C-ju isto stvar narediš v polovico krajšem času. |
|
Nazaj na vrh |
|
 |
VolkD Član


 
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 60.06 Kraj: Divača (Kačiče)
|
Objavljeno: Pon Nov 05, 2007 2:05 am Naslov sporočila: |
|
|
Poznavanje assembelrja je hudo koristna stvar.
Zgornja trditev je sicer resnična in pravilna, vendar s časom vse bolj izgublja na pomenu. Razlog je preprost. Mikrokontrolerji so vse cenejši in istočasno vse bolj sposobni. Koda, ki jo naredijo C compilerjli je vse boljša. Še posebno je to izraženo pri novejših 32 bitnih mikrokontrolerjih kot so naprimer ARM-i. Organizacija teh je taka, da je nabor strojnih instrukcij že skoraj idealno prilagojen višjim jezikom (pogojno izvajanje vsake instrukcije).
Že pri načrtovanju projekta je torej smiselno razmišljati o tem, da si izberemo nekaj močnejši mikrokontroler. Pisanje v assemblerju lahko sicer prihrani nekaj pomnilniškega prostora, tako v programskem delu spomina, kot tudi v delu kjer so spremenjljivke. Žal je pri razvoju novih projektov zdaleč najdražja postavka čas človeka razvojnika. Ta pa je daleč krajši pri programiranju v višjih jezikih, kot je recimo C. Prihranki v spominu in s tem nekaj malega cenejši mikrokontroler tega časa zlepa ne odtehtajo (serije bi res morale biti ogromne).
Zgornja trditev postane pomembna v izjemnih primerih, ko so ekstremno hude časovne zahteve. V te namene ima večina C prevajalnikov možnost vključevanja assemblerske kode. _________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
 |
bostjang Član

Pridružen-a: Tor 03 Jan 2006 15:29 Prispevkov: 3469 Aktiv.: 14.65 Kraj: Postojna
|
Objavljeno: Pon Nov 05, 2007 10:23 am Naslov sporočila: |
|
|
Ta trenutek delam predvsem z ARM7 in prevajalnikom Keil CARM. Ko sem pregledoval kodo zanke za prenos podatkov, sem ugotovil, da prevajalnik sploh ne uporablja nekaterih prednosti ARM-a, pa tudi ukaze, ki jih uporablja bi bilo možno sestaviti bolj optimalno.
Z ročnim pisanjem v zbirniku mi je uspelo zanko pospešiti za nekajkrat (ne samo %) in tudi manjša je postala.
Vsekakor se pa strinjam, da je bolj pregledno veči del kode napisati v C-ju. Kratke zanke z veliko prehodi pa se včasih splača napisati v zbirniku. |
|
Nazaj na vrh |
|
 |
Auslander Član

Pridružen-a: Tor 08 Mar 2005 9:53 Prispevkov: 43 Aktiv.: 0.18
|
Objavljeno: Pon Nov 05, 2007 10:58 am Naslov sporočila: |
|
|
bostjang je napisal/a: |
Ta trenutek delam predvsem z ARM7 in prevajalnikom Keil CARM. Ko sem pregledoval kodo zanke za prenos podatkov, sem ugotovil, da prevajalnik sploh ne uporablja nekaterih prednosti ARM-a, pa tudi ukaze, ki jih uporablja bi bilo možno sestaviti bolj optimalno. |
lahko to predstaviš s primerom prosim, bi znalo biti poučno tudi za ostale. |
|
Nazaj na vrh |
|
 |
alessio Član

Pridružen-a: Pon 04 Dec 2006 8:39 Prispevkov: 363 Aktiv.: 1.61 Kraj: Ljubljana
|
Objavljeno: Pon Nov 05, 2007 11:01 am Naslov sporočila: |
|
|
@bostjang
Prevajalnik bo uporabil vse prednosti ARM-a, če boš C kodo napisal tako,
da mu bo ta dopuščala. Zelo poučna, tudi kar se tiče optimizacije tako
C kot tudi assembler kode, je knjiga "ARM system developers guide" od
Sloss-a et.all.
Za primer lahko navedem dve rutini za izračun checksum-a:
Koda: |
int checksum_v1(int *data)
{
char i;
int sum = 0;
for (i = 0; i < 64; i++)
{
sum += data[i];
}
return sum;
} |
prevajalnik za to funkcijo zgenerira
Koda: |
checksum_v1
MOV r2,r0 ; r2 = data
MOV r0,#0 ; sum = 0
MOV r1,#0 ;i=0
checksum_v1_loop
LDR r3,[r2,r1,LSL #2] ; r3 = data[i]
ADD r1,r1,#1 ; r1 = i+1
AND r1,r1,#0xff ; i = (char)r1
CMP r1,#0x40 ; compare i, 64
ADD r0,r3,r0 ; sum += r3
BCC checksum_v1_loop ; if (i<64) loop
MOV pc,r14 ; return sum |
Če pri pisanju C kode upoštevaš arhitekturo ARM-a in
poznaš nekaj trikov boš funkcijo napisal nekaj v tem stilu:
Koda: |
int checksum_v6(int *data)
{
unsigned int i;
int sum=0;
for (i=64; i!=0; i--)
{
sum += *(data++);
}
return sum;
}
|
kar lahko prevajalnik mnogo bolje prevede v:
Koda: |
checksum_v6
MOV r2,r0 ; r2 = data
MOV r0,#0 ; sum = 0
MOV r1,#0x40 ;i=64
checksum_v6_loop
LDR r3,[r2],#4 ; r3 = *(data++)
SUBS r1,r1,#1 ; i-- and set flags
ADD r0,r3,r0 ; sum += r3
BNE checksum_v6_loop ; if (i!=0) goto loop
MOV pc,r14 ; return sum
|
Na željo lahko razložim razliko.
Skratka, ne takoj kritizirati druge, pri sebi najprej razčistite...
Aleš |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Pon Nov 05, 2007 11:13 am Naslov sporočila: |
|
|
bostjang je napisal/a: |
Ta trenutek delam predvsem z ARM7 in prevajalnikom Keil CARM. Ko sem pregledoval kodo zanke za prenos podatkov, sem ugotovil, da prevajalnik sploh ne uporablja nekaterih prednosti ARM-a, pa tudi ukaze, ki jih uporablja bi bilo možno sestaviti bolj optimalno.
Z ročnim pisanjem v zbirniku mi je uspelo zanko pospešiti za nekajkrat (ne samo %) in tudi manjša je postala.
Vsekakor se pa strinjam, da je bolj pregledno veči del kode napisati v C-ju. Kratke zanke z veliko prehodi pa se včasih splača napisati v zbirniku. |
Kaj pa optimizacije? CARM pozna parameter -o[raven optimizacije] ? _________________ Lp,
Matevž |
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Pon Nov 05, 2007 7:41 pm Naslov sporočila: |
|
|
Tole je PIC del foruma, če me spomin in oči ne varajo. Preden sem se odločil za prevajalnik sem jih kar nekaj preveril in ugotovil, da CCS dela najbolj optimalno kodo.
Je pa pri 8 bitnih kontrolerjih še vedno zelo dobro če poznaš ASM, ker je potrebno kdaj pa kdaj kakšno malenkost narediti časovno bolj učinkovito.  |
|
Nazaj na vrh |
|
 |
Naturist Član

Pridružen-a: Tor 02 Okt 2007 20:01 Prispevkov: 11 Aktiv.: 0.05 Kraj: Primorska
|
Objavljeno: Tor Nov 06, 2007 12:29 am Naslov sporočila: |
|
|
Jaz od mikrokontrolerjev poznam samo PIC. Na tem forumu se govori predvsem o PIC, AVR in ARM. Zanima me kakšne so razlike glede razvojnih orodij in prevajalnika C za posamezen mikrokontroler, za katerega je prosto dostopen prevajalnik, imaš veliko uporabnih knjižnic.
Recimo da delam neko vezje v katerem bom uporabu manj zmogljiv mikrokontroler, malo primerkov, cena ni tolk pomembna, sprejemljiva je do 15EUR, programiral bi v C-ju, obstaja tudi prosto dostopen prevajalnik za neprofesionalno uporabo, imaš zraven tudi uporabne knjižnice, po možnosti razvoj v okolju Linux.
Kateri mikrokontroler izbrati , zanima me vaše mnenje ? |
|
Nazaj na vrh |
|
 |
VolkD Član


 
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 60.06 Kraj: Divača (Kačiče)
|
Objavljeno: Tor Nov 06, 2007 1:29 am Naslov sporočila: |
|
|
Vse je odvisno od kriterijev, ki jih postaviš.
Bom stvar osvetlil še z enega vidika in odgovoril na tvoje vprašanje malo hudomušno. Je pa v tem kar nekaj resnice :"Uporabi enak kontroler, kot tisti, ki ti je pripravljen pomagati v prvih korakih !" _________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.32
|
Objavljeno: Tor Nov 06, 2007 8:10 am Naslov sporočila: |
|
|
Naturist,
v to kategorijo najbolj paseta AVR in ARM. S to razliko, da je ARM precej bolj zmogljiv (in kompleksen).
Cena in dobavljivost: ni da ni
C: GNU GCC
Orodja: je
knjiznice: so
Linux: vsekakor
Priznam pa, da nisem ravno preprican ali za PICe obstaja Linux okolje. |
|
Nazaj na vrh |
|
 |
harum Član

Pridružen-a: Sre 22 Feb 2006 8:25 Prispevkov: 172 Aktiv.: 0.73 Kraj: Vitanje
|
Objavljeno: Tor Nov 06, 2007 8:58 am Naslov sporočila: |
|
|
No da še sam povem svoje mnenje.
Predlagati uporabo AVR-ja namesto PIC-a ali predlagati uporabo PIC-a namesto AVR-ja je isto kot forsirati Union namesto Laškega in obratno (oboje je isto sr... najboljši je češki pir).
Kot rečeno uporabljaj tistega, s katerim si začel in ga najbolj poznaš in s katerim boš najlažje na novo (ali iz ostankov starega) postavil projekt. Tako Microchip kot Atmel imata v svojem naboru ogromno izbire od najmanjših do največjih. Poleg teh dveh pa je še ogromno (več kot 10 recimo) drugih proizvajalcev 8-bitnikov, z enako pestrim naborom, a nekako niso v "modi" in orodja zanje niso tako lahko dostopna (no nekaterim recimo so . Podobno je z ARM-om, ki ga vsebuje ogromno mikrokontrolerjev različnih proizvajalcev in je primeren za malce zahtevnejše aplikacije. |
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.04 Kraj: Novo mesto
|
Objavljeno: Tor Nov 06, 2007 9:55 am Naslov sporočila: |
|
|
Glitch je napisal/a: |
Priznam pa, da nisem ravno preprican ali za PICe obstaja Linux okolje. |
Orodij za PIC-e je kot dračja. Tudi za Linux. |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.32
|
Objavljeno: Tor Nov 06, 2007 10:14 am Naslov sporočila: |
|
|
Potem pa ... VolkD je govoril. Howgh. |
|
Nazaj na vrh |
|
 |
VolkD Član


 
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 60.06 Kraj: Divača (Kačiče)
|
Objavljeno: Tor Nov 06, 2007 11:00 am Naslov sporočila: |
|
|
Jah.. pa še zdaleč ni povedal vsega !
-preglej internet in s tvojega zornega kota oceni kateri čipi se na področju, ki te zanima največ uporabljajo.
-pozanimaj se kako je s popravki bug-ov, kakšna je literatura.
-za začetnika je precej pomembna dostopnost programatorja.
In ne nazadnje - primorska ni ravno majhna. Če nisi predaleč imaš še mene (sicer ne neomejeno) na razpolago. _________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
 |
Naturist Član

Pridružen-a: Tor 02 Okt 2007 20:01 Prispevkov: 11 Aktiv.: 0.05 Kraj: Primorska
|
Objavljeno: Sre Nov 07, 2007 12:20 am Naslov sporočila: |
|
|
Bolj me je zanimalo kakšne so razlike med razvojnimi orodji.
Mogoče se bom v prihodnosti lotil neko stvar, ki se bo priklopila na računalnik,
Za komunikacijo bom uporabu ethernet, ker je to nekaj standardnega, pa še na usmerjevalnik lahko priključiš.
Za kateri procesor obstajajo knjižnice za IP komunikacijo, kateri procesor je najprimerje vzeti v tem primeru. |
|
Nazaj na vrh |
|
 |
|
|
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: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|