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

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 765 Aktiv.: 3.24 Kraj: Povir / Ljubljana
|
Objavljeno: Sob Feb 07, 2009 10:13 pm Naslov sporočila: Vprašanje za poznavalce C-ja |
|
|
Ne vem če ta tema sploh spada sem a... ker programiram za AVR sem postavil semkaj..
pri deklaraciji funkcije v C-ju v samo funkcijo prenesemo parametre in iz funkcije
dobimo en sam parameter/spremenljivko, ki ga/jo vrnemo z return(*)
zanima me če se da deklarirat strukturo recimo
struct nova_ura{
unsigned char uu;
unsigned char mm;
unsigned char ss;
};
struct nova_ura ura1, ura2, ura3;
in ob deklaraciji funkcije v samo funkcijo poslati parameter preko strukture nakar tudi iz same funkcije dobimo parameter vrnjen preko strukture?
nova_ura izracunaj_uro(nova_ura uraxx)
{
uraxx.uu=10;
uraxx.mm=12;
uraxx.ss=13;
return uraxx;
}
Ja vem sem tudi že slišal za kazalce a mi nekako ne ležijo... |
|
Nazaj na vrh |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 71164.20
|
Objavljeno: Sob Feb 07, 2009 10:17 pm Naslov sporočila: Re: Vprašanje za poznavalce C-ja |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
snoopy Član


