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 

Imam uint32_t - rabim uint8_t 2 byta

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programiranje embedded sistemov
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
twom
Član
Član



Pridružen-a: Ned 26 Okt 2003 0:37
Prispevkov: 986
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Tor Sep 27, 2011 7:58 am    Naslov sporočila:  Imam uint32_t - rabim uint8_t 2 byta Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Član
Član



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

PrispevekObjavljeno: Tor Sep 27, 2011 8:15 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3387
Aktiv.: 16.00

PrispevekObjavljeno: Tor Sep 27, 2011 9:08 am    Naslov sporočila:   Odgovori s citatom

Pa še to: 32 bitno cifro boš težko spravil v dve 8 bitni cifri.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
matjazkariz
Član
Član



Pridružen-a: Sre 03 Nov 2004 18:09
Prispevkov: 1026
Aktiv.: 4.33

PrispevekObjavljeno: Tor Sep 27, 2011 9:57 am    Naslov sporočila:   Odgovori s citatom

Ali pa s shiftanjem:

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) ;
}

http://stackoverflow.com/questions/4629891/how-to-convert-from-integer-to-unsigned-char-in-c-given-integers-larger-than-256

_________________
LP, Matjaž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



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

PrispevekObjavljeno: Tor Sep 27, 2011 9:42 pm    Naslov sporočila:   Odgovori s citatom

Jaz tudi delam s shiftanjem. Čeprav bi šlo tudi s pointerji.
_________________
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
twom
Član
Član



Pridružen-a: Ned 26 Okt 2003 0:37
Prispevkov: 986
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Čet Sep 29, 2011 10:08 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programiranje embedded sistemov Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
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: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group