RE: XC8 velikost objektu při překladu.

Miroslav Draxal evik na volny.cz
Úterý Leden 28 21:50:53 CET 2025


Pánové sorry za

házeli vidle >> házely vidle

 

From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Miroslav
Draxal
Sent: Tuesday, January 28, 2025 8:53 PM
To: 'HW-news'
Subject: C: XC8 velikost objektu při překladu.

 

Zdravím ve spolek.

Pro PICaře.

Docela jsem měl problém se zjišťováním, jak veliké budou struktury v době
překladu. Pak jsem je ukládal do EEPROM. Pomocí 

#define se vybíraly různé konfigurace, dost do toho házeli vidle enum,
protože za překladu se předpokládá dvou bitová délka, následně kompilátor to
pokud lze seřízne na jeden byt. Samozřejme pokud platí pravidlo hodnoty do
255.

Takže 

//--------------------------------------------------------------------------
--------------------------

// Toto zajistí, že xc8 na to bude na enum přihlížet při překladu rovnou
jako na jeden byt.

typedef enum __attribute__((packed)) {

    leden = 1,

    unor,

    brezen,

    duben,

    kveten,

    cerven,

    cervenec,

    srpen,

    zari,

    rijen,

    listopad,

    prosinec

} Mesic_t;

 

//--------------------------------------------------------------------------
--------------------------

Totok zase vypíše jako chybové hlášení délku objektu v bytech

// <editor-fold defaultstate="collapsed" desc="Zjistí velikost objektu v
době překladu a vypíše jej jako chybové hlášení">

// uint8_t Objekt[20];

