<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=iso-8859-2"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Text bubliny Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.TextbublinyChar
        {mso-style-name:"Text bubliny Char";
        mso-style-priority:99;
        mso-style-link:"Text bubliny";
        font-family:"Tahoma","sans-serif";}
span.StylE-mailovZprvy19
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.StylE-mailovZprvy20
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=CS link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='color:#1F497D'>Pánové sorry za<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>házeli vidle >> </span>házely vidle<span style='color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> Hw-list [mailto:hw-list-bounces@list.hw.cz] <b>On Behalf Of </b>Miroslav Draxal<br><b>Sent:</b> Tuesday, January 28, 2025 8:53 PM<br><b>To:</b> 'HW-news'<br><b>Subject:</b> C: XC8 velikost objektu při překladu.<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Zdravím ve spolek.<o:p></o:p></p><p class=MsoNormal>Pro PICaře.<o:p></o:p></p><p class=MsoNormal>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í <o:p></o:p></p><p class=MsoNormal>#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.<o:p></o:p></p><p class=MsoNormal>Takže <o:p></o:p></p><p class=MsoNormal>//----------------------------------------------------------------------------------------------------<o:p></o:p></p><p class=MsoNormal>// Toto zajistí, že xc8 na to bude na enum přihlížet při překladu rovnou jako na jeden byt.<o:p></o:p></p><p class=MsoNormal>typedef enum __attribute__((packed)) {<o:p></o:p></p><p class=MsoNormal>    leden = 1,<o:p></o:p></p><p class=MsoNormal>    unor,<o:p></o:p></p><p class=MsoNormal>    brezen,<o:p></o:p></p><p class=MsoNormal>    duben,<o:p></o:p></p><p class=MsoNormal>    kveten,<o:p></o:p></p><p class=MsoNormal>    cerven,<o:p></o:p></p><p class=MsoNormal>    cervenec,<o:p></o:p></p><p class=MsoNormal>    srpen,<o:p></o:p></p><p class=MsoNormal>    zari,<o:p></o:p></p><p class=MsoNormal>    rijen,<o:p></o:p></p><p class=MsoNormal>    listopad,<o:p></o:p></p><p class=MsoNormal>    prosinec<o:p></o:p></p><p class=MsoNormal>} Mesic_t;<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>//----------------------------------------------------------------------------------------------------<o:p></o:p></p><p class=MsoNormal>Totok zase vypíše jako chybové hlášení délku objektu v bytech<o:p></o:p></p><p class=MsoNormal>// <editor-fold defaultstate="collapsed" desc="Zjistí velikost objektu v době překladu a vypíše jej jako chybové hlášení"><o:p></o:p></p><p class=MsoNormal>// uint8_t Objekt[20];<o:p></o:p></p><p class=MsoNormal>#    define OBJECT_SIZE(name) \<o:p></o:p></p><p class=MsoNormal>        typedef enum { \<o:p></o:p></p><p class=MsoNormal>            STRUCT_SIZE = sizeof(name) \<o:p></o:p></p><p class=MsoNormal>        }_Size_t; \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 1, "Velikost objektu je 1 byt."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 2, "Velikost objektu je 2 byty."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 3, "Velikost objektu je 3 byty."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 4, "Velikost objektu je 4 byty."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 5, "Velikost objektu je 5 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 6, "Velikost objektu je 6 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 7, "Velikost objektu je 7 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 8, "Velikost objektu je 8 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 9, "Velikost objektu je 9 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 10, "Velikost objektu je 10 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 11, "Velikost objektu je 11 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 12, "Velikost objektu je 12 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 13, "Velikost objektu je 13 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 14, "Velikost objektu je 14 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 15, "Velikost objektu je 15 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 16, "Velikost objektu je 16 bytu."); \<o:p></o:p></p><p class=MsoNormal>   _Static_assert(STRUCT_SIZE != 17, "Velikost objektu je 17 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 18, "Velikost objektu je 18 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 19, "Velikost objektu je 19 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 20, "Velikost objektu je 20 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 21, "Velikost objektu je 21 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 22, "Velikost objektu je 22 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 23, "Velikost objektu je 23 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 24, "Velikost objektu je 24 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 25, "Velikost objektu je 25 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 26, "Velikost objektu je 26 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 27, "Velikost objektu je 27 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 28, "Velikost objektu je 28 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 29, "Velikost objektu je 29 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 30, "Velikost objektu je 30 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 31, "Velikost objektu je 31 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 32, "Velikost objektu je 32 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 33, "Velikost objektu je 33 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 34, "Velikost objektu je 34 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 35, "Velikost objektu je 35 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 36, "Velikost objektu je 36 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 37, "Velikost objektu je 37 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 38, "Velikost objektu je 38 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 39, "Velikost objektu je 39 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 40, "Velikost objektu je 40 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 41, "Velikost objektu je 41 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 42, "Velikost objektu je 42 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 43, "Velikost objektu je 43 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 44, "Velikost objektu je 44 bytu."); \<o:p></o:p></p><p class=MsoNormal>   _Static_assert(STRUCT_SIZE != 45, "Velikost objektu je 45 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 46, "Velikost objektu je 46 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 47, "Velikost objektu je 47 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 48, "Velikost objektu je 48 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 49, "Velikost objektu je 49 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 50, "Velikost objektu je 50 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 51, "Velikost objektu je 51 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 52, "Velikost objektu je 52 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 53, "Velikost objektu je 53 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 54, "Velikost objektu je 54 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 55, "Velikost objektu je 55 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 56, "Velikost objektu je 56 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 57, "Velikost objektu je 57 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 58, "Velikost objektu je 58 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 59, "Velikost objektu je 59 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 60, "Velikost objektu je 60 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 61, "Velikost objektu je 61 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 62, "Velikost objektu je 62 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 63, "Velikost objektu je 63 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE != 64, "Velikost objektu je 64 bytu."); \<o:p></o:p></p><p class=MsoNormal>    _Static_assert(STRUCT_SIZE <= 64, "Velikost objektu je větší než 64 bytu!");<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>//Použití pro zjištění velikosti objektu v bytech<o:p></o:p></p><p class=MsoNormal>// OBJECT_SIZE(Objekt);<o:p></o:p></p><p class=MsoNormal>// </editor-fold><o:p></o:p></p><p class=MsoNormal>//--------------------------------------------------------------------------------------------------------<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Dost mi to pomohlo v hledání chyby.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Míra<o:p></o:p></p></div></body></html>