 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Tonci Član

Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.06 Kraj: Domžale
|
Objavljeno: Pon Apr 13, 2009 12:46 pm Naslov sporočila: Izdelava knjižnice v Cju |
|
|
Zanima me, kako bi naredil knjižnico za funkcije(i2c komunikacija), ki bi jo lahko kasneje samo naložil v program in klical potrebne ukaze! Funkcije so trenutno del programa, rad pa bi jih zapakiral v neko datoteko, da so programi preglednejši!
Hvala za pomoč |
|
Nazaj na vrh |
|
 |
snow Član


Pridružen-a: Tor 27 Dec 2005 14:02 Prispevkov: 341 Aktiv.: 1.44 Kraj: Ljubljana || Velenje
|
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Pon Apr 13, 2009 12:55 pm Naslov sporočila: |
|
|
Funkcije, ki jih uporabljaš enostavno prenesi v drugo datoteko, ki ji daš običajno pomenljivo ime recimo i2c.c
Predvsem pazi, če slučajno funkcije uporabljajo kakšno globalno spremenljivko, temu se moraš izognit kolikor se le da. Ko imaš ta dva pogoja izpolnjena, pa samo še kličeš to knjižnico iz glavnega programa <include i2c.c> in načeloma je to to.
Ti pa svetujem, da dobro komentiraš samo knjižnico in funkcije, da ne boš čez pol leta samo debelo gledal kaj sem že počel tule....  |
|
Nazaj na vrh |
|
 |
Tonci Član

Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.06 Kraj: Domžale
|
Objavljeno: Pon Apr 13, 2009 1:11 pm Naslov sporočila: |
|
|
V novo datoteko dam samo definicije funkcij ali tudi prototipe?
Kam spada pa ta del?
Koda: |
#define SDA TRISIO.F5
#define SCL TRISIO.F4 |
@snow
funkcije sem pisal sam, iz katerih se največ naučim in "razumem" protokol ter pomen |
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Pon Apr 13, 2009 1:48 pm Naslov sporočila: |
|
|
Tonći je napisal/a: |
V novo datoteko dam samo definicije funkcij ali tudi prototipe?
Kam spada pa ta del?
Koda: |
#define SDA TRISIO.F5
#define SCL TRISIO.F4 |
@snow
funkcije sem pisal sam, iz katerih se največ naučim in "razumem" protokol ter pomen |
Da define, daš tudi v knjižnico. Se pa splača narediti #ifndef....
Koda: |
#ifndef SDA
#define SDA TRISIO.F5
#define SCL TRISIO.F4
#endif |
Torej preizkusiti, če si že definiral pin, in če ne nastaviti pine. To je zato, da lahko v glavnem programu vsiliš druge pine-porte. |
|
Nazaj na vrh |
|
 |
Tonci Član

Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.06 Kraj: Domžale
|
Objavljeno: Pon Apr 13, 2009 3:49 pm Naslov sporočila: |
|
|
Datoteko shranim kot ime.c V nov program jo vkljulim kot #include "ime.c" in ko kličem funkcijo jo samo pokličem, prototipi niso potrebni ali pač? |
|
Nazaj na vrh |
|
 |
snow Član


Pridružen-a: Tor 27 Dec 2005 14:02 Prispevkov: 341 Aktiv.: 1.44 Kraj: Ljubljana || Velenje
|
Objavljeno: Pon Apr 13, 2009 5:43 pm Naslov sporočila: |
|
|
Načeoma imaš 2 datoteki. Eno s končnico .h in eno s .c.
Include kličeš na .h datoteki, ono .c pa se preved in jo potem linker poveže v končni program. To prevajanje in linkanje se ubistvu naredi avtomatsko če imaš vse skupaj npr. v mplabovem projektu. |
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Pon Apr 13, 2009 8:56 pm Naslov sporočila: |
|
|
Ni potrbno komplicirat še s header datoteko. Deklaracije si tako ali tako že napisal. In z #include si prevajalniku povadal, da se ukazi nahajajo tudi drugje, kjer jih potem med prevajanjem tudi poišče. |
|
Nazaj na vrh |
|
 |
Tonci Član

Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.06 Kraj: Domžale
|
Objavljeno: Pon Apr 13, 2009 9:57 pm Naslov sporočila: |
|
|
To pomeni, da inicjalizacija ni potrebna? Samo vklučim knjižnico in kličem funkcije!
edit:
ko vpišem include in vse potrebno mi javi
e:/pic/pic12f675/test/i2c_12f675.c:131: error: End of file within #if (#ifdef) section started at line 17
from E:/PIC/PIC12F675/Test/test.c: 1: #include "i2c_12f675.c"
1 error in preprocessor.
Zdi se mi, da je napaka tu nekje
Koda: |
#ifndef SDA
#define SDA TRISIO.F5
#ifndef SCL
#define SCL TRISIO.F4
#endif |
|
|
Nazaj na vrh |
|
 |
