[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