c-kod

Fanda hudaklan na volny.cz
Pátek Únor 10 09:44:45 CET 2017


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
>



Další informace o konferenci Hw-list