Primena mikroprocesora u elektroenergetici Programski jezik C

21 окт 2013 ... Programski jezik C je kreiran 1970. godine u Bell laboratorijama od strane Denisa Ričija. • Programski jezik C predstavlja profesional...

12 downloads 599 Views 95KB Size
21.10.2013

Primena mikroprocesora u elektroenergetici Programski jezik C -osnoveMarko Gecić [email protected]

• Programski jezik C je kreiran 1970. godine u Bell laboratorijama od strane Denisa Ričija • Programski jezik C predstavlja profesionalni alat za proizvodnju komercijalnog softvera namenjenog za implementaciju, pre svega, vremenski kritičnih procesa: operativni sistemi, telekomunikacioni sistemi, sistemi za automatsko upravljanje industrijskim, vojnim, naučnim i sličnim sistemima. • C obezbeđuje programeru maksimalnu procesnu moć hardverske platforme • Oblasti primene C programskog jezika su postavile na prvo mesto zahtev za što kraćim programskim kodom kako bi se program što brže izvršavao uz minimalno angažovanje skladišnih resursa • Programski jezik C je jezik operatora i izraza

2

1

21.10.2013

Osnovne karakteristike programskog jezika C • Jezik opšte namene orijentisan ka programiranju različitih sistema, od najjednostavnijih mikrokontrolera u upravljanju do superračunara. • Mali broj službenih reči (samo 32). • Postoji 40 operatora, među kojima se nalaze i operatori za rad na nivou bita. • Fleksibilan (pored postojećih funkcija moguće je kreirati sopstvene funkcije specijalnih namena). • Prenosiv – nezavistan od hardverske platforme. • Svi C kompajleri moraju zadovoljiti ANSI standard.

3

Struktura C programa [DIREKTIVE PRETPROCESORU] [SEKCIJA GLOBALNIH PODATAKA [definicije konstanti] [definicije tipova] [deklaracije promenljivih]] [PROTOTIPOVI drugih FUNKCIJA] DEFINICIJA main FUNKCIJE { --} [DEFINICIJE drugih FUNKCIJA] { --} 4

2

21.10.2013

Alfabet, službene reči i identifikatori • • • •

Mala i velika slova abecede. Sve dekadne cifre. Karakteri: ~ ! # % & * ( ) _ + -|= [ ] { } ; : ’ ‘’ ? /,.\ Dva simbola jednakosti ==, grade C operator jednakosti koji implementira matematičku relaciju jednakosti. • Jedan simbol jednakosti =, C operator dodeljivanja vrednosti • Programski jezik C razlikuje mala i velika slova.

5

32 službene reči auto

break

case

char

const

continue

default

do

double

else

enum

extern

float

for

goto

if

int

long

register

return

short

signed

sizeof

static

struct

switch

typedef

union

unsigned

void

volatile

while

6

3

21.10.2013

Pretprocesor • Pre prevodjenja izvornog koda u objektni ili izvršni izvršavaju se pretprocesorske naredbe • Svaka linija koda koja započinje znakom # predstavlja jednu pretprocesorsku naredbu #naredba parametri • Neke od predprocesorskih naredbi su: #include #define #undef #if #ifdef #ifndef #elif #else 7

Pretprocesor • Naredba #include može se pojaviti u dva oblika – #include “ime_datoteke” – #include Ako je ime_datoteke navedeno unutar navodnika, onda pretprocesor datoteku traži u direktorijumu u kojem se nalazi izvorni program. Zapis sa uglastim zagradama nalaže C pretprocesoru da navedenu datoteku traži u standardnom include direktorijumu koji je postavljen od strane operativnog sistema uz asistenciju C razvojnog okruženja. Primer: #include 8

4

21.10.2013

Pretprocesor • Naredba #define – #define ime_konstante njena_vrednost Pretprocesor će od mesta na kome se #define naredba nalazi do kraja datoteke svako pojavljivanje imena ime_konstante zameniti sa njena_vrednost. Primer: #define PI 3.14 … x = 2*r*PI 9

Pretprocesor • Parametrizirana naredba #define – #define ime(argumenti) tekst_zamene Pretprocesor će od mesta na kome se parametrizirana #define naredba pri svakom pozivu ime(argumenti) zameniti sa tekst_zamene Primer: #define polovina(vrednost) ((vrednost)/2) … x = polovina(20) => x = ((20)/2) 10