Pridružen-a: Ned 11 Maj 2003 1:17 Prispevkov: 229 Aktiv.: 0.97 Kraj: Radovljica
|
Objavljeno: Sob Feb 07, 2009 10:56 pm Naslov sporočila: |
|
|
Težko ni če znaš......
Lahko prosim razložiš osnove pointerjev po domače .
Hvala |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 765 Aktiv.: 3.24 Kraj: Povir / Ljubljana
|
Objavljeno: Sob Feb 07, 2009 11:07 pm Naslov sporočila: |
|
|
Programiral sem precej v Pascalu, asemblerju in tudi v C-ju.
Vse dosedaj sem zmogel vse brez kazalcev..
V bistvu mi nekam res težko ležijo.. pa ne vem zakaj..
pa sem jih že parkrat zagrizel a ... res mi težko zlezejo v glavo..
Pozna kdo kakšno zvijačo kako jih lažje razumeti, boljše uporabljati.. saj sem veliko bral, da so izredno uporabni, praktični, hitri.. pa čeprav je koda vsaj po mojem zelo čudna.. |
|
Nazaj na vrh |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 71164.20
|
Objavljeno: Sob Feb 07, 2009 11:42 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 765 Aktiv.: 3.24 Kraj: Povir / Ljubljana
|
Objavljeno: Ned Feb 08, 2009 12:04 am Naslov sporočila: |
|
|
MarE69 je napisal/a: |
Če si delal z asemblerjem, potem ne bo težko razumeti. Pointer je spominski naslov neke spremenljivke. Tule ti bom dal nekaj smernic bolj z mikrokontrolerskega stališča, čeprav se bo kakšen c++ guru verjetno križal.
|
Mare vsaka čast in HVALA!
bom preštudiral!
Ker sem precej časa lomil kodo v asemblerju tako tudi razmišljam in dostikrat v C-ju kako stvar težje naredim pa čeprav je zato v C-ju potrebno le par vrstic.. a v asemblerju sem jih zmetal v kodo "tik-tak"..
navada železna srajca..  |
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.06 Kraj: Novo mesto
|
Objavljeno: Ned Feb 08, 2009 1:25 am Naslov sporočila: |
|
|
Pointerji in knjižnjica
V knjižnjici so knjige zložene po policah. Če je knjižnjica dobro organizirana, lahko vsako knjigo najdeš takoj in brez težav, če v bazi podatkov (COBISS) najdeš njeno številko.
Ti sediš pred računalnikom z bazo podatkov, vse knjige pa so zložene nekje daleč stran od tebe. Na listek si napišeš številko knjige, ki jo želiš brati. Ker imaš ogromno dela, daš listek knjižnjičarju in mu naročiš, naj ti pove kakšne platnice ima knjiga. Knjižnjičar bo knjigo našel samo z listkom v roki, na katerem je napisana številka knjige in ti povedal, kakšne platnice ima. Ker rabiš še en podatek o platnicah, številko na listku prečrtaš, napišeš novo in listek zopet uturiš knjižnjičarju.
Zgodba ima pomankljivosti, a razloži koncept:
Listek je pointer, številka na njem pa naslov, knjižnjičar pa je nekakšen kanal med tabo in naslovom, ki ti omogoča, da takoj izveš kakšne so platnice.
Ker uporabljaš listek, ti ni več treba vlačit vseh knjig s seboj, da bi vedel, kakšne platnice imajo. Samo številko knjige napišeš in že veš, kakšne platnice ima knjiga.
Da listek deklariraš:
char *listek;
Da na listek zapišeš številko knjige:
listek = &knjiga;
Da prebereš kakšne so platnice:
platnice = *listek; |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 765 Aktiv.: 3.24 Kraj: Povir / Ljubljana
|
Objavljeno: Ned Feb 08, 2009 12:29 pm Naslov sporočila: |
|
|
Naredil sem par primerov z kazalci na standardne sprmenljivke. Stvar Deluje
potem pa sem spet zagrizel svoj primer torej z stukturo in imam določene težave.
Moj primer:
1
2 struct nova_ura{
3 unsigned char uu;
4 unsigned char mm;
5 unsigned char ss;
6 };
7
8 struct nova_ura ura1;
9
10 void izracunaj_uro(nova_ura *ura1xx)
11 {
12 ura1xx->uu=10;
13 }
prevajalnik pa mi javi napake:
!E C:\C_test\test.c(11): syntax error; found `*' expecting `)'
!E C:\C_test\test.c(11): skipping `*' `ura1xx'
!E C:\C_test\test.c(13): undeclared identifier `ura1xx'
!E C:\C_test\test.c(13): left operand of -> has incompatible type `int'
Done: there are error(s). Exit code: 1
Uporabljam ICC AVR ver 6.30
Nekako se mi zdi da je vse prav napisano a kot kaže..
prevajalnik pravi, da nekaj ni prav??? |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.69
|
Objavljeno: Ned Feb 08, 2009 1:13 pm Naslov sporočila: |
|
|
Mah, kilav primer ... NVM. _________________ Ka ti bo pa torba ce si kupu kolo ?
Nazadnje urejal/a Sokrat Ned Feb 08, 2009 1:15 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.51
|
Objavljeno: Ned Feb 08, 2009 1:14 pm Naslov sporočila: |
|
|
takole:
Koda: |
typedef struct {
unsigned char uu;
unsigned char mm;
unsigned char ss;
} nova_ura;
nova_ura ura1;
void izracunaj_uro(nova_ura *ura1xx)
{
ura1xx->uu=10;
}
void main(void)
{
izracunaj_uro(&ura1);
} |
_________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 765 Aktiv.: 3.24 Kraj: Povir / Ljubljana
|
Objavljeno: Ned Feb 08, 2009 10:54 pm Naslov sporočila: |
|
|
gumby je napisal/a: |
takole:
typedef struct {
unsigned char uu;
unsigned char mm;
unsigned char ss;
} nova_ura;
nova_ura ura1; |
Zadeva res deluje...
HVALA!
Kot kaže je potrebno le strukturo drugače deklairati..
Do sedaj sem uporabljal deklaracije brez typedef in vse strukture so delovale popolnoma normalno..
Kot kaže je vse odvisno od prevajalnika kako zadeve interpertira in prevede.. |
|
Nazaj na vrh |
|
 |
