[elektro] CCS->XC32
hg12345
hg12345 at freemail.hu
Tue Mar 12 08:25:16 CET 2019
Hi,
a bites struktura definiális a C-ben így néz ki:
include <stdint.h>
struct pelda{<!-- -->
uint8_t Valtozó1
struct {<!-- -->
unsigned bit0: 1; // lehet előjeles vagy előjel nélküli is....
unsigned bit1: 1;
unsigned bit23:2;
signed bit4567:4;
} bitek;
} varpelda;
érdemes a biteszelet definiót egy union-ba foglalni, mert akkor a a teljes értékre is tudsz hivatkozni.
A bitszelet struct-nak nem szükséges nevet adni, ha a fordító elfogadja név nélküli struct- definicókat. (#pragma unname vagy valami hasonlóra kell keresni)
A bitszelet struct méret korlátozása általában a fordító adja meg, sokszor a uC regiszterméretével azonos, vagy az int változó méretével.
Azt nem tudom, hogy C99 vagy melyi szabvány szerint része a C-nek, de ettől biztos működik.
Nem igazán érdemes egzotikus typedef declarációkat használni, ha nem szükséges, mióta a stdint tartalmazza a intXX_t változókat a uC fejlesztésekhez....
üdv
-------- Eredeti levél --------
Feladó: Ekati Bt. < ekati at kabelszat2002.hu (Link -> mailto:ekati at kabelszat2002.hu) >
Dátum: 2019 március 11 21:49:47
Tárgy: [elektro] CCS->XC32
Címzett: elektro at tesla.hu (Link -> mailto:elektro at tesla.hu)
CCS-ben egy stuktúra deklarálás
struct Pelda
{<!-- -->
uint8 Valtozo1;
int1 Valtozo2;
}
ugyan ez XC32-ben
struct Pelda
{<!-- -->
uint8_t Valtozo1;
uint8_t Valtozo2:1;
}
A Valtozo1 egy 1 byteos, a Valtozo2 egy 1 bites változó.
A Valtozo1-et elintézem egy
#define int8 int8_t
macro definiálással de a Valtozo2-t nem tudom hogyan lehetne megoldani,
hogy ne kelljen az összes CCS forrást átnézni és legfőképp átírni.
Definiálhatnék egy
#define int1 uint8_t
makrót is de akkor ugye minden egyes bit egy teljes byte-ban lesz tárolva.
Küzdött már valaki hasonló problémával?
NagyZé
-----------------------------------------
elektro[-flame|-etc]
More information about the Elektro
mailing list