www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Vprašanje za poznavalce C-ja
Pojdi na stran Prejšnja  1, 2, 3 ... , 14, 15, 16  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Sigi
Član
Član



Pridružen-a: Čet 31 Jul 2014 11:42
Prispevkov: 199
Aktiv.: 1.69
Kraj: Kamnik

PrispevekObjavljeno: Pet Avg 08, 2014 8:36 am    Naslov sporočila:   Odgovori s citatom

Andrej, hvala za linke.

Na žalost so to optimizacije za float Sad .


lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Tor Sep 30, 2014 7:57 pm    Naslov sporočila:  #define in več parametrov Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
tilz0R
Član
Član



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 6.24
Kraj: Črnomelj

PrispevekObjavljeno: Tor Sep 30, 2014 8:00 pm    Naslov sporočila:   Odgovori s citatom

Mogoče tako?

Koda:

#define LOG(fmt, ...) fprintf(stderr,fmt, __VA_ARGS__);

_________________
Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Tor Sep 30, 2014 8:08 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
MvE
Član
Član



Pridružen-a: Ned 04 Jan 2009 12:24
Prispevkov: 146
Aktiv.: 0.79
Kraj: MB

PrispevekObjavljeno: Sob Nov 15, 2014 2:00 am    Naslov sporočila:   Odgovori s citatom

Vprašanje za poznavalce C-ja Smile Kako lahko definiram spremenljivko, ki bi držala in izpisovala 16 bitno vrednost na (poljubne in ne po vrsti zložene) GPIO-je (torej nulti bit spremenljivke bi se izpisal na pinu PA7, prvi bit na PB1, drugi na PA2 itn.)?

Kadar želim definirati cel PORTA je to zelo enostavno in naredim tako:

#define DATA16 PORTA //Pri čemer ima PORTA pine od 0 do 15.

Kaj pa drugače? Primer bi potreboval na data linijah za LCD, kjer ni vedno mogoče uporabiti vseh linij na istem portu. Lahko je tudi drugačna rešitev, ne rabi biti nujno rešena z #define.

Hvala!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Sob Nov 15, 2014 10:59 am    Naslov sporočila:   Odgovori s citatom

Narediš tabelo pointerjev na port registre in pine?
_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9406
Aktiv.: 42.36
Kraj: Kranj - struževo

PrispevekObjavljeno: Sob Nov 15, 2014 12:49 pm    Naslov sporočila:   Odgovori s citatom

Najhitrejša je rešitev z look-up tabelo, če je so izhodi vsi na istem portu.
Recimo da imaš 8-bitni podatek in 8-bitni port. V tem primeru narediš tabelo (array), dolgo 256 bytov, ki je napolnjena z ustreznimi vrednostmi.
Primer:
Če rabiš izpisat byte 231, rečeš PORTA = Tpretvorba[231];
V tabeli je na lokaciji 231 prerazporejena kombinacija izhodnih bitov (pinov).
Pretvorba v tem primeru pobere 256 bytov flasha in porabi samo 1 clock cikel. Omejena je na 1 sam izhodni port.

Varianta 2 je z if stavki, ki porabi nekoliko več clock ciklov (vsaj 16+ za 8 bitov), ampak zasede malo prostora in ni omejena na 1 port.
Podvarianta A: imaš 1 izhodni port in sestavljaš spremenljivko pred vpisom.
Podvarianta B: imaš več portov in izpisuješ bit po bit (najdalj traja)

Primer A:
u8 outb = 0;
if (inb & 0x80) outb |= ...;
...
if (inb & 0x01) outb |= ...;
PORTA = outb;

Primer B:
PORTA=0;
PORTB=0;
if (inb & 0x80) PORTA |= ...;
...
if (inb & 0x01) PORTB |= ...;

Pri slednji varianti se ne postavijo vsi podatki naenkrat in rabiš en Sync pulz za zunanjo napravo (LCD ga ima).

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 75550.64

PrispevekObjavljeno: Sob Nov 15, 2014 1:32 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
hamm
Član
Član



Pridružen-a: Sob 27 Okt 2012 21:47
Prispevkov: 216
Aktiv.: 1.55
Kraj: Mengeš

PrispevekObjavljeno: Ned Nov 16, 2014 12:16 am    Naslov sporočila:   Odgovori s citatom

Kako v C-ju najdeš naslov funkcije? Če napišem &imeFukncije to ne deluje. Delam menu za LCD in v strukturi imam kazalce tipa void. Za izvedbo neke funkcije pa v tej strukturi potrebujem nek kazalec, ki bi kazal na to funkcijo... Think Sem že probaval s kazalcem na funkcijo vendar ne deluje, oz. jaz nekaj ne delam prav...
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2066
Aktiv.: 9.30
Kraj: Ljubljana