lojzek Član



Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3387 Aktiv.: 16.08
|
Objavljeno: Tor Mar 03, 2009 2:13 pm Naslov sporočila: |
|
|
@mare69:
Sem bral tvoj post malce višje v tej temi glede kazalcev in spremenljivk. Ali je to tisto, ko kličeš neko funkcijo npr. izracun (10, 5); in potem funkcija izracun operira s tistima številkama v oklepaju? Ali pa recimo bolj znana _delay_ms (500);
Jaz namreč uporabim neko spremenljivko, ki velja povsod v programu in klicana funkcija potem računa s to spremenljivko. V prvem primeru bi moral uporabiti 2 spremenljivki. (pač sem še vedno začetnik v Cju).
Pa še, če ima kdo kaj domačega branja o tej temi, oz. kako se ureja te zadeve. Ko bom vedel, kaj iskati, bo tudi google pomagal. |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.51
|
Objavljeno: Tor Mar 03, 2009 4:24 pm Naslov sporočila: |
|
|
lojzek je napisal/a: |
@mare69:
Sem bral tvoj post malce višje v tej temi glede kazalcev in spremenljivk. Ali je to tisto, ko kličeš neko funkcijo npr. izracun (10, 5); in potem funkcija izracun operira s tistima številkama v oklepaju? Ali pa recimo bolj znana _delay_ms (500);
Jaz namreč uporabim neko spremenljivko, ki velja povsod v programu in klicana funkcija potem računa s to spremenljivko. V prvem primeru bi moral uporabiti 2 spremenljivki. (pač sem še vedno začetnik v Cju).
Pa še, če ima kdo kaj domačega branja o tej temi, oz. kako se ureja te zadeve. Ko bom vedel, kaj iskati, bo tudi google pomagal. |
Če hočeš v funkciji dostopat do neke zunanje spremeljivke, imaš dve možnosti:
-spremenljivko definiraš kot globalno in bo dostopna povsod
-namesto vrednosti v funkcijo preneseš kazalec na spremenljivko, nekako takole:
Koda: |
izracun(int *a, int *b)
{
*a=*a+*b;
*b=*a+2;
}
main()
{
int x1=5,x2=6;
izracun(&x1,&x2);
} |
Po klicu funkcije bo x1=11 in x2=13. Če bi enako naredil brez kazalcev, se v bistvu ne bi zgodilo nič... _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
domen_puncer Član

Pridružen-a: Čet 01 Maj 2008 13:30 Prispevkov: 78 Aktiv.: 0.38 Kraj: Ljubljana, Mozirje
|
Objavljeno: Čet Mar 05, 2009 8:54 pm Naslov sporočila: |
|
|
teslo je napisal/a: |
Do sedaj sem uporabljal deklaracije brez typedef in vse strukture so delovale popolnoma normalno..
Kot kaže je vse odvisno od prevajalnika kako zadeve interpertira in prevede.. |
Ni potrebe po typedef,
Koda: |
void izracunaj_uro(struct nova_ura *ura1xx) |
bo delalo cisto ok.
V C je ime tipa "struct nova_ura", v C++, pa lahko ta "struct" izpustis pri deklaraciji spremenljiv.
Se povezava do enega C tutoriala:
http://beej.us/guide/bgc/ _________________ Tiskanje sudoku |
|
Nazaj na vrh |
|
 |
tadej.ko2 Član

Pridružen-a: Sre 17 Okt 2007 18:26 Prispevkov: 76 Aktiv.: 0.36 Kraj: sveta trojica
|
Objavljeno: Ned Mar 08, 2009 2:06 pm Naslov sporočila: |
|
|
zdravo!
mi lahko kdo pomaga pri določitvi računske moči uC-ja?
skrbi me namreč, da bi se moral interrupt začeti izvajati, še preden bi se prejšna interrupt zanka izvedla do konca.
konkretno me zanima za atTiny26L, če bi zmogel s frekvenco 1000Hz izvajati kaj takega:
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{clock++;
for(i = 0; i < 10; i++) if( clock - times[i] > delay[i]) switch(i) { case(0):PORTA.0 = 1;break; .....} } |
|
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: 459 dni
Powered by phpBB © 2001, 2005 phpBB Group
|