1 / 19

K e il C

K e il C. Uvod. K e il C je jedno proširenje ANSI C-a i sastoji se od: Memorijskih tipova i oblasti u 8051 Memorijski modeli Podrška za bit adresibilne lokacije Podrška za SFR Atributi funkcija. K e il C - code.

oona
Download Presentation

K e il C

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Keil C

  2. Uvod • Keil C je jedno proširenje ANSI C-a i sastoji se od: • Memorijskih tipova i oblasti u 8051 • Memorijski modeli • Podrška za bit adresibilne lokacije • Podrška za SFR • Atributi funkcija

  3. Keil C - code • Specificiranje lokacije u programskoj memoriji vrši se dodavanjem riječi code, npr.: • Char code tekst[]=˝tekst u code memomotiji˝ • Programska momorija je samo za čitanje i na ovaj način je moguće pristupiti čitavom adresnom prostoru 64KB

  4. Keil C - data • Sa data se definiše promjenljiva u prvih 128 KB memorije: • char data x; • Sa idata se definiše promjenljiva u okviru svih 256 KB interne memorije kojoj se pristupa indirektno: • char idata y,z; • Sa bdata se definiše promjenljiva u okviru bit adresibilnog dijela memorije: • char bdata t;

  5. Keil C - data • Sa xdata specificira se promjenljiva u eksternoj memoriji: • unsigned long xdata vektor[100]; • Sa pdata specificira se jedna stranica od 256 B u eksternoj memoriji: • char pdata vektor1[10][4][4];

  6. Keil C - SFR • Za definisanje SFR koriste se: sfr, sfr16 i sbit. • Sa sfr se definiše određeni 8-bitni sfr: • sfr P0 = 0x80; • Sa sfr16 definiše se lokacija od dva 8 bitna SFR: • sfr16 DP = 0x82 (DPL=0x82 i DPH=0x83) • Sa sbit se definišu promjenljive koje referišu na bite u sfr: • sbit P01 = P0^1; • sbit P01 = 0x81; • sbit P01 = 0x80^1;

  7. Keil C - memorijski modeli • SmallModel • sve promjenljive, svi objekti i stek su u internoj memoriji • CompactModel • sve promjenljive su smještene u jednoj stranici eksterne memorije • sporiji je od prethodnog • LargeModel • sve promjenljive su smještene u eksternoj memoriji • sporiji i manje efikasan od prethodnih • generiše se više koda

  8. Keil C - pokazivači • U keil C - u se mogu specificirati pokazivači na određeni memorijski prostor: • char data *str; • int xdata *x; • long code *z;

  9. Keil C - funkcije • Funkcije u Keil C-u imaju jos neke atribute • [povratni_tip] naziv_fje([argumenti])[small|compact|large] [reentrant][interrupt n][using n] • small,compact,large - memorijski model • reentrant - rekurzivne funkcije • interrupt n - interapt rutina • using n - registarska banka koja će se koristiti

  10. Keil C - stek • Stek se u 8051 implementira isključivo u internoj memoriji • Kompajler ga smješta odmah iza promjenljivih • Kompajler za parametre podrazumjeva fiksne momorijske lokacije • Samo se povratna adresa smješta na stek • Prekidne rutine uglavnom koriste druge registarske banke i čuvaju neke registre na steku • Podrazumijevano kompajler proslijeđuje do tri argumenta u registrima

  11. Keil C - parametri • Proslijeđivanje parametara u registrima

  12. Keil C - vraćanje vrijednosti • Vraćanje vrijednosti kroz registre

  13. Keil C - primjeri f-ja • #pragma small /*default small model */extern int calc (char i, int b) large reentrant;extern int func (char i, float f) large;extern void *tcp (char xdata *xp, int ndx) small;int mtest (int i, int y){ /*small model*/ return (i*y + y*i + func(-1, 4.75);}int large_func (int i, int k) large { /*large model*/ return (mtest(i,k) * 2)}

  14. Keil C - using • Korišćenjem using atributa specificira se registarska banka za korišćenje • To podrazumijeva: • čuvanje na steku tekuće banke (rednog broja) • setovanje nove banke i • restauriranje stare banke • Ne može se koristiti kada se vrijednost vraća u registrima

  15. Keil C - prekidna rutina • Primjer: void timer0 (void) interrupt 1 using 2 { if (++interruptcnt == 4000){ second++; Interruptcnt=0; }} • interrupt prihvata broj koji predstavlja broj prekida • Generiše se sledeći kod: • kada je potrebno na steku se čuvaju ACC, B, DPH, DPL i PSW • ako se ne specificira banka svi korišćeni registri se čuvaju na steku • sve što je čuvano se vraća prije izlaska i funkcija se završava sa TRI

  16. Keil C - reentrant • reentrant funkcije mogu biti pozivane od simultanih procesa • Tako treba da da su definisane sve funkcije koje se pozivaju u prekidnoj rutini i u glavnom programu ili drugoj prekidnoj rutini • reentrant funkcije mogu da se pozivaju rekurzivno

  17. Keil C - reentrant • Za svaku reentrant funkciju se simulira reentrant stek prostor u internoj ili eksternoj memoriji • Za reentrant funkcije postoje sledeća pravila: • bit-ni argumenti i lokalne promjenljive ne mogu biti korišćeni • mogu imati druge atribute (interrupt i using) • povratna adresa smješta se na hardverski stek

  18. Keil C - direktive • Mogu da se zadaju kroz komandnu liniju navođenjem iza naziva fajla ili u samom fajlu navođenjem iza #pragma • #pragma small

  19. Keil C - opcije • Opcije za generisanje koda: • OPTIMIZE(SIZE) - česte operacije zamijenjuje funkcijama i tako smanjuje veličinu koda • NOAREGS - kompajler neće koristiti apsolutni pristup registrima - program će biti nezavisan od korišćene registarske banke • NOREGPARAMS - parametri će se uvijek proslijeđivati u lokalnom mem prostoru

More Related