PrispevekObjavljeno: Ned Nov 16, 2014 9:40 am    Naslov sporočila:   Odgovori s citatom

Poglej, če ti tole kaj pomaga.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
hamm
Član
Član



Pridružen-a: Sob 27 Okt 2012 21:47
Prispevkov: 216
Aktiv.: 1.55
Kraj: Mengeš

PrispevekObjavljeno: Tor Nov 18, 2014 9:31 pm    Naslov sporočila:   Odgovori s citatom

Ja, s kazalcem na funkcijo sem že probal, vendar ne deluje.
Koda gre nekako takole:

Koda:

typedef void (*pToFunction)(void);   //definiram kazalec na funkcijo

typedef struct struktura
{
   char *tekst;
   void *gor,*dol;
   pToFunction p; //kazalec ki kaže na funkcijo, ki se bo izvedla
} Struktura;

void drawStatus(void);      //funkcija, ki nekaj napiše na zaslon

pToFunction pF=drawStatus;   //ustvarimo kazalec tipa pToFunction, ki je v resnici samo kazalec na funkcijo

Struktura struct[]=
{                       
    {"Besedilo",  NULL,     &struct[1],    pF},  // v tabeli je več elementov, tukaj sem zapisal samo enega
};


V bistvu samo želim, da ko se premikam po "struct[]" (menu) in naletim na kazalec na funkcijo, se le-ta izvede...
Javi mi pa error: "expression must have a constant value."
Programiram v IAR EWARM.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
IzidorM
Član
Član



Pridružen-a: Sob 01 Jan 2011 17:54
Prispevkov: 107
Aktiv.: 0.66
Kraj: Lj

PrispevekObjavljeno: Sre Nov 19, 2014 12:14 am    Naslov sporočila:   Odgovori s citatom

Saj ti compiler pove kaj je narobe. Zadevo resis lahko na dva nacina:
1) Pointer na funkcijo deklariras kot const pointer na funkcijo:
const pToFunction pF=drawStatus;
2) V tabeli uporabis kar ime funkcije:
{"Besedilo", NULL, &t[1], drawStatus },

Poleg tega imas se vsaj en problem, in sicer struct je rezervirana beseda v jeziku C, tako da tole ni veljavnoo:
Struktura struct
Doticno bos moral preimenovati v nekaj drugega...

_________________
Lp, I
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
hamm
Član
Član



Pridružen-a: Sob 27 Okt 2012 21:47
Prispevkov: 216
Aktiv.: 1.55
Kraj: Mengeš

PrispevekObjavljeno: Sre Nov 19, 2014 9:25 am    Naslov sporočila:   Odgovori s citatom

Hvala za odgovor. Včeraj sem 10min po tem, ko sem objavil, že ugotovil d'oh!
Pointer na funkcijo sem pa že pred tem definiral kot const, pa ni delovalo, uporabil sem kar ime funkcije.
Zmedlo me je to, da sem že prej probaval z void kazalcem, takrat pa seveda sem uporabil ime funkcije, tu sem pa sem zgleda probal vse načine, samo tistega ne, ki deluje Brick wall

Primer je bil poenostavljen, ker je drugače kar dolga koda, besede struct seveda v resnici nimam v imenu funkcije, sem nerodno napisal.

Hvala za odgovore!

lp
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
zaz
Član
Član



Pridružen-a: Pon 06 Apr 2015 14:23
Prispevkov: 89
Aktiv.: 0.81
Kraj: Ljubljana

PrispevekObjavljeno: Pon Mar 28, 2016 2:58 pm    Naslov sporočila:   Odgovori s citatom

Pozdravljeni.
Zanima me ali bi lahko prišlo do kakšnega problema, če namesto uint8_t uporabljam char tip spremenljivke.

Uporabljam STM32F4-discovery plato z CoIDE in mi prevajalnik velikokrat javi, da uint_8 ne pozna.
Hvala za odgovor!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
tilz0R
Član
Član



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 6.24
Kraj: Črnomelj

PrispevekObjavljeno: Pon Mar 28, 2016 3:00 pm    Naslov sporočila:   Odgovori s citatom

Uporabljaš narobe.

uint8_t je pravilno. Includaj stdint.h ce imaš še vedno error.

_________________
Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3 ... , 14, 15, 16  Naslednja
Stran 15 od 16

 
Pojdi na:  
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: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group