www.elektronik.si
Vprašanje za poznavalce C-ja
Pojdi na stran 1, 2, 3 ... 14, 15, 16  Naslednja  :||:
www.elektronik.si -> ARM arhitektura

Avtor: clownfishKraj: Povir / Ljubljana PrispevekObjavljeno: 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...

Avtor: . PrispevekObjavljeno: Sob Feb 07, 2009 10:17 pm    Naslov sporočila:  Re: Vprašanje za poznavalce C-ja
----------------------------------------------------------------------------
Brisana vsebina odstranjenega uporabnika.

Avtor: snoopyKraj: Radovljica PrispevekObjavljeno: Sob Feb 07, 2009 10:56 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Težko ni če znaš...... Rolling Eyes

Lahko prosim razložiš osnove pointerjev po domače Laughing .

Hvala

Avtor: clownfishKraj: Povir / Ljubljana PrispevekObjavljeno: 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..

Avtor: . PrispevekObjavljeno: Sob Feb 07, 2009 11:42 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Brisana vsebina odstranjenega uporabnika.

Avtor: clownfishKraj: Povir / Ljubljana PrispevekObjavljeno: 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.. Wink

Avtor: UmnikKraj: Novo mesto PrispevekObjavljeno: 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;

Avtor: clownfishKraj: Povir / Ljubljana PrispevekObjavljeno: Ned Feb 08, 2009 12:29 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Naredil sem par primerov z kazalci na standardne sprmenljivke. Stvar Deluje Cool

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???

Avtor: Sokrat PrispevekObjavljeno: Ned Feb 08, 2009 1:13 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Mah, kilav primer ... NVM.

Nazadnje urejal/a Sokrat Ned Feb 08, 2009 1:15 pm; skupaj popravljeno 1 krat

Avtor: gumby PrispevekObjavljeno: 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);
   
}

Avtor: clownfishKraj: Povir / Ljubljana PrispevekObjavljeno: 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..

Avtor: lojzek PrispevekObjavljeno: 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.

Avtor: gumby PrispevekObjavljeno: 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č...

Avtor: domen_puncerKraj: Ljubljana, Mozirje PrispevekObjavljeno: Č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/

Avtor: tadej.ko2Kraj: sveta trojica PrispevekObjavljeno: 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; .....} }

Stran 1 od 16

Powered by phpBB © 2001,2002 phpBB Group