[elektro] C - memset
Moravcsik Szilard
levlista.mszilard at gmail.com
Wed Feb 3 14:19:40 CET 2016
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
More information about the Elektro
mailing list