Tema: Re: Ta pati duomenu struktura AVR C ir C++
Autorius: Audrys
Data: 2011-09-21 10:35:24
apie enum jau minejo, bet taip pat

#pragma pack(1)
struct .......


#pragma pack ()



"lietuvys"  wrote in message news:j5b1uv$pvl$1@trimpas.omnitel.net...

Sveiki,

turiu projektuką, kur 8 bitų AVR mikrovaldiklis turės bendrauti su PC. Yra 
dvi duomenų struktūros, kuriomis noriu apsikeisti tarp PC ir uC.
Turėjau idėją dalintis struktūrų aprašo failu (.h) ir perpumpuoti struktūrą 
po vieną baitą naudojant pointerius. Viską suprograminau ir tik tada 
pamačiau, kad struktūrų dydžiai C ir C++ skiriasi.

AVR programuoju C (gcc), o PC - Nokia Qt, C++.

Na, žinoma, AVR gcc optimizuotas 8 bitams. Ten yra tokios opcijos, 
kaip -fpack-struct bei -fshort-enums. Pabandžiau jas išjungti, dar 
pabandžiau Qt naudoti #pragma pack(1), tačiau niekaip nepasiekdavau to 
paties dydžio, tikrindamas struktūrų dydį su sizeof( ).

Dar galvojau apie union, bet vien union problemos neišsprendžia..

Ką daryti, kaip apsikeisti duomenimis? Ar teks kiekvieną kintamąjį 
priskyrinėti tam tikrai atminties (buferio masyvo) vietai?

Duomenų aprašo pavyzdys bendrame .h faile:

typedef struct
{
  enum {ab_op0, ab_op1, ab_op2, ab_op3, ab_op4, ab_op5}
    ab;

  uint8_t i, j, k;

  enum {cd_op0, cd_op1, cd_op2, cd_op3, cd_op4, cd_op5}
    cd;

uint16_t x, y, z;

} struct1_t;

Kažkur c ir cpp failuose:
struct1_t Pirma;
....
....sizeof(Pirma)...
....

Iš anksto ačiū už bet kokias mintis.

-- 

Marius
IT, elektronika, mikrokontrolerių programavimas
http://bringyourself.in/?lang=lt