@korak
Kad sam rekao da PIC ima problem sa bankama, nisam mislio da je to nesto sto se neplanski pojavilo, pa sad kao u tom smislu treba nekako da se rjesava. PIC se jeste rodio sa bankama, samo u to vreme nije bio sa flash-om :)
Mislio sam na probleme koje memorijski prostor sa bankama pravi kod pisanja kompajlera i programa, i to je nesto sto je poznato i karakteristicno za PIC (a i neke druge arhitekture sa bankama).
(Za one citaoce koji mozda ne znaju zbog cega se koriste banke (kao sto ni meni nije bilo jasno kad sam nekad davno prvi put uzeo PIC16f84 datasheet, jer tamo nigdje nije pisao razlog tog marifetluka): banke se koriste da bi se povecao adresni prostor bez fizickog prosirenja adresne magistrale. Inace to ne mora biti obavezno uslovljeno hardward arhitekturom, jer hardward arhitektura nigdje ne propisuje kolika mora biti sirina adresne magistrale. Ako se napravi sira magistrala nema potrebe za bankama, ali to ima druge konsekvence sto se tice hardverskih zahtjeva.
Sto se tice kvaliteta tog kompajlera kojeg spominjete, moram da kazem da u mom komentaru uopste nisam imao namjeru da o tome nesto zakljucujem, sto je i nemoguce, jer ga nisam vidio. Jedino na sto sam se ja osvrnuo je opsta primjenjivost kod sireg kruga korisnika, moze i da se kaze npr. komercijalna strana svega toga. Posto se citava prica nalazi na javnom forumu, pretpostavio sam da bi i o toj strani price moglo ponesto da se kaze. A mozda bi i Vi stekli bolju sliku o kvalitetu tog kompajlera, ako biste probali taj Vas kompajler da pustite na trziste, pa da vidite reakcije drugih ljudi. Ovako sve ostaje misljenje jednog covjeka (a posto svi roditelji o svojoj djeci misle sve najbolje, to misljenje se vodi kao subjektivno barem dok ga ne potvrdi jos poneko :). Mozda je moguce da taj kompajler savrseno odgovara Vasim potrebama, ali ako nema nikakve informacije o iskustvima drugih ljudi koliko je to onda relevantno za bilo koga osim Vas?
U ostatku teksta kad sam govorio o kompajleru i bankama mislio sam iskljucivo na optimizaciju rasporeda varijabli po bankama, kako bi se ubrzalo izvrsavanje programa ili maksimalno smanjio broj preskakanja iz jedne banke u drugu, a po mogucstvu da se programer oslobodi razmisljanja o tome.
Ono sto ste napisali uglavnom je samo drugi sintaksni nacin da programer napise istu stvar koju u drugim nekim kompajlerima radi npr. pomocu makroa, a nikakve optimizacije nema. Jedino sto bi se donekle moglo podvesti pod optimizaciju je smjestanje "bliskih" varijbli u istu banku, ali to je trivijalno, to programer ionako moze da radi sa mozgom na ispasi. Znaci, nista znacajno nije skinuto sa grbace programeru, a sto je jos vaznije - ne mora da znaci i da je svaki put to dobro!
Dakle, opet naglasavam, da ne bude zabune: ne komentarisem sintaksu i to da li je ona povoljnija/laksa/citljivija/logicnija/razumljivija...itd. (meni je ionako svejedno, kad se naviknete na nesto nemate tih problema), nego optimizaciju. Ako se radi o citljivosti onda bi najlakse bilo izbaciti naredbe za setovanje banke, vec obojiti blok programa bojom banke u kojoj se radi, a u slicnom tonu i varijable iz te banke, pa ako se negdje boje ne slazu, sve bi se fino vidjelo, ali to bi svi smatrali za neozbiljno... Jos kad bi pogresno koriscene varijable blinkale...
Tih tekstualnih kompajlera ima vec prilicno, tako da je tesko dici glavu iz te poplave, medjutim kad bi neko zapeo da pravi neki graficki programski jezik, ja bih mu svaki dan slao bezrezervni mail podrske...
@Stojan
Ipak imam dovoljno iskustva da ne mislim da se po povratku iz interrupt-a mora ponovo selektovati banka, kao i da ne treba staviti selekciju banke prije svake varijable/registra. (Medjutim, ako se dobro sjecam, PIC16 serija nema bas narocito dubok stack, pa se za programe koji su zahtjevni u pogledu prekida ionako mora softwerski realizovati, pa prica o brzini gubi smisao).
Nesporazum ocigledno nastaje zbog razlicitih perspektiva iz kojih posmatramo problem. Ako razmisljamo o mikrokontrolerskom programu tipa: ugasi neku sijalicu kad dan svane, upali je kad se smrkne, onda ste Vi u pravu. Medjutim u tom slucaju ja ne vidim razlog praviti neki kompajler za pisanje programa tog nivoa. Tih Markovih, Dejvovih, Joe-vih, Perinih, Zikinih kompajlera za PIC ima vec sijaset na internetu.
Ako se ne radi o trivijalnom programu, u 80% slucajeva interupt ce pozivati neku funkciju, a ta funkcija mozda jos ko zna koliko. Uzmite obican senzor pokreta, detekcija pomjeraja nekog objekta ce izazvati interupt koji ce poceti da racuna koordinate pozivanjem trigonometrijskih funkcija iz math biblioteke, pa ce se pozivati funkcije za crtanje na displeyu da bi se to npr. nacrtalo, pa ce se pozivati funkcije za prenos podataka na displey, serijsku vezu sa senzorom i sl.
Ono sto prosjecnog potencijalnog korisnika zanima je sta cete vi da radite sa svime time i kako cete da uskladite vas kompajler sa rasporedom varijabli koje definisu koriscene gotove biblioteke? Hocete li napisati sve standardne biblioteke ponovo ili sta? Meni npr. ne bi ni palo na pamet da za svaki displey koji kupim ja sam pisem biblioteku, ili da pisem sin() i cos() funkcije iznova kad mi zatrebaju, ili da redefinisem funkcije za CAN, USB ili npr. neku drugu vezu. A ako pisem program tipa: kad ukucam ova tri broja brava se otkljuca, inace jok, pa to mogu da radim i u masincu.
Ako se manemo hobistickih projekata, onda vrlo ozbiljne stvari treba rjesiti, a ja pisem ovo jer sam stekao utisak da poneko nije svjestan sta to sve podrazumjeva.
U svakom slucaju, ako neko razmislja o optimizaciji programa u odnosu na memorijske banke moze pogledati dokument prikacen uz ovaj post.
Pozdrav!
Kad sam rekao da PIC ima problem sa bankama, nisam mislio da je to nesto sto se neplanski pojavilo, pa sad kao u tom smislu treba nekako da se rjesava. PIC se jeste rodio sa bankama, samo u to vreme nije bio sa flash-om :)
Mislio sam na probleme koje memorijski prostor sa bankama pravi kod pisanja kompajlera i programa, i to je nesto sto je poznato i karakteristicno za PIC (a i neke druge arhitekture sa bankama).
(Za one citaoce koji mozda ne znaju zbog cega se koriste banke (kao sto ni meni nije bilo jasno kad sam nekad davno prvi put uzeo PIC16f84 datasheet, jer tamo nigdje nije pisao razlog tog marifetluka): banke se koriste da bi se povecao adresni prostor bez fizickog prosirenja adresne magistrale. Inace to ne mora biti obavezno uslovljeno hardward arhitekturom, jer hardward arhitektura nigdje ne propisuje kolika mora biti sirina adresne magistrale. Ako se napravi sira magistrala nema potrebe za bankama, ali to ima druge konsekvence sto se tice hardverskih zahtjeva.
Sto se tice kvaliteta tog kompajlera kojeg spominjete, moram da kazem da u mom komentaru uopste nisam imao namjeru da o tome nesto zakljucujem, sto je i nemoguce, jer ga nisam vidio. Jedino na sto sam se ja osvrnuo je opsta primjenjivost kod sireg kruga korisnika, moze i da se kaze npr. komercijalna strana svega toga. Posto se citava prica nalazi na javnom forumu, pretpostavio sam da bi i o toj strani price moglo ponesto da se kaze. A mozda bi i Vi stekli bolju sliku o kvalitetu tog kompajlera, ako biste probali taj Vas kompajler da pustite na trziste, pa da vidite reakcije drugih ljudi. Ovako sve ostaje misljenje jednog covjeka (a posto svi roditelji o svojoj djeci misle sve najbolje, to misljenje se vodi kao subjektivno barem dok ga ne potvrdi jos poneko :). Mozda je moguce da taj kompajler savrseno odgovara Vasim potrebama, ali ako nema nikakve informacije o iskustvima drugih ljudi koliko je to onda relevantno za bilo koga osim Vas?
U ostatku teksta kad sam govorio o kompajleru i bankama mislio sam iskljucivo na optimizaciju rasporeda varijabli po bankama, kako bi se ubrzalo izvrsavanje programa ili maksimalno smanjio broj preskakanja iz jedne banke u drugu, a po mogucstvu da se programer oslobodi razmisljanja o tome.
Ono sto ste napisali uglavnom je samo drugi sintaksni nacin da programer napise istu stvar koju u drugim nekim kompajlerima radi npr. pomocu makroa, a nikakve optimizacije nema. Jedino sto bi se donekle moglo podvesti pod optimizaciju je smjestanje "bliskih" varijbli u istu banku, ali to je trivijalno, to programer ionako moze da radi sa mozgom na ispasi. Znaci, nista znacajno nije skinuto sa grbace programeru, a sto je jos vaznije - ne mora da znaci i da je svaki put to dobro!
Dakle, opet naglasavam, da ne bude zabune: ne komentarisem sintaksu i to da li je ona povoljnija/laksa/citljivija/logicnija/razumljivija...itd. (meni je ionako svejedno, kad se naviknete na nesto nemate tih problema), nego optimizaciju. Ako se radi o citljivosti onda bi najlakse bilo izbaciti naredbe za setovanje banke, vec obojiti blok programa bojom banke u kojoj se radi, a u slicnom tonu i varijable iz te banke, pa ako se negdje boje ne slazu, sve bi se fino vidjelo, ali to bi svi smatrali za neozbiljno... Jos kad bi pogresno koriscene varijable blinkale...
Tih tekstualnih kompajlera ima vec prilicno, tako da je tesko dici glavu iz te poplave, medjutim kad bi neko zapeo da pravi neki graficki programski jezik, ja bih mu svaki dan slao bezrezervni mail podrske...
@Stojan
Ipak imam dovoljno iskustva da ne mislim da se po povratku iz interrupt-a mora ponovo selektovati banka, kao i da ne treba staviti selekciju banke prije svake varijable/registra. (Medjutim, ako se dobro sjecam, PIC16 serija nema bas narocito dubok stack, pa se za programe koji su zahtjevni u pogledu prekida ionako mora softwerski realizovati, pa prica o brzini gubi smisao).
Nesporazum ocigledno nastaje zbog razlicitih perspektiva iz kojih posmatramo problem. Ako razmisljamo o mikrokontrolerskom programu tipa: ugasi neku sijalicu kad dan svane, upali je kad se smrkne, onda ste Vi u pravu. Medjutim u tom slucaju ja ne vidim razlog praviti neki kompajler za pisanje programa tog nivoa. Tih Markovih, Dejvovih, Joe-vih, Perinih, Zikinih kompajlera za PIC ima vec sijaset na internetu.
Ako se ne radi o trivijalnom programu, u 80% slucajeva interupt ce pozivati neku funkciju, a ta funkcija mozda jos ko zna koliko. Uzmite obican senzor pokreta, detekcija pomjeraja nekog objekta ce izazvati interupt koji ce poceti da racuna koordinate pozivanjem trigonometrijskih funkcija iz math biblioteke, pa ce se pozivati funkcije za crtanje na displeyu da bi se to npr. nacrtalo, pa ce se pozivati funkcije za prenos podataka na displey, serijsku vezu sa senzorom i sl.
Ono sto prosjecnog potencijalnog korisnika zanima je sta cete vi da radite sa svime time i kako cete da uskladite vas kompajler sa rasporedom varijabli koje definisu koriscene gotove biblioteke? Hocete li napisati sve standardne biblioteke ponovo ili sta? Meni npr. ne bi ni palo na pamet da za svaki displey koji kupim ja sam pisem biblioteku, ili da pisem sin() i cos() funkcije iznova kad mi zatrebaju, ili da redefinisem funkcije za CAN, USB ili npr. neku drugu vezu. A ako pisem program tipa: kad ukucam ova tri broja brava se otkljuca, inace jok, pa to mogu da radim i u masincu.
Ako se manemo hobistickih projekata, onda vrlo ozbiljne stvari treba rjesiti, a ja pisem ovo jer sam stekao utisak da poneko nije svjestan sta to sve podrazumjeva.
U svakom slucaju, ako neko razmislja o optimizaciji programa u odnosu na memorijske banke moze pogledati dokument prikacen uz ovaj post.
Pozdrav!