Mala šola C 001

Danes smo pričeli z Malo šolo C. Spoznali smo se z zgodovino in prevedli svoj provi program v C-ju. Predavanje je potekalo preko spletne konference VOX:

https://vox.arnes.si/guest_arnes_si-malasolac/

Datoteke z navodili in opomniki so na spletni strani VOX v razdelku “datoteke”.

Posnetek prve šolske ure je tukaj:

https://vox.arnes.si/p1r3gn0f44n/

Vsebina prvega srečanja:
Mala šola C

1. Nekaj zgodovine

Programski jezik C je ustvaril Dennis Ritchie v AT&T Bell laboratorijih leta 1972.

C je bil narejen ker so potrebovali jezik za narediti operaciski sistem UNIX.
Ime je dobil po jeziku B iz katerega izhajaja.

Povezave:
https://en.wikipedia.org/wiki/B_(programming_language)
https://en.wikipedia.org/wiki/C_(programming_language)

1.1. Osnovne značilnosti

Po lastnostih je zelo podoben asemblerju.
Tudi v C kodi lahko uporabljaš asembler kar zelo uporabljamo pri mikrokontrolerjih.
Prevedeni programi so majhni in učunkoviti.
Je zelo preprost:
– 32 rezerviranih besed (npr. if, else, while, const, break, …)
– 44 operatorjev (npr. +,*,&,%, …)
– 14 ločil (npr. . ; ‘ ” presledek …)
C programi so portabillni. Brez velikih sprememb lahko tečeje na različnih platformah.
C podpira veliko podatkovnih tipov, zna delati tudi z biti.
C podpira veliko uporabnih funkcij ter uporabne stavke za zanke in pogoje.
Iz kode imamo direkten dostop do spomina.
Programira se lahko modularno.

Uporabnost C-ja je praktično neomejena.
V C-ju je narejeno in se lahko naredi vse: operacijski sistemi, večje ali manše aplikacije, prevajalnike drugih programskih jezikov, seveda tudi programe za mikrokontrolerje.

Praktični del male šole: Začeli bomo kar v spletnem prevajalniku (online), nadaljevali s prevajalnikom za WIN/Linux in končali s primeri na mikrokontrolerjih.
2. Moj prvi mali C program

Preden začnemo, nekaj osnovnih pojmov:

– Sintaksa: pravila o zlganju znakov v besede in stavke, podobno kot v vsakem drugem jeziku
– Izvorna datoteka: tekstovna datoteka z besedilom programa
– Koda: besedilo programa
– Stavek (v C kodi): z ločilom zaključena vrstica progamske kode
– Komentar: del besedila v programski kodi, ki se ne izvaja in je ponavadi namenjen lažjemu razumevanju in dokumentiranju
– Spremenljivka: z znaki zapisan simbol, ki označuje neko vrednost
– Tip spremenljivke: podobno kot v matematiki, kjer imamo naravna, cela, realna… števila, je v C programih podobno, a ne omejeno le na števila

Pa še nekaj osnovnih prvil:

– Vsak C program mora imeti natančno eno “main” funkcijo, kjer se program prične izvajati.
– Izvajanje se začne pri prvem zavitem oklepaju “{” in konča z zadnjim zavitem oklepaju “}”
– C program razlikuje med MALIMI in velikimi črkami
– Vsi stavki v C-ju se praviloma pišejo z MALIMI ČRKAMI.
– Velike črke se praviloma uporabljajo samo za simbole.
– Vsak stavek v C programu se MORA končati s podpičjem “;”.
– Vsem spremenljivkam moramo določiti tip.
– Za ločevanje uporabljamo presledek.
– Komentarje lahko uporabljamo kjerkoli v programu.

2.1. Moj prvi C program

Prvi program naše male šole v C-ju

#include
int main()
{
// Izpis sporocila
printf(“Moj prvi program v mali šoli C\n”);
return 0;
}

Kaj lahko naredimo z gornjimi vrsticami kode? POtrebno jih bo prevesti in program pognati. Kako to naredimo? S pomočjo spletnega prevajalnika…

