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


Pridružen-a: Ned 26 Okt 2003 0:37 Prispevkov: 986 Aktiv.: 4.16 Kraj: Ljubljana
|
Objavljeno: Tor Sep 27, 2011 7:58 am Naslov sporočila: Imam uint32_t - rabim uint8_t 2 byta |
|
|
LPCXpresso IDE, C, LPC1769, 24LC256 na I2C.
A obstaja kakšen type cast, da dobim dve 8 bitni vrednosti (oziroma več) iz ene 32 bitne?
Lep pozdrav,
Peter |
|
Nazaj na vrh |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 70829.41
|
Objavljeno: Tor Sep 27, 2011 8:15 am Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
lojzek Član



Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3387 Aktiv.: 16.00
|
Objavljeno: Tor Sep 27, 2011 9:08 am Naslov sporočila: |
|
|
Pa še to: 32 bitno cifro boš težko spravil v dve 8 bitni cifri. |
|
Nazaj na vrh |
|
 |
matjazkariz Član


Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.33
|
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Tor Sep 27, 2011 9:42 pm Naslov sporočila: |
|
|
Jaz tudi delam s shiftanjem. Čeprav bi šlo tudi s pointerji. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
twom Član


Pridružen-a: Ned 26 Okt 2003 0:37 Prispevkov: 986 Aktiv.: 4.16 Kraj: Ljubljana
|
Objavljeno: Čet Sep 29, 2011 10:08 am Naslov sporočila: |
|
|
Uporabil sem shiftanje, kot ga je predlagal matjazkariz,
ker je uporabno za naslavlanje I2C EEPROM-a (most significant address byte first)
Koda: |
void pack32(uint32_t val, uint8_t *dest)
{
dest[0] = (val & 0xff000000) >> 24;
dest[1] = (val & 0x00ff0000) >> 16;
dest[2] = (val & 0x0000ff00) >> 8;
dest[3] = (val & 0x000000ff);
} |
najbolj pa se mi dopade
Koda: |
void eeprom(uint8_t *buf)
{
}
uint32_t offset;
eeprom((uint8_t *)&offset);
rezultat:
offset = 0x87654321;
buf[3] vsebuje 87
buf[2] 65
buf[1] 43
buf[0] 21 |
lojzek je napisal/a: |
Pa še to: 32 bitno cifro boš težko spravil v dve 8 bitni cifri. |
To vem,
ampak rabim samo 16 bitno naslavlanje.
Nisem nek C guru, ampak
Koda: |
int32_t tmp;
sscanf(cmd, "eeprom %d\r", &tmp); |
lahko tudi
Koda: |
int tmp;
sscanf(cmd, "eeprom %d\r", &tmp); |
pravilno popolni tmp spremenljivko,
dočim ostale def ((u)int8(16)_t) občasno vrnejo nepričakovane rezultate.
Lp,
Peter |
|
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: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|