c-kod

spam na nagano.cz spam na nagano.cz
Pátek Únor 10 10:15:04 CET 2017


Dvojita negace. Z nuly bude nula, z ostatnich hodnot jednicka.
L.

--
Stručně naklofáno na mobilu

-----Original Message-----
From: Fanda <hudaklan na volny.cz>
To: HW-news <hw-list na list.hw.cz>
Sent: pá, 10 úno 2017 9:45
Subject: Re[2]: c-kod

Děkuji za vysvělení.
Jestli tomu rozumím, jde v podstatě jen o to otestovat zda se mcfg vejde 
do stránky FLASH_PAGE_SIZE?
Ještě, co znamenají ty dva vykřičníky u (!!(e)).

Děkuji.
HUDA


------ Původní zpráva ------
Od: "Tomáš Hamouz" <hamouz na divesoft.cz>
Komu: "HW-news" <hw-list na list.hw.cz>
Odesláno: 10.2.2017 8:59:14
Předmět: Re: c-kod

>To je záplata na preprocesor.
>
>Musíte si uvědomit, jak preprocesor funguje. Prochází text a když
>narazí na makro, příslušným způsobem ho nahradí. To opakuje tak
>dlouho, dokud je co nahrazovat. Přitom se nahrazuje v pořadí od
>začátku do konce (wek by jistě dodal odkaz do normy).
>
>Jak bude vypadat text při preprocesingu:
>
>Původní text
>
>   ct_assert(sizeof(mcfg) < CONFIG_SIZE);
>
>Po 1. průchodu
>
>   enum { ASSERT_CONCAT(assert_line_, __LINE__) = 1/(!!(sizeof(mcfg) <  
>(FLASH_PAGE_SIZE * 2)
>
>Po 2. průchodu
>
>   enum { ASSERT_CONCAT_(assert_line_, 25) = 1/(!!(sizeof(mcfg) <  
>(((uint16_t)0x400) * 2))) };
>
>Po 3. průchodu
>
>   enum {assert_line_25 = 1/(!!(sizeof(mcfg) <   (((uint16_t)0x400) * 
>2))) };
>
>
>Při kompilaci se vyhodnotí poslední výraz a pokud podmínka nebude
>splněna, překladač vám vynadá že dělíte nulou.
>
>
>Pokud by ASSERT_CONCAT bylo definované jednodušeji, po 2. průchodu by
>vznikla řádka
>
>   enum {assert_line___LINE__ = 1/(!!(sizeof(mcfg) <   
>(((uint16_t)0x400) * 2))) };
>
>Což pravděpodobně nebylo záměrem.
>
>
>Tomáš
>
>
>
>>  Dobrý den,
>>  pro inspiraci a poučení se snažím projít program (BaseFlight)
>>  a není mi jasné, co dělá tato část.
>
>>  #define ASSERT_CONCAT_(a, b) a##b
>>  #define ASSERT_CONCAT(a, b) ASSERT_CONCAT_(a, b)
>>  #define ct_assert(e) enum { ASSERT_CONCAT(assert_line_, __LINE__) =
>>  1/(!!(e)) }
>
>>  #define FLASH_PAGE_SIZE                 ((uint16_t)0x400)
>>  #define CONFIG_SIZE                     (FLASH_PAGE_SIZE * 2)
>
>>  void initEEPROM(void)
>>  {
>>    ct_assert(sizeof(mcfg) < CONFIG_SIZE);         //! make sure (at
>>  compile time) that config struct doesn't overflow allocated flash 
>>pages
>>  }
>
>>  Jde hlavně o první 3 řádky.
>>  Díky za vysvětlení.
>>  HUDA
>
>>  _______________________________________________
>>  HW-list mailing list  -  sponsored by www.HW.cz
>>  Hw-list na list.hw.cz
>>  http://list.hw.cz/mailman/listinfo/hw-list
>
>
>_______________________________________________
>HW-list mailing list  -  sponsored by www.HW.cz
>Hw-list na list.hw.cz
>http://list.hw.cz/mailman/listinfo/hw-list
>

_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20170210/4abb0ec7/attachment.html>


Další informace o konferenci Hw-list