Tema: Ta pati duomenu struktura AVR C ir C++
Autorius: lietuvys
Data: 2011-09-21 00:52:31
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