5

21.10.2013

Tipovi podataka programskog jezika C • • • •

Skalarni tipovi Pokazivački tip Nabrojani tip Višedimenzionalni podaci – nizovi,stringovi i matrice • Strukture,unije i polja bitova • Dinamički nizovi i liste 11

Celobrojni podaci Tip

Veličina

Opseg

char

1 bajt

-128 do 127 ili 0 do 255

unsigned char

1 bajt

0 do 255

signed char

1 bajt

-128 do 127

int

2 ili 4 bajta -32768 do 32767 ili -2.147.483.648 do 2.147.483.647

unsigned int

2 ili 4 bajta 0 do 65535 ili 0 do 4.294.967.295

short

2 bajta

-32768 do 32767

unsigned short 2 bajta

0 do 65535

long

4 bajta

-2.147.483.648 do 2.147.483.647

unsigned long

4 bajta

0 do 4.294.967.295

Realni podaci Tip

Veličina

Opseg

float

4 bajta

1.2e-38 do 3.4e+38

double

8 bajtova

2.3e-308 do 1.7e+308

long double

10 bajtova

3.4e-4932 do 1.1e+4932 12

6

21.10.2013

Operatori i izrazi • Aritmetički operatori Operator

Namena

Primer

Rezultat

+

sabiranje

2+1

3

-

oduzimanje

2-1

1

*

množenje

2*2

4

/

deljenje

12/6

2

%

deljenje sa ostatkom

5%2

1

++

inkrementiranje

a++

a= a+1

--

dekrementiranje

a--

a = a-1

13

Operatori i izrazi • Relacioni i logički operatori Operator

Namena

Primer

Rezultat

>

veće od

2>1

1

<

oduzimanje

2<1

0

>=

veće ili jednako

2>=1

1

<=

manje ili jednako

5<=4

0

==

jednako

5==5

1 1

!=

različito

5!=4

&&

logičko I

(i>1)&&(j<6)

||

logičko ILI

x = 10||20

!

logička negacija

if(!b) brojac =0; 14

7

21.10.2013

Operatori i izrazi • Bit orijentisani operatori Operator

Namena

Primer

Rezultat

>>

Pomeranje udesno

16>>1 (16:2)

8

<<

Pomeranje ulevo

16<<1 (16∙2)

32

~

Jedinični komplement

&

Binarni I (AND)

n = n&0177

Postavljan na nulu sve osim najnižih 7 bitova n

|

Binarni ILI (OR)

^

Binarno EXILI (XOR)

15

Deklaracija promenljivih • Programski jezik C raspolaže mehanizmom za definisanje trajanja promenljive kojim se definiše oblast programskog koda unutar koga se može pristupiti i menjati sadržaj promenljive, kao i šta će se desiti sa vrednošću te promenljive kada ona ponovo postane aktuelna. • Promenljive mogu biti lokalne i globalne. • Trajanje (i ponašanje) promenljive je definisano nekom od sledećih memorijskih klasa: – – – –

Automatksa (auto), Registarska (register), Statička (static), Globalna (extern).

16

8

21.10.2013

Deklaracija promenljivih • Automatska (auto) – Automatsko kreiranje i dodeljivanje inicijalne vrednosti, ukoliko je to deklaracijom definisano, odmah po ulasku u programski blok važenja te promenljive. – Po napuštanju bloka važenja promenljive, svi memorijski resursi koji su bili angažovani se automatski oslobađaju kada promenljiva postaje trajno nedostupna. – U većini slučajeva ne mora se koristiti službena reč auto jer je C prevodilac podrazumeva

17

Deklaracija promenljivih • Registarska (register) – Klasa namenjena za one promenljive kojima će veoma često pristupati tokom izvršavanja programskog bloka radi očitavanja ili menjanja njihovih vrednosti. – Ukoliko je to moguće C prevodilac će za te promenljive angažovati registre opšte namene procesora čime se vreme pristupa ovim promenljivama postavlja na najkraće moguće. – Zbog ograničenog broja registara ovakve memorijske klase se retko koriste

18

9

21.10.2013

