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