|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Sigi Član
Pridružen-a: Čet 31 Jul 2014 11:42 Prispevkov: 199 Aktiv.: 1.68 Kraj: Kamnik
|
Objavljeno: Pet Avg 08, 2014 8:36 am Naslov sporočila: |
|
|
Andrej, hvala za linke.
Na žalost so to optimizacije za float .
lp |
|
Nazaj na vrh |
|
|
. Neznanec
Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Tor Sep 30, 2014 7:57 pm Naslov sporočila: #define in več parametrov |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
|
tilz0R Član
Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 6.20 Kraj: Črnomelj
|
Objavljeno: Tor Sep 30, 2014 8:00 pm Naslov sporočila: |
|
|
Mogoče tako?
Koda: |
#define LOG(fmt, ...) fprintf(stderr,fmt, __VA_ARGS__);
|
_________________ Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net |
|
Nazaj na vrh |
|
|
. Neznanec
Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Tor Sep 30, 2014 8:08 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
|
MvE Član
Pridružen-a: Ned 04 Jan 2009 12:24 Prispevkov: 146 Aktiv.: 0.78 Kraj: MB
|
Objavljeno: Sob Nov 15, 2014 2:00 am Naslov sporočila: |
|
|
Vprašanje za poznavalce C-ja 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 |
|
|
gumby Član
Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 19.66
|
Objavljeno: Sob Nov 15, 2014 10:59 am Naslov sporočila: |
|
|
Narediš tabelo pointerjev na port registre in pine? _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
|
aly Član
Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 42.20 Kraj: Kranj - struževo
|
Objavljeno: Sob Nov 15, 2014 12:49 pm Naslov sporočila: |
|
|
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 |
|
Nazaj na vrh |
|
|
. Član
Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 75264.18
|
Objavljeno: Sob Nov 15, 2014 1:32 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
|
hamm Član
Pridružen-a: Sob 27 Okt 2012 21:47 Prispevkov: 216 Aktiv.: 1.54 Kraj: Mengeš
|
Objavljeno: Ned Nov 16, 2014 12:16 am Naslov sporočila: |
|
|
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... Sem že probaval s kazalcem na funkcijo vendar ne deluje, oz. jaz nekaj ne delam prav... |
|
Nazaj na vrh |
|
|
int47 Član
Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2066 Aktiv.: 9.27 Kraj: Ljubljana
|
Objavljeno: Ned Nov 16, 2014 9:40 am Naslov sporočila: |
|
|
Poglej, če ti tole kaj pomaga. |
|
Nazaj na vrh |
|
|
hamm Član
Pridružen-a: Sob 27 Okt 2012 21:47 Prispevkov: 216 Aktiv.: 1.54 Kraj: Mengeš
|
Objavljeno: Tor Nov 18, 2014 9:31 pm Naslov sporočila: |
|
|
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 |
|
|
IzidorM Član
Pridružen-a: Sob 01 Jan 2011 17:54 Prispevkov: 107 Aktiv.: 0.66 Kraj: Lj
|
Objavljeno: Sre Nov 19, 2014 12:14 am Naslov sporočila: |
|
|
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 |
|
|
hamm Član
Pridružen-a: Sob 27 Okt 2012 21:47 Prispevkov: 216 Aktiv.: 1.54 Kraj: Mengeš
|
Objavljeno: Sre Nov 19, 2014 9:25 am Naslov sporočila: |
|
|
Hvala za odgovor. Včeraj sem 10min po tem, ko sem objavil, že ugotovil
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
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 |
|
|
zaz Član
Pridružen-a: Pon 06 Apr 2015 14:23 Prispevkov: 89 Aktiv.: 0.81 Kraj: Ljubljana
|
Objavljeno: Pon Mar 28, 2016 2:58 pm Naslov sporočila: |
|
|
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 |
|
|
tilz0R Član
Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 6.20 Kraj: Črnomelj
|
Objavljeno: Pon Mar 28, 2016 3:00 pm Naslov sporočila: |
|
|
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 |
|
|
|
|
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: 73 dni
Powered by phpBB © 2001, 2005 phpBB Group
|