Jedna lepiaca (ako spojit dva bajty do int)

tomas mainzer t.mainzer na gmail.com
Čtvrtek Leden 5 11:40:48 CET 2017


nevim jaky mate prekladac a indiana v procesoru (pripadne je treba prehodit
b[0],b[1]) ale  lze i takto:


typedef struct tagintb {
union {
 struct {
   int16_t i;   //2B int
  };
  struct {
    uint8_t b[2]; //1+1B array
  };
  };
} intb;
..

intb b;
b.b[0]=Wire.read();
b.b[1]=Wire.read();
return(b.i);



2017-01-05 11:09 GMT+01:00 balu <balu na k-net.fr>:

> Ked sa uz o tom lepeni ve sroubarne bavime, mal by som jednu
> zaciatocnicku...
>
> MCP3428 na ktory som sa pytal funguje vyborne, teraz by som rad dalej
> spracoval data... Po I2C zbernici dostavam data z AD prevodnika, idu po
> sebe dva bajty, najprv horny a potom spodny. Vystup ma byt signed 16-bitovy
> integer.
>
> Otazka je ako ich spravne skombinovat do jedneho intu? V tom hnusnom
> prostredi pre ten hnusny procesor ma int dva bajty, ziadnu portovatelnost
> na ine platformy nepotrebujem. Mozeme skusit dve riesenia, jedno co bude
> fungovat v tomto konkretnom pripade a jedno genericke, uplne korektne. Rad
> by som sa naucil ako nato...
>
> dakujem,
> b.
>
>
>
>  // read channel value
>  Wire.requestFrom(0x68, 2);    // request 2 bytes from slave device #68
>  while (Wire.available()) { // slave may send less than requested
>    byte bhigh = Wire.read();
>    byte blow = Wire.read();
>    return( ((unsigned int)bhigh << 8) + blow ); <<<--- tutoka
>    }
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20170105/4a82052e/attachment.html>


Další informace o konferenci Hw-list