Nie som si isty co rozumies pod slovom kniznica. Kniznicou urcite nie je prilinkovany samostatny subor *.c, aj ked sa Ti to moze zdat byt celkom trefne oznacenie.
Kniznice si v AVR studiu prikladas cez Configuration Options sekcia Libraries. Kniznice maju priponu *.a. Podla toho co pises asi budes este dost daleko od toho, aby si si tvoril vlastne kniznice. No mozno sa mylim.
Predpokladam, ze si si vytvoril nejaky c-ckovy subor, v ktorom mas par sikovnych funkcii, ktore chces pouzivat v roznych projektoch.
Tak si v AVR studiu si vytvor novy projekt (od toho su). Napis si suborov *.c kolko chces. Ziaden do ziadneho nevkladaj ani pomocou direktivy #include. Vloz si ich do vytvoreneho adresara projektu.
Klikni pravym tlacidlom mysi na Source Files a vloz si vsetky tie c-ckove subory, ktore sa maju na aplikacii podielat.
To mozes spravit aj v zlozke Header Files. Na rozdiel od Source Files prekladac so subormi vlozenymi do Header Files nerobi nic, iba Ti ich umozni vybrat v editore.
Vsetko co je vlozene do Source Files sa prelozi spolu do jedneho *.hex pomocou automaticky vygenerovaneho make. O to sa postara WinAVR.
Inak vsetko je to aj v helpe v AVR studiu. Zadaj hladat “The Project Tree”.
Pravidla vkladania headrov, rozdiel medzi deklaraciou a definiciou funkcii, co je to static (z hladiska viditelnosti premennej medzi rozymi c-ckami), ako zapuzdrovat premenne a ako deklarovat globalne premenne, ako kedy a co je potrebne vkladat do headrov a hlavne ako ma vyzerat stabna kultura pouzitia headrov a c-ckovych suborov nema zmysel pisat. Bolo to uz napisane 100x a daleko vacsimi kapacitami ako je moja malickost. Rozhodne tuto fazu ucenia sa C-cka nepodcenuj. Je jedno s akym prekladacom robis. Je to celkom slusne popisane aj v klasike od Herouta. Urcite (ak este nemas) si zadovaz prvy diel. Je to tam i s prikladmi a vysvetlenim.
Co sa #include tyka, ja osobne to robim tak, ze samozrejme ku kazdemu c-ckovemu suboru do ktoreho musi byt “vidiet” z funkcii v ostatnych c-ckovych suboroch napisem samostatny header. Vsetky headre pomocou #include vpisem do headrea ktory sa vola include_all.h (samozrejme na jeho mene nezalezi) Do kazdeho c-cka potom na zaciatok iba vpisem riadok
#include include_all.h
Pre rozne projekty ma subor include_all.h rozny obsah, ale samotne c-ckove subory v ktorych netreba menit funkcie ostanu nedotknute editovanim kvoli prilinkovaniu nejakych inych c-cok s ich headrami. Vsetky zmeny okolo headrov robim iba na jednom mieste a ak sa nieco zmeni, nemusim editovat vsetky c-ckove subory. Tych sa neboj pouzivat viac. V projektoch s vyslednym kodom 10-20kB ich mam nezriedka 8-12 a trebars aj 16 headrov. Napriklad samostatny subor C na komunikacny protokol, samostatny subor na driver com1, na driver com2, samostatny driver na SPI so smerovanim (jasne ze nerobi iba odosielanie a prijem jedneho bajtu
). Nejake slusne navyky tvorby c-ckovych suborov su napisane u Herouta a nie len tam. Vela tu uz toho dobreho bolo spomenute aj v diskusii.