[elektro] C - memset

elight elight at gmail.hu
Wed Feb 3 14:24:34 CET 2016


Szia

Elöljáróban,
  ennek még nem néztem utána
de GCC nél nekem is már bökte a listában a szemem

__attribute__((packed))

ez alatt pontosan mit is kellene értenem,
hogyan is működik? Vagyis mikor illik használni?

Üdv István



2016-02-03 14:19 keltezéssel, Moravcsik Szilard írta:
> 2016.02.03. 13:26 keltezéssel, uprogc . írta:
>> Sziasztok,
>>
>> ( STM32, gcc )
>>
>> Van egy strukturam, amelyben van egy 32 bites es ket 8 bites valtozo.
>> Ennek a merete 6 byte.
>>
>> Ha memset() eseten a struktura meretet sizeof(tipus)-al megadom, akkor
>> rendben van, ha viszont konstans 6 ertekkel adom meg a meretet, akkor az
>> elso byteot nem allitja be a memset :)
>>
>> Ez mi ?
>>
> Sziasztok!
>
> Érdekelt, kipróbáltam (EmBlocks bare-metal-gcc), amíg a friss kávémat
> kortyolgattam:
>
> /* A struktúrám típusa: */
> typedef struct{
>     uint32_t tag32;
>     uint8_t tag8_1;
>     uint8_t tag8_2;
> } __attribute__((packed)) TEST_t;
>
> /* A kód: */
> int main(void){
> TEST_t test;
> uint8_t len;
>
>     len = sizeof(TEST_t);	/* 6 byte lett a pakolás után */
>
>     memset(&test, 0, 6);
>
>     test.tag32  = 0x12345678;
>     test.tag8_1 = 0x55;
>     test.tag8_2 = 0xAA;
>
>     memset(&test, 0xFF, 6);
>
>     return 0;
> }
>
> Nálam rendben megcsinálta azt, amit vártam tőle. Először memset()-tel
> feltöltöttem 0-kkal, azután egyenként értékekkel, a végén meg
> memset()-tel az egészet 0xFF-fel.
>
> Persze az __attribute__((packed)) attribútum nélkül 8 byte méretű lett
> volna.
>
> Üdv:
> Szilárd
>
>
>
> ---
> A levél vírus, és rosszindulatú kód mentes, mert az avast! Antivirus védelme ellenőrizte azt.
> https://www.avast.com/antivirus
>
> -----------------------------------------
>            elektro[-flame|-etc]
>



More information about the Elektro mailing list