#    define OBJECT_SIZE(name) \

        typedef enum { \

            STRUCT_SIZE = sizeof(name) \

        }_Size_t; \

    _Static_assert(STRUCT_SIZE != 1, "Velikost objektu je 1 byt."); \

    _Static_assert(STRUCT_SIZE != 2, "Velikost objektu je 2 byty."); \

    _Static_assert(STRUCT_SIZE != 3, "Velikost objektu je 3 byty."); \

    _Static_assert(STRUCT_SIZE != 4, "Velikost objektu je 4 byty."); \

    _Static_assert(STRUCT_SIZE != 5, "Velikost objektu je 5 bytu."); \

    _Static_assert(STRUCT_SIZE != 6, "Velikost objektu je 6 bytu."); \

    _Static_assert(STRUCT_SIZE != 7, "Velikost objektu je 7 bytu."); \

    _Static_assert(STRUCT_SIZE != 8, "Velikost objektu je 8 bytu."); \

    _Static_assert(STRUCT_SIZE != 9, "Velikost objektu je 9 bytu."); \

    _Static_assert(STRUCT_SIZE != 10, "Velikost objektu je 10 bytu."); \

    _Static_assert(STRUCT_SIZE != 11, "Velikost objektu je 11 bytu."); \

    _Static_assert(STRUCT_SIZE != 12, "Velikost objektu je 12 bytu."); \

    _Static_assert(STRUCT_SIZE != 13, "Velikost objektu je 13 bytu."); \

    _Static_assert(STRUCT_SIZE != 14, "Velikost objektu je 14 bytu."); \

    _Static_assert(STRUCT_SIZE != 15, "Velikost objektu je 15 bytu."); \

    _Static_assert(STRUCT_SIZE != 16, "Velikost objektu je 16 bytu."); \

   _Static_assert(STRUCT_SIZE != 17, "Velikost objektu je 17 bytu."); \

    _Static_assert(STRUCT_SIZE != 18, "Velikost objektu je 18 bytu."); \

    _Static_assert(STRUCT_SIZE != 19, "Velikost objektu je 19 bytu."); \

    _Static_assert(STRUCT_SIZE != 20, "Velikost objektu je 20 bytu."); \

    _Static_assert(STRUCT_SIZE != 21, "Velikost objektu je 21 bytu."); \

    _Static_assert(STRUCT_SIZE != 22, "Velikost objektu je 22 bytu."); \

    _Static_assert(STRUCT_SIZE != 23, "Velikost objektu je 23 bytu."); \

    _Static_assert(STRUCT_SIZE != 24, "Velikost objektu je 24 bytu."); \

    _Static_assert(STRUCT_SIZE != 25, "Velikost objektu je 25 bytu."); \

    _Static_assert(STRUCT_SIZE != 26, "Velikost objektu je 26 bytu."); \

    _Static_assert(STRUCT_SIZE != 27, "Velikost objektu je 27 bytu."); \

    _Static_assert(STRUCT_SIZE != 28, "Velikost objektu je 28 bytu."); \

    _Static_assert(STRUCT_SIZE != 29, "Velikost objektu je 29 bytu."); \

    _Static_assert(STRUCT_SIZE != 30, "Velikost objektu je 30 bytu."); \

    _Static_assert(STRUCT_SIZE != 31, "Velikost objektu je 31 bytu."); \

    _Static_assert(STRUCT_SIZE != 32, "Velikost objektu je 32 bytu."); \

    _Static_assert(STRUCT_SIZE != 33, "Velikost objektu je 33 bytu."); \

    _Static_assert(STRUCT_SIZE != 34, "Velikost objektu je 34 bytu."); \

    _Static_assert(STRUCT_SIZE != 35, "Velikost objektu je 35 bytu."); \

    _Static_assert(STRUCT_SIZE != 36, "Velikost objektu je 36 bytu."); \

    _Static_assert(STRUCT_SIZE != 37, "Velikost objektu je 37 bytu."); \

    _Static_assert(STRUCT_SIZE != 38, "Velikost objektu je 38 bytu."); \

    _Static_assert(STRUCT_SIZE != 39, "Velikost objektu je 39 bytu."); \

    _Static_assert(STRUCT_SIZE != 40, "Velikost objektu je 40 bytu."); \

    _Static_assert(STRUCT_SIZE != 41, "Velikost objektu je 41 bytu."); \

    _Static_assert(STRUCT_SIZE != 42, "Velikost objektu je 42 bytu."); \

    _Static_assert(STRUCT_SIZE != 43, "Velikost objektu je 43 bytu."); \

    _Static_assert(STRUCT_SIZE != 44, "Velikost objektu je 44 bytu."); \

   _Static_assert(STRUCT_SIZE != 45, "Velikost objektu je 45 bytu."); \

    _Static_assert(STRUCT_SIZE != 46, "Velikost objektu je 46 bytu."); \

    _Static_assert(STRUCT_SIZE != 47, "Velikost objektu je 47 bytu."); \

    _Static_assert(STRUCT_SIZE != 48, "Velikost objektu je 48 bytu."); \

    _Static_assert(STRUCT_SIZE != 49, "Velikost objektu je 49 bytu."); \

    _Static_assert(STRUCT_SIZE != 50, "Velikost objektu je 50 bytu."); \

    _Static_assert(STRUCT_SIZE != 51, "Velikost objektu je 51 bytu."); \

    _Static_assert(STRUCT_SIZE != 52, "Velikost objektu je 52 bytu."); \

    _Static_assert(STRUCT_SIZE != 53, "Velikost objektu je 53 bytu."); \

    _Static_assert(STRUCT_SIZE != 54, "Velikost objektu je 54 bytu."); \

    _Static_assert(STRUCT_SIZE != 55, "Velikost objektu je 55 bytu."); \

    _Static_assert(STRUCT_SIZE != 56, "Velikost objektu je 56 bytu."); \

    _Static_assert(STRUCT_SIZE != 57, "Velikost objektu je 57 bytu."); \

    _Static_assert(STRUCT_SIZE != 58, "Velikost objektu je 58 bytu."); \

    _Static_assert(STRUCT_SIZE != 59, "Velikost objektu je 59 bytu."); \

    _Static_assert(STRUCT_SIZE != 60, "Velikost objektu je 60 bytu."); \

    _Static_assert(STRUCT_SIZE != 61, "Velikost objektu je 61 bytu."); \

    _Static_assert(STRUCT_SIZE != 62, "Velikost objektu je 62 bytu."); \

    _Static_assert(STRUCT_SIZE != 63, "Velikost objektu je 63 bytu."); \

    _Static_assert(STRUCT_SIZE != 64, "Velikost objektu je 64 bytu."); \

    _Static_assert(STRUCT_SIZE <= 64, "Velikost objektu je větší než 64
bytu!");

 

//Použití pro zjištění velikosti objektu v bytech

// OBJECT_SIZE(Objekt);

// </editor-fold>

//--------------------------------------------------------------------------
------------------------------

 

Dost mi to pomohlo v hledání chyby.

 

Míra

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20250128/4a7a7ca0/attachment.htm>


Další informace o konferenci Hw-list