Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Optimizacija programa pisanih u PBP-u

[es] :: Elektronika :: Mikrokontroleri :: Optimizacija programa pisanih u PBP-u

Strane: 1 2

[ Pregleda: 7364 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
93.86.103.*



+321 Profil

icon Re: Optimizacija programa pisanih u PBP-u02.01.2010. u 08:44 - pre 174 meseci
Znaš kako to ide - naidje period kada ima manje posla pa se nadje vremena i za ovakvu pisaniju, a onda naidje period kada slobodnog vremena nema, pa čak ako i naidje, zaboravi se šta je započeto ... Na žalost, sad sam u periodu kada imam dosta obaveza raznih vrsta tako da za sada ništa od nastavka, ali trudiću se da nekom prilikom napišem još po nešto na tu temu.

Pozdrav.
Sinisha
 
Odgovor na temu

lm741
VOJVODINA

Član broj: 167617
Poruke: 672
*.mynsn.net.



+67 Profil

icon Re: Optimizacija programa pisanih u PBP-u02.01.2010. u 10:27 - pre 174 meseci
potpuno te razumem,..ja sam trenutno u toj situaciji da imam vremena pa koristim priliku da nešto naučim jer znam da će naići period 2-3 meseca nekad i više, da neću imati vremena.
u svakom slučaju hvala ti za raniji a i budući trud,..
pozdrav,..


1. Ko zna više, bog mu je dalje
2. Ko zna manje, bog mu je bliže
3. Ko ništa ne zna, njemu bog može biti svako
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
*.dynamic.isp.telekom.rs.



+321 Profil

icon Re: Optimizacija programa pisanih u PBP-u08.03.2010. u 01:54 - pre 172 meseci
DEFINE no_clrwdt, greška ili ne?
------------------------------
PIC kontroleri (kao i mnogi drugi) imaju u sebi tzv. watchdog, tj. mehanizam za izlazak iz eventualne mrtve petlje koji radi na principu tajmera i kojeg treba povremeno resetovati. Da bi se to uradilo potrebno je u konfiguracionoj reči uključiti watchdog tajmer (u daljem tekstu WDT) i u programu ga povremeno resetovati. Upotreba tog mehanizma nije obavezna, pa se i program razlikuje u zavisnosti da li nam taj mehanizam treba ili ne.
PBP nema direktnu naredbu koja resetuje WDT u slučaju da ga koristimo što u prvom momentu može da deluje neverovatno, ali to i ne čudi jer je cilj višeg programskog jezika da korisnika maksimalno oslobodi razmišljanja o sporednim stvarima, a i odredjivanje mesta gde treba staviti naredbu za njegovo resetovanje (a da nema preterivanja) zahteva malo iskustva. Medjutim, on ima dve DEFINE pseudo-naredbe koje oslobadjaju programera razmišljanja o WDT-u; programeru samo ostaje da odluči hoće li ili neće da ga koristi i da podesi konfiguracionu reč u skladu sa tim. To su naredbe DEFINE no_clrwdt i DEFINE clrwdt; prva kaže kompajleru da se WDT ne koristi, a druga da se koristi. Prva ne predstavlja problem, ali to kako se ponaša druga može da se svrsta u, po meni, grešku tvoraca PBP-a koja ni do dan-danas u najnovijoj verziji nije ispravljena. No, možda oni ne smatraju da je to greška i zato ostavljaju tako u novim verzijama. Evo o čemu se radi:
Dobar deo PBP naredbi su u stvari kompletni potprogrami od kojih su neki vremenski zavisni, tj. jako je bitno trajanje tih potprograma kako bi se izvršavali za tačno odredjeno vreme. Neki od tih potprograma mogu da se izvršavaju jako dugo (npr naredba PAUSE) pa je moguće da, u slučaju kada se koristi WDT, njihovo trajanje bude duže od WDT perioda pa će doći do WDT reseta i program neće da radi onako kako očekujemo. Zato PBP u takvim potprogramima ima makro koji na osnovu DEFINE naredbe na odgovarajuće mesto stavlja ASM naredbe "NOP" ili "CLRWDT" u zavisnosti od upotrebljene DEFINE naredbe. I to za sada sve izgleda u redu. Znači, kada se ne koristi WDT i upotrebi se DEFINE no_clrwdt na svim kritičnim mestima biće umetnutna ASM naredba "NOP".
Medjutim, kada se koristi WDT i upotrebi DEFINE clrwdt, pored ASM naredbi "CRLWDT" u tim potprogramima, PBP postavlja tu naredbu i kroz program na mesta koja, po njegovoj logici, mogu da budu kritična. Problem je što to i nisu uvek kritična mesta pa program ume da bude znanto duži i to čak preko 100 worda na 1 kword prog. memorije. Svaki programer koji drži do sebe će da isključi tu PBP-ovu logiku tako što će DEFINE clrwdt da zameni za no_clrwdt i da sam na pogodna mesta ubaci ASM naredbu "CLRWDT". Medjutim tu dolazi do problema zbog onog makroa koji će u svim, pa i onim kritičnim, potprogramima "CLRWDT" da zameni sa "NOP" i eto problema kod petlji koje se dugo izvršavaju (npr. PAUSE 1000).
Meni je ovo zadalo dosta muka jednom prilikom pa sam rešio da ispitam gde je problem (tada to, naravno, nisam znao) i gornji tekst je rezultat tog ispitivanja. Pošto mi je sve to delovalo nelogično, tj. više kao greška tvoraca PBP-a, rešio sam da napravim novu DEFINE naredbu i prepravim sve kritične PBP naredbe tako da mogu da izbegnem logiku PBP-a koja neumoljivo troši prog. memoriju, a da opet u vremenski kritičnim PBP naredbama ostanu "CLRWDT" instrukcije. I tako sam pre 4 godine izmenio "DEFINE no_clrwdt", dodao novu "DEFINE no_clrwdt_atall" i izmenio sve relevatne PBP naredbe u skladu sa tim.
Nova "DEFINE no_clrwdt_atall" naredba se sada ponaša kao "fabrička" no_clrwdt i upotrebljava se u slučaju kada se ne koristi WDT, a "DEFINE no_clrwdt" je izmenjena tako da PBP u kritičnim PBP naredbama ostavlja "CLRWDT" instrukciju, a da ne ubacuje u ostatak programa tu naredbu kako bi se dobio kraći program. Naredba "DEFINE clrwdt" radi i dalje kao i pre, tj. preterano troši programsku memoriju :)
Ako bude zainteresovanih, omogućiću im da dodju do izmenjenog PBP-a (zahtevi isključivo na PP ili email).

