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

PASCAL kompajler-moja vecita tema

[es] :: Elektronika :: Mikrokontroleri :: PASCAL kompajler-moja vecita tema

Strane: 1 2

[ Pregleda: 5475 | Odgovora: 26 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.rs.



+7 Profil

icon Re: PASCAL kompajler-moja vecita tema22.05.2013. u 01:15 - pre 132 meseci
Moguće. ovo je bilo za 2011.

Menjaju se pristupi. Zapravo logika kapitala nameće navike. Klati vola za šniclu se isplati onome koji prodaje volove. Novi MCU, novi razvojni alat, nove biblioteke i ciklus zarade se nastavlja.

Siroti izumitelji UNIX-a se nisu obogatili, kome treba OS koji je dobar za sva vremena. Ali OS sa 50-tak verzija, gde ti nova ne pruža ništa značajno novo, pre ispravljaja loše u starom, nije važno, ali jeste to da moraš da platiš.

Nego pređosmo na nešto sasvim drugo, sutra se radi.
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: PASCAL kompajler-moja vecita tema22.05.2013. u 02:04 - pre 132 meseci
Citat:
korak: Terminator na kraju stringa? Pa sta je to nego, svojim mestom u stringu, oznaka duzine stringa.

Dužina stringa na početku stringa? Pa šta je to nego podatak koji govori gdje bi trebao biti kraj stringa (terminator).

Još nije odgovoreno na pitanje: u čemu je prednost držanja podatka o dužini stringa u samom stringu u odnosu na držanje tog podatka u nekoj nezavisnoj varijabli?

Citat:
korak: Koliko procesorskog vremena potrošiš a još nisi ni počeo sabiranje.

A kako ti misliš uopšte doći do tih podataka o dužini tih tvojih stringova?!
Imaš li ti neki način da prebrojiš karaktere u stringu, a da ne trošiš procesorsko vreme?

Sa klasičnim terminisanim stringovima imaš izbor: dužinu stringa možeš izračunati odmah, možeš kasnije, a možeš i onda kad ti zatreba (za mnoge operacije sa stringovima uopšte nije potrebno znati dužinu).
Sa tvojim stringovima nemaš izbor: moraš odmah da računaš dužinu, svejedno da li ti treba sad ili ti ne treba sad ili ti nikad neće ni trebati.

Dalje, npr. prilikom čitanja stringa iz memorije, u slučaju stringa sa terminatorom možeš u jednoj operaciji izvrišiti čitanje karaktera iz stringa uraditi sa njim šta trebaš i uporediti ga sa terminatorom '\0' da vidiš da li je stigao do kraja.
Terminator '\0' će u kompajleru proći kao immediate operand (npr. #opr8i) i takav biti upisan u asmeblersku naredbu.
Takve naredbe zahtjevaju manje procesorskih ciklusa od onih koji imaju neki drugi operand koga treba prethodno dovući iz memorije u CPU.

Sa tvojim stringovima, ti ćeš morati u svakoj iteraciji (čitanju jednog karaktera) upoređivati svoj brojač sa prvim karakterom iz stringa u kom ti leži dužina stringa. To nije immediate operand i takva asemblerska instrukcija ce trošiti više clock-ova nego ona gorepomenuta.

I šta će na kraju da troši više procesorskog vremena?

Ja ne znam tačno, ne poznajem iznutrice tvog procesora, ali ti možda znaš pa provjeri...
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.rs.



+7 Profil

icon Re: PASCAL kompajler-moja vecita tema22.05.2013. u 20:55 - pre 132 meseci
Ne brojim karaktere, njihov broj je zapisan na prvoj poziciji.

tip stringa, na primer Str64 = string[64], se moze predstaviti i kao:

tStr64 = record
Duzina : byte;
Str : array[1..64] of char;
end;

Ali umesto toga duzina je pridruzena stringu pa je ona Ord(Str64[0]);

No, razlike nisu drasticne da zasluzuju ovoliku paznju. Imam trenutno neodlozan posao za sutra, pa se sretnemo ovde kasnije.

Pozdrav.
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: PASCAL kompajler-moja vecita tema22.05.2013. u 21:09 - pre 132 meseci
Citat:
korak: Ne brojim karaktere, njihov broj je zapisan na prvoj poziciji.

Kako si došao do tog broja?
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.rs.



+7 Profil

icon Re: PASCAL kompajler-moja vecita tema26.05.2013. u 20:33 - pre 132 meseci
Ma to je prost mehanizam. Čak mu pridajemo previše pažnje.

Ako je string, na primer neka se zove Str, prazan onda je upakovan kao #0.... To znači da ima 0 karaktera. Kada dodaš neki karakter: Str := Str+'A' onda se inkrementira vrednost na prvoj poziciji, Str = #1..., pa se sabere adresa varijable Str i vrednost na prvoj poziciji, i to je adresa na koju se upisuje karakter, tako da se dobija Str = #1,'A'.... Ako je Str = 'Aca' onda je on #3,'A','c','a'.....Po istom principu dodajes drugi string. Tako da posle dodavanja imas na prvoj poziciji duzinu zbira dva stringa.

Nego, potrosio sam celo popodne da malo testiram na 4 kompajlera i tri MCU-a. Uzeo sam stringove duzine izmedju 32 i 64 karaktera. Operacije kopiranja sabiranja i insertovanja. Rezultati su prilicno disperzivni, ali sam zakljucio da vise od 90% vremena odlazi na samu manipulaciju sa karakterima, a vrlo malo na odredjivanje duzine stringa. To sto ce 0 na kraju potrositi nekoliko puta vise vremena, od stringa sa duzinom na pocetku, za dobijanje duzine stringa (sto zavisi od same duzine stringa) nije od znacaja za ukupno vreme potrebno da se izvrsi neka operacija nad stringovima.

Sve u svemu dobija se neka ralika koja je u okviru 5%.

Za mene je ovo bez znacaja, ali sam postupio onako kako je u nekim kasnijim standardima PASCAL-a.

Pozdrav.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: PASCAL kompajler-moja vecita tema26.05.2013. u 22:45 - pre 132 meseci
ja ne vidim sta ima 8bitni mcu sa par k flasha da toliko operise stringovima da je bilo sta vezano za stringove znacajno bitno za tu pricu
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.rs.



+7 Profil

icon Re: PASCAL kompajler-moja vecita tema26.05.2013. u 23:07 - pre 132 meseci
U pravu si.
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: PASCAL kompajler-moja vecita tema

Strane: 1 2

[ Pregleda: 5475 | Odgovora: 26 ] > FB > Twit

Postavi temu Odgovori

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