Deklaracija promenljivih • Statička (static) – Slična automatskoj ali s tom razlikom da promenljiva statičke klase ne gubi svoju vrednost po završetku programskog bloka u kome važi nego je zadržava. – Memorijski blok koji su zauzele statičke promenljive je nedostupan drugim promenljivama. – Prilikom deklarisanja statičke promenljive moguće je definisati i njenu inicijalnu vrednost koju će ona imati samo tokom prvog ulaska u njen programski blok. – Statička memorijska klasa se koristi za lokalene promenljive funkcija kada se želi da novo izvršavanje tela funkcije započne vrednostima sa kojima je prethodno izvršavanje tela funkcije završeno. 19

Deklaracija promenljivih • Globalna (extern) – Globalna klasa obezbeđuje pristup i važenje promenljive do kraja datoteke sa izvornim programskim kodom, odnosno i u drugi izvornim datotekama. – Promenljive koje deklarisane van bilo koje funkcije, uključujući i main funkciju, smatraju se globalnima. U ovom slučaju radi se o definišućoj deklaraciji i nije obavezna službena reč extern. – Referišuća deklaracija sadrži službenu reč extern i koristi se kada želimo da promenljiva bude dostupna i drugim programskim datotekama. 20

10

21.10.2013

Selekcije • if – selekcija jednog od dva moguća toka izvršenja C programa • Posle službene reči if sledi u malim zagradama izraz koji se sračunava i ako je njegova vrednost različita od nule sprovodi se iskaz ili blok naveden odmah posle zatvorene zagrade • Ukoliko je navedena i službena reč else posle if naveden iskaz ili blok biće izvršen ako je vrednost izraza u uslovu if selekcije nula (logička neistina) if(uslov) izraz1; else izraz2;

