Ono sto se izbacuje konacno:
1. Izbacuje se simbol “with”, “packed”, “new”, “dispose”;
2. Alternativa za “^” ne postoji, a alternativa za “[“ i “]” (definisano je da budu "(."
i ".)") kada se radi o skupovnim vrednostima je “|” (da bi se i u ASM koristile
varijable skupovnog tipa);
3. Skraceni oblik pisanja visedimenzionih nizova;
4. Varijantni zapisi;
5. Mehanizam pravljenja ulancanih listi;
6. Bafer promenljiva (deklarisanje fajlova)? (samo ako ne moze da se osmisli za ilazno
izlazne komunikacione funkcije);
7. Gnezdjenje procedura i funkcija;
8. Saglasni niz kao formalni parametar;
9. Formalni procedurealni i funkcijski parametri;
10. Rewrite, Put, Reset, Get, Read, Write zavisno od stavke 6;
11. Preddeklarisane funkcije Pack i Unpack;
12. Preddeklarisane funkcije eof, eoln i page zavisno od stavke 6;
13. Programski parametri.
Ono sto se prosiruje i sto se dodaje:
1. Celobrojni tipovi se prosiruju, tako da postoji:
Code:
Naziv tipa Duzina u bajtovima Opseg vrednosti
Byte 1 0..255
Shortint 1 -128..127
Integer 2 -32768..32767
Word 2 0..65535
Longint 4 -2e31..2e31-1
Longword 4 0..2e32-1
2. Brojevi u pokretnom zarezu:
Za aplikacije mikrokontrolera dovoljno je imati samo jedan tip real sa 3 bajta mantise i
jednim bajtom za eksponent. Mislis li da je ovo dovoljna ova preciznost?
3. String kao osnovni tip:
Maksimalno string moze zauzimati 256 bajta. Prvi bajt stringa je takodje tipa char,
ali njegova ordinalna vrednost predstavlja stvarnu duzinu stringa. Rad sa stringovima
je brzi kada su oni ovako definisani, nego kada je kraj stringa oznacen nulom.
Mana je sto su ograniceni na najvise 255 karaktera, ali to je vise nego dovoljno za sve
aplikacije mikrokontrolera. Slazes li sa sa ovim?
4. Struktura asm..end za pisanje u asembleru. Asemblerske naredbe moraju da koriste
sva imena onako kako su deklarisana. Stek pointer na ulasku i izlasku iz ove strukture
mora imati istu vrednost, inace treba prijaviti gresku tokom kompajliranja.
Nije moguc skok van asm..end strukture, ali je moguce pozivanje drugih procedure
ili funkcija.
5. Lokalna varjabla treba da moze da se deklarise kao staticka ili dinamicka. Bolje
je da predpostavljana deklaracija bude staticka lokalna varijabla (sa njom
kompajler pravi brzi i kraci kod), a da se sa var dynamic eksplicitno naznaci
deklaracija lokalnih dinamickih varijabli.
6. Uvesti operator @ koji se pise ispred imena varjable i vraca pointer na tip
varijable. Pointer, zavisno od implementacije, treba da je neoznacen dvobajtni
broj (odgovara za MC908 i jos neke, problem ce biti kod onih koji mogu da imaju
duzi kod od 64K, a RAM manji od toga, pa ce pointer zbog malog broja slucajeva
morati da bude duzi od 2 bajta) a da je njegova nil vrednost $FFFF (sto takodje
odgovara za MC908, moze biti 0 za neke druge mikrokontrolere, vazno je da to bude
lokacija na kojoj ne moze da bude ni jedna varijabla, tipizirana konstanta, procedura,
funkcija ili vektor).
7. Uvesti operatore shl i shr. Ako se udesno pomera oznacena varijabla onda se radi o
aritmetickom a ne logickom pomeranju. Po prioritetu ovi operatori su u grupi
operatora mnozenja.
8. Uvesti netipizirani pointer, i koristiti ga za dobijanje adresa procedura ili
funkcija. Ovo je potrebno za pravljenje tabela procedura ili fukcija (komplikuje
implementaciju i prljavo je). Imas li neku drugu ideju kako bi pravili tablicu
poziva procedura?
9. Pri definisanju konstanti, sa desne strane treba da je umesto konstante izraz
sa konstantnim vrednostima.
10. Ime programa treba da je jednako imenu fajla koji sadrzi izvorni tekst programa,
inace se prijavljuje greska.
11. Uvesti simbol uses iza koga sledi lista imena modula koji se na tom mestu ukljucuju.
Moguce je upotrebiti vise puta simbol uses.
12. Uvesti module. Modul mora da sadrzi interfejs sekciju koja se prostire od zaglavlja
modula do simbola implementation. Ono sto je deklarisano u interfejs sekciji treba da
je dostupno svim modulima koji se ukljucuju posle njega. Takodje, primarni modul
(program) ima pristup svim deklaracijama u interfejs sekciji svih modula koji su
pre toga ukljuceni. Iskazni deo modula mora biti prazan. Jedan modul ne moze da
ukljuci drugi modul, to je i nepotrebno ako je modul definisan kako je gore napisano.
Ime modula treba da je jednako imenu fajla koji sadrzi izvorni tekst modula.
13. Uvesti kontrolu toka prevodjenja sa: _if..then, _if..then..else i _case..of. Kao
uslov za _if i _case mora biti izraz od konstanti.
14. Uvesti kompajlerske funkcije koje vracaju konstantu u vreme kompajliranja:
- SizeOf(Ime) gde je ime, ime varijable ili tipa i vraca celobrojnu vrednost
jednaku duzini varijable ili tipa u bajtovima;
- TypeOf(Ime) gde je ime, ime varijable ili tipa i vraca celobrojnu vrednost kao handler
na tip
- DynamicOf(Ime) gde je ime ime varijable, vraca boolean vrednost true ako je varijabla
dinamicka, inace vraca false;
- ExistOf(Ime) gde je ime, ime formalnog parametra makroa i vraca true ako je njemu
prosledjen stvarni parametar;
- ErrorMSG(String) prekida kompajliranje i kao gresku ispisuje string.
- Hi(Ime) gde je ime, ime varijable ili tipa (samo za redne ripove), vraca najvecu
moguci vrednost koju tip moze da ima;
- Lo(Ime) gde je ime, ime varijable ili tipa (samo za redne ripove), vraca najmanju
moguci vrednost koju tip moze da ima;
- High(Ime) gde je ime, ime varijable ili tipa, i vraca najvecu vrednost indeksa
niza (najveci moguci broj elemenata) ako je tip niz, inace 1 ako nije.
15. Uvesti preddefinisane funkcije:
- Length(Ime) ako je ime, ime string varijable vraca stvarnu duzinu stringa sto je isto
kao ordinalna vrednost prvog bajta stringa, ako je ime skupovne varijable vraca broj
elemenata skupa (0 za prazan skup). Tip koji vraca je byte;
16. Uvesti exit za izlaz iz procedure ili funkcije i break za napustanje ponavljajucih
struktura:
17. Uvesti posebnu varijablu result koja vraca rezultat funkcije umesto da se kao
varijabla upotrebljava ime funkcije (Neka se ne ljuti Virt, ali isto ime da bude za
funkciju i lokalnu varijablu ne ide);
Opste specificnosti:
1. Uz simbol var (kada se deklarisu staticke varijable) dodaje se simbol da blize odredi
memorijski prostor varijable. Za MC908 bi trebalo da moze da se napise var zeropage,
a za druge nesto drugo. Ako toga nema onda se varijable redom rasporedjuju u memoriji.
2. Interrupt procedura iza zaglavlja ima simbol interrupt i adresu interrupt vektora.
Vidim da C kompajleri imaju jednu interrupt proceduru, pa se u njoj ispituje koji
je mehanizam pokrenuo interrupt, i saglasno tome se izvrsava odgovarajuci kod. To je
glupo, moduo za komunikaciju koji ima svoje interrupt-e treba da inkapsulira procedure
koje opsluzuju te interrupt-e.
3. Uvesti tipizirane konstante, koje se ponasaju kao varijable (sem sto se u njih ne
moze izvrsiti upis) i koje se smestaju u kod programa. Sluze, izmedju ostalog za
pravljenje tabela.
4. Uvesti simbol absolute koji uz deklaraciju varijable forsirano postavlja varijablu
na adresu specificiranu vrednoscu iza ovog simbola.
5. Uvesti binarni format pisanja celih brojeva.
Ako imas jos neku ideju izlozi je.
Pozdrav
PS: Ne mogu da ti meilom posaljem atacovan AVR PASCAL (oko 870KB) jer ga tvoj server odbija. Uspesno
saljem na druge adrese.