Povezava: https://rextester.com/FNO8355

2.2. Oblikovanje kode in postavitev oklepajev

Obstaja veliko različnih načinov kako so v kodi postavljeni oklepaji.
Vsi načini so pravilni, saj je prevajalniku vseeno, kako delimo vrstice in kako postavimo oklepaje, dokler je sintaksa pravilna.
Različni primeri so našteti tukaj: https://en.wikipedia.org/wiki/Indentation_style

2.3. Kako program ne sme izgledati ?

Načeloma C program ne potrebuje neke posebne oblike in je vse skupaj lahko nametano brez repa in glave.
Kljub temu pa se od programerja pričakuje, da bo upošteval nek priporočen slog oblikovanja. Le tako lahko koda ostane pregledna in razumljiva.

Priporočena pravila so tukaj: https://github.com/MaJerle/c-code-style

Za vajo poskusite pognati tale C program:

#define P(X)j=write(1,X,1)
#define C 39
int M[5000]={2},*u=M,N[5000],R=22,a[4],l[]={0,-1,C-1,-1},m[]={1,-C,-1,C},*b=N,
*d=N,c,e,f,g,i,j,k,s;main(){for(M[i=C*R-1]=24;f|d>=b;){c=M[g=i];i=e;for(s=f=0;
s=0&&k=16!=M[k]>=16))a[f++
]=s;if(f){f=M[e=m[s=a[rand()/(1+2147483647/f)]]+g];j=j<f?f:j;f+=c&-16*!j;M[g]=
c|1<<s;M[*d++=e]=f|1<b++?b[-1]:e;}P(” “);for(s=C;–s;P(“_”)
)P(” “);for(;P(“\n”),R–;P(“|”))for(e=C;e–;P(“_ “+(*u++/8)%2))P(“| “+(*u/4)%2
);}

