[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