Pozdrav.
Sinisha

 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
*.dynamic.isp.telekom.rs.



+321 Profil

icon Re: Optimizacija programa pisanih u PBP-u08.03.2010. u 02:08 - pre 172 meseci
Prethodni post je malo duži pa ću u ovom da dam još neke informacije.
Ovu izmenu sam uradio za PBP 2.46 i to samo za 14-bitno jezgro jer mi za druga nije bilo potrebno. Pošto mi je večeras zatrebalo da pišem program za 16F886, morao sam da predjem na drugi PBP jer ga 2.46 ne podržava pa sam uzeo 2.60 i u njemu napravio gore navedene izmene. Medjutim, kada sam kompajlirao ranije napisan program za 16F627 (dužine tačno 1024 worda) video sam da 2.60 pravi duži kod za čak 34 worda! Neobično da nova verzija to radi pa ću da ispitam nekom prilikom o čemu se radi, a za sada prelazim na verziju 2.47 koja podržava F886 (i pravi kod iste dužine kao 2.46) tako da će sutra uveče postojati izmene za 3 verzije PBP-a: 2.46, 2.47 i 2.60. Ko bude zainteresovan neka naglasi koja verzija ga zanima.
Još jednom da napomenem da su izmene za sada napravljene samo za PIC-eve sa 14-bitnim jezgrom.

Naredbe koje su izmenjene (za druge nema potrebe) su:
count
debugin
freqout (samo u verziji 2.60)
hserin
pot
pulsout
serin2
serout2
pauseus
i jedan sistemski makro

Pozdrav.
Sinisha
 
Odgovor na temu

yt1nvs
programer,microm
srbija

Član broj: 231966
Poruke: 152
109.93.139.*



+7 Profil

icon Re: Optimizacija programa pisanih u PBP-u09.03.2010. u 22:43 - pre 171 meseci
Znaci li to da ovaj PBP 2.60 nije bas pod vinklu!
Meni je cak i 2.50 pravio probleme pri ispisu na LCD doduse neki krekovani.

primer:

lcdout $fe,1,"PROBA"
u 2.45 je OK

lcdout $fe,1,"ROBA"
u 2.50 hvali prvi karakter
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
*.dynamic.isp.telekom.rs.



+321 Profil

icon Re: Optimizacija programa pisanih u PBP-u10.03.2010. u 09:55 - pre 171 meseci
Ne znam, nisam ga probao sem tog kompajliranja gotovog programa. Za sada ostajem na 2.47, a kad nadjem vremena pogledaću šta se dešava sa 2.60.

Pozdrav.
Sinisha
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Optimizacija programa pisanih u PBP-u

Strane: 1 2

[ Pregleda: 7364 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.