Obstajajo tekmovanja kdo bo napisal bolj nerazumljivo kodo (povezava: https://www.ioccc.org/ )

Verjetno je težko verjeti, ampak tudi to je C program:

#define _ F–>00||-F-OO–;
int F=00,OO=00;main(){F_OO();printf(“%1.3f\n”,4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}

Za 1. domačo nalogo poskusite, kaj izpiše gornji “okrogel” program.

2.3. Izvorna koda

Vsak C program je zapisan v izvorni datoteki. Datoteka z zapisanim programom je povsem običajna besedilan datoteka. Za urejanje izvorne kode ne potrebujemo posebnega urejevalnika tipa Word in podobno, ampak zadostuje navadna beležnica. Kljub temu priporočam uporabo bolj “programersko” usmerjenih beležnic. Te omogočajo osvetljevanje kode (code highlight), pomoč pri pisanju (autocomplete, auto indent) in podobno.

Ena takih programerskih beležnic je notepad++, poleg Programmers Notepad, emEditor, … Vsak naj si izbere, kar mu najbolj ustreza.
https://notepad-plus-plus.org/downloads/

Home


https://www.pnotepad.org/

Za 2. domačo nalogo si namesti urejevalnik tekstovnih datotek (če ne veš, kateri, uporabi notepad++).

2.4. Delovanje programa

V zelo natančne podrobnosti ne bomo zašli, vseeno pa je potrebno vedeti, da mikroprocesor v računalniku ali mikrokontroler v neki napravici deluje na osnovi enk in ničel, torej dvojiškega sistema. Po elektronski plati to pomeni, da nekje je napetost (enka, “1”), drugje v vezju pa je ni (nočla, “0”). Računalnik razume in zna obdelovati samo to in nič drugega v logičnem zaporedju, ki mu ga določimo z našim programom.

Sedaj imamo na eni strani izvorno kodo, na drugi pa računalnik, ki potrebuje “enke in ničle” za delovanje. Za pretvorbo besedila potrebujemo prevajalnik.

2.5. Prevajalnik

Obstaja veliko raznih prevajalnikov. V naši Mali šoli bomo pričeli z uporabo prevajalnika “gcc”.

GCC ima dolgo zgodovino, dela na večini platform in tudi generira kodo za različne platforme.

GCC je brezplačen in odprtokodni prevajalnik.
Več tukaj:
https://en.wikipedia.org/wiki/GNU_Compiler_Collection

2.6. Kako deluje proces prevajanja

GCC pretvori našo izvorno kodo v ojektno kodo, ki jo razume naš računalnik. V tem koraku nam sporoči, ali smo se kje zmotili ali v izvorni kodi zapisali kaj čudnega.

2.7. Kako lahko zaženem prevedeni program

Objektno kodo, ki je zapisana v izhodni datoteki (to zgenerira GCC) je potrebno še opremiti z zagonskim programom, ki bo toobjektno datoteko naložil v pomnilnik računalnika in zagnal. Na Windows platformi ima objektna datoteka končnico .obj, programska datoteka, ki je primerna za zagon pa .exe

Za ta korak potrebujemo linker. Ta lahko poleg .exe zagonske daoteke ustvari knjižnico s prevedenimi podprogrami, ki smo jih zapisali v naši izvorni kodi (.dll, .lib) ali pa novo objektno datoteko. V Linux: .so in .a, deuje pa enako.

Za tretjo domačo nalogo ustvari datoteko s tvojim prvim programom in uredi vrstico, kjer se izpiše besedilo tako, da bo izpisalo nekaj po tvoji izbiri.

V tem delu so 3 domače naloge.

3. Namestitev GCC

V okolju linux ni potrebno nič nameščati. Predvidevam, da vsi udeleženci uporabljate windows okolje.

Za praktično delo v tej Mali šoli si moramo namestiti okolje, v katerm bomo delali. Najenostavneje je uporabiti “mingw” verzijo GCC-ja in podpira tako 32 kot 64 bitne sisteme, ki je tudi med najpopularnejšimi.

Onovna povezava je tule: http://mingw-w64.org/doku.php

Direktna povezava na instalacijsko datoteko pa je tule:
https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/mingw-w64-install.exe/download

“mingw-w64-install.exe” je installer, ki namesti vsa potrebna orodja.

Namestitev traja kar nekaj časa, saj mora installer prenesti vse potrebne datoteke iz internetnih strežnikov.

Pri namestitvi ne spreminjaj privzetih nastavitev, razen že sam tako želiš in veš, kaj delaš.

Privzeta nastavitev za namestitveni direktorij je:
“C:\Program Files\mingw-w64\i686-5.2.0-posix-dwarf-rt_v4-rev0\mingw32\bin”
ali
“C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin”

To je lahko pri kom tudi drugje, zato preveri, ali imaš ta direktorij in so notri datoteke s končnico .exe, npr. gcc.exe

Pot do tega direktorija moraš dodati v sistemski path. To ti bo omogočilo, da lahko uporabljaš GCC kar iz ukazne vrstice iz kateregakoli direktorija na računalniku.

Windows 10:

V start menuju v iskalno polje vpiši “Environment Variables” in izbereš “Edit System Environment Variables”
V zavihku “Advanced” izbereš “Environment Variables”
V spodnjem delu so “System variables” in dodaj v “path” gornji direktorij

Pazi, da ne pobrišeš tega, kar je že v sistemskem pathu.
Direktorij dodaj na konec in pazi, da ostanejo vse navedene poti ločene s podpičjem.
V win 10 je urejevalnik tak, da je vsak direktorij v svoji vrstici

3.1. Test

Odpremo ukazno vrstico (Win-R in vpišemo cmd)

V ukazni vrstici izvedemo:

gcc –-version

Izpisati se mora nekaj takega:

gcc (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Za domačo nalogo namesti vse potrebno in preveri, da gcc deluje, kot smo spoznali zgoraj. Ustvari si en direktorij na disku, kjer boš shranjeval datoteke z vajami.

Leave a comment

Vaš e-naslov ne bo objavljen. * označuje zahtevana polja