Tema: Re: Ta pati duomenu struktura AVR C ir C++
Autorius: lietuvys
Data: 2011-09-21 17:01:10
Ačiū visiems,

aš naudoju uint8_t, int16_t ir panašius tipus. Kažkaip vengiu neapibrėžtų char, long, int tipų.

Perdariau struktūrą, kad nebūtų enum, naudoju pragma pack(1) ir dabar struktūrų dydžiai sutampa, perdavimas veikia. Bent pirmas kintamasis persiduoda tvarkingai. Reikės dar patikrinti ar visi duomenys sutampa.

.h faile pragma pack atrodo taip:
----------------------------------------------
#pragma pack(push)  /* push current alignment to stack */
#pragma pack(1)     /* set alignment to 1 byte boundary */

// kintamuju aprasai..

#pragma pack(pop)   /* restore original alignment from stack */
----------------------------------------------

Dabar mąstau kaip su Excel ar pan. generuoti kodą, kur būtų ir kintamųjų (savybių) pavadinimai ir jų galimos reikšmės (žinoma, ir visi kintamųjų vardai, enum vardai iš to paties generatoriaus), kad užpildyt GUI su editbox'ais ir combobox'ais.

-- 

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


"lietuvys" <lietuvys@takas.lt> 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
> 
>