domen_puncer Član

Pridružen-a: Čet 01 Maj 2008 13:30 Prispevkov: 78 Aktiv.: 0.37 Kraj: Ljubljana, Mozirje
|
Objavljeno: Pon Apr 13, 2009 10:14 pm Naslov sporočila: |
|
|
bungee, prosim ne klobasat.
Seveda se ti to obnese ko uporabis i2c.c v samo eni datoteki, ampak takoj ko program ne bo vec trivialen, bodo problemi z linkanjem.
Kot je že snow rekel, includas prototipe (.h), in zlinkas z prevedeno implementacijo (.c/.s/.asm/...). _________________ Tiskanje sudoku |
|
Nazaj na vrh |
|
 |
Tonci Član

Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.06 Kraj: Domžale
|
Objavljeno: Pon Apr 13, 2009 10:24 pm Naslov sporočila: |
|
|
Prototipe imam v datoteki i2c_12f675.c kako naprej? Lahko tudi kak link za pomoč! |
|
Nazaj na vrh |
|
 |
domen_puncer Član

Pridružen-a: Čet 01 Maj 2008 13:30 Prispevkov: 78 Aktiv.: 0.37 Kraj: Ljubljana, Mozirje
|
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Tor Apr 14, 2009 8:22 am Naslov sporočila: |
|
|
domen_puncer je napisal/a: |
bungee, prosim ne klobasat.
Seveda se ti to obnese ko uporabis i2c.c v samo eni datoteki, ampak takoj ko program ne bo vec trivialen, bodo problemi z linkanjem.
|
A. NE žali!
B. Za take potrebe je .c dovolj, če pa bo vse skupaj ratalo bolj ogromno pa se bo tudi že naučil o header datotekah.
C. Ko bo program za PIC-a tako velik, da bo potreba po navzkrižnem linkanju.... ehem vrjetno nikoli ne bo tako velik.
Pa še odgovor na #ifndef. Jaz uporabljam CCS in mi ta precompiler ukaz deluje, preveri dokumentacijo za tvoj prevajalnik, če to sploh dovoljuje. |
|
Nazaj na vrh |
|
 |
domen_puncer Član

Pridružen-a: Čet 01 Maj 2008 13:30 Prispevkov: 78 Aktiv.: 0.37 Kraj: Ljubljana, Mozirje
|
Objavljeno: Tor Apr 14, 2009 5:06 pm Naslov sporočila: |
|
|
bungee je napisal/a: |
A. NE žali! |
Ko vidim neumnost, povem kaj to je. Če te to žali, lahko nehaš govoriti neumnosti
Zakaj je to neumnost:
Nimaš 2 minuti dodatnega dela, da stvar narediš prav (ok... to je majhen minus)
Če bo kdo gledal kodo za tabo, lahko pričakuješ kletvice.
Bolje se je že prvič naučiti prav. Brez (minimalnega) znanja potrebnega za pisanje headerja si težko predstavljam programiranje.
Ker je potrebno še samo par takih idej, in kar naenkrat imaš 5000 vrstičen program napisan v eni datoteki.
bungee je napisal/a: |
C. Ko bo program za PIC-a tako velik, da bo potreba po navzkrižnem linkanju.... ehem vrjetno nikoli ne bo tako velik.
|
Ne gre se samo za velikost, ampak tudi za razdeljevanje programa na smiselne (po moznosti ponovno uporabljive) celote. Npr. del programa bere z I2C temperaturnega senzorja, drugi del pa zajema nekaj nepovezanega z ADC na I2C.
Koda: |
#ifndef SDA
#define SDA TRISIO.F5
#ifndef SCL
#define SCL TRISIO.F4
#endif
|
Manjka #endif pred drugim #ifndef (kot zaprtje prvega). _________________ Tiskanje sudoku |
|
Nazaj na vrh |
|
 |
Tonci Član

Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.06 Kraj: Domžale
|
Objavljeno: Tor Apr 14, 2009 7:17 pm Naslov sporočila: |
|
|
Res je! teh endif ne poznam, moram še preštudirat! Zanima me, kaj in kako naj naredim header! Vanj vključim samo prototipe in shranim kot .h. Zanima me, ali naj ga v vsakem programu tudi kličem?
Zanima me še, kakšnega tipa so spremenljivke v tej knjižnici (globalne, lokalne?)
Imate prav, da se pri velikem številu vrstic hitro zmede! Najprej sem imel program za izpis in merjenje v enem in moram priznati obup! |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 494 dni
Powered by phpBB © 2001, 2005 phpBB Group
|