if(a
if(a
Selekcije • switch – na osnovu uslova se vrši izbor jedne od N disjunktnih programskih putanja koje se na kraju sažimaju u jednu • Posle službene reči switch se unutar manjih zagrada navodi izraz koji određuje izbor putanje izvršavanja gde je svaka putanja definisana svojom vrednošću (case value) navedenom posle službene reči case, a posle dvotačke se navode iskazi koji se na toj putanji trebaju izvršiti • Službena reč default definiše putanju koja se izvršava ako je sračunavanje uslovnog izraza rezultovalo vrednošću koju nema niti jedna od prethodno definissanih switch putanja switch(a) { case v1: izraz1; break; case v2: izraz2; break; … case vN:izrazN; break; default: inace_izraz; break; }

22

11

21.10.2013

Iteracije • for – započinje službenom rečju for koju unutar malih zagrada prati izraz sastavljen od tri izraza razdvojenih tačka-zarezom, a na kraju stoji izraz ili blok tela iteracije • prvi izraz – izraz za inicijalizaciju, sračunava se samo jednom pre prvog izvršavanja for iteracije i služi za inicijalizovanje vrednosti koje su potrebne za iteraciju • drugi izraz – izraz za kontrolu ponavljanja, sračunava se pre svakog izvršavanja tela iteracije • treći izraz – izraz za finalizaciju, sračunava se po izvršenju poslednje operacije tela for iteracije, a pre novog sračunavanja izraza za kontrolu ponavljanja 23

Iteracije • for for(izrazA1;izrazA2;izrazA3) uradi A1; for(izrazB1;izarazB2;izrazB3) { uradiB1; uradiB2; }

for(i=0;i<5;i++) { a =a+1; b = a + 1; }

24

12

21.10.2013

Iteracije • while –

posle službene reči se unutar malih zagrada navodi izraz čija se vrednost prvo određuje, pa ako je ona različita od nule izvršavaju se operacije unutar navedenog iskaza ili bloka iskaza. Po završetku ovih operacija, ponovo se sračunava izraz unutar malih zagrada čime se započinje drugo izvršavanje ove funkcije. • Ukoliko se za vrednost izraza dobije nula, programski tok se premešta na prvu naredbu posle while iteracije. • Ukoliko telo funkcije ili sam izraz unutar malih zagrada ne menja sam izraz unutar malih zagrada tako da on konvergira ka nuli dobija se beskonačna petlja.

25

Iteracije • while izrazA1; while(izrazA2) { izrazA1; izrazA3; }

i = 10; while(i!=0) { i--; }

• Primer beskonačne petlje while(1) { izrazB1; } 26

13

21.10.2013

Funkcije • Programski jezik C ima samo jedan mehanizam za implementaciju podalgoritma – funkciju. • Funkcije se obično definišu kao potprogrami koji na osnovu izvesnog broja argumenata daju jedan rezultat koji se naziva vrednost funkcije. • Jezik C dozvoljava da funkcije, pored vrednosti funkcije, daju i druge rezultate koji se nazivaju bočnim efektima. 27

Funkcije • Definisanje funkcija: oznaka_tipa naziv_funkcije (niz_argumenata) telo_funkcije

– Vrednost funkcije: • Oznaka tipa predstavlja osnovni tip vrednosti funkcije. U obzir dolaze svi standardni prosti (skalarni) tipovi. Za funkcije koje ne stvaraju vrednost funkcije, već samo bočne efekte, kao oznaka tipa treba da se koristi službena reč void. Ako se izostavi oznaka_tipa, podrazumeva se tip int. • Naziv funkcije u osnovi se sastoji od identifikatora funkcije

28

14

21.10.2013

Funkcije • Definisanje funkcija – Argumenti funkcije: • Niz argumenata predstavlja argumente funkcije pomoću kojih se vrši unošenje početnih podataka u funkciju. Vrednost funkcije se izračunava na osnovu tih početnih podataka. Opšti oblik niza argumenata prikazan je kao: argument, argument, ..., argument • Pojedini argumenti se definišu na isti način kao i obični podaci: oznaka_tipa naziv_argumenta • Argumenti koji se pominju prilikom definisanja funkcije nazivaju se i formalnim argumentima. Oni nisu stvarni podaci koji se obrađuju u toku izvršavanja funkcije. Argumenti koji se pominju prilikom pozivanja funkcije nazivaju se stvarnim argumentima. 29

Funkcije • Definisanje funkcija – Telo funkcije: • Telo funkcije predstavlja sadržaj funkcije koja se definiše. Ono je po formi blok, sto znači da sadrži deklarativne i izvršne naredbe. • Podaci definisani na početku tela funkcije su lokalne za funkciju. Njihov doseg je do kraja tela funkcije. • Povratak iz funkcije u pozivajući program posstiže se naredbom return koja spada u kategoriju upravljačkih naredbi. Opšti oblik te naredbe je: return izraz; ili return; • Izraz predstavlja rezultujuću vrednost funkcije. Izraz mora po tipu da se slaže sa predviđenim tipom vrednosti funkcije. • Kod funkcija tipa void, naredba return ne sme da sadrži izraz.

30

15

21.10.2013

Funkcije • Pozivanje funkcija – Pozivanje funkcije u jeziku C se smatra binarnim operatorom i obeležava se sa (). Prvi operand je funkcija koja se poziva, a drugi operand je niz stavrnih argumenata: funkcija( izraz, izraz, ..., izraz) – Funkcija označava funkciju čije se izvršenje traži. Izrazi predstavljaju stvarne argumente čije vrednosti služe za inicijalizaciju dormalnih argumenata pre obrade tela funkcije. Stvarni argumenti moraju da se slažu sa brojem i tipovima formalnih argumenata pri definisanju funkcije. 31

Funkcije • Glavni program main() – Svaki program mora sadržavati funkciju main budući da izvršavanje programa započinje prvom izvršnom naredbom u main-u. Nju poziva operativni sistem kad korisnik pokrene program. – Glavni program može da daje vrednost funkcije tipa int koja se vraća operativnom sistemu kao završni status programa. Smatra se da nula kao status predstavlja uspešni završetak programa. – Ako je glavni program tipa void završni status programa je neka slučajna vrednost. – Glavni program može da bude bez argumenata ili da ima dva argumenta koji omogućavaju prenošenje parametara glavnom programu koji se zadaju u sastavu komande operativnog sistema za izvršavanje programa.

32

16

21.10.2013

Funkcije • Glavni program main() #include void main() { int a = 5; int b = 2; int c; c = a+b; }

33

Literatura 1. Dragan Ivetić – Struktuirani pristup programiranju – Inženjering, algoritmi i programski jezici PASCAL i C, FTN Izdavaštvo, Novi Sad, 2005 2. Laslo Kraus – Programski jezik C sa rešenim zadacima, Akademska misao, Beograd, 2001 3. Denis M. Ritchie, Brian W. Kernighan – Programski jezik C, Drugo izdanje, Prijevod: Ante Denić

34

17