Fwd: STM CUBE - zkusenosti

Jan Waclawek konfera na efton.sk
Neděle Říjen 4 19:56:43 CEST 2015


No, prisne vzate podla normy, pretypovanie konstanty na pointer je
implementation defined a moze skoncit vselijako, a to najma zle (C99
6.3.2.3#5). Dalej, co znamena volatile, je tiez implementation defined
(C99 6.7.3#6). A ano, cital som Regehrovo pojednanie na danu temu
https://www.cs.utah.edu/~regehr/papers/emsoft08-preprint.pdf .

Na druhej strane, oboje - aj pretypovanie konstanty na struct, aj
oznacovanie poloziek structu ako volatile - je dnes zauzivanym standardom,
takze ma dost prekvapuje, ze sa najde nearchaicky prekladac, ktory toto
nezvlada.

Mozete byt prosim konkretny vo verzii a v okolnostiach, pripadne dat
konkretny co najjednoduchsi priklad, ktory by som dokazal zreprodukovat?

Dakujem

wek



----- Original Message ---------------
>To mozna jo, ale moc jim to nepomuze, kdyz to nepouziji viz Cube z includu vytazene:
>
>#define PERIPH_BASE           ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */
>#define APB1PERIPH_BASE       PERIPH_BASE
>#define AHBPERIPH_BASE        (PERIPH_BASE + 0x20000)
>#define FLASH_R_BASE          (AHBPERIPH_BASE + 0x2000) /*!< Flash registers base address */
>#define FLASH_R_BASE          (AHBPERIPH_BASE + 0x2000) /*!< Flash registers base address */
>#define FLASH               ((FLASH_TypeDef *) FLASH_R_BASE)
>
>
>Nebo, kdyz to precastuji bez volatile, jak je ta ktera verze compileru chytra ?
>
>
>Jirka
>
>
>Dne 4. 10. 2015 v 19:19 Jan Waclawek napsal(a):
>> Nemate pravdu, pan kolega.
>>
>> Aby som bol konkretny, tak napr. pre STM32F4xx je v stm32f4xx.h
>>
>> typedef struct
>> {
>>    __IO uint32_t ACR;      /*!< FLASH access control register,   Address
>> offset: 0x00 */
>>    __IO uint32_t KEYR;     /*!< FLASH key register,              Address
>> offset: 0x04 */
>>    __IO uint32_t OPTKEYR;  /*!< FLASH option key register,       Address
>> offset: 0x08 */
>>    __IO uint32_t SR;       /*!< FLASH status register,           Address
>> offset: 0x0C */
>>    __IO uint32_t CR;       /*!< FLASH control register,          Address
>> offset: 0x10 */
>>    __IO uint32_t OPTCR;    /*!< FLASH option control register ,  Address
>> offset: 0x14 */
>>    __IO uint32_t OPTCR1;   /*!< FLASH option control register 1, Address
>> offset: 0x18 */
>> } FLASH_TypeDef;
>>
>> __IO je predpisane priamo ARMom, nachadza sa (pre tento pripad) v
>> core_cm4.h ktory je do stm32f4xx.h includnuty, a je definovany ako
>>
>> #define     __IO    volatile             /*!< Defines 'read / write'
>> permissions              */
>>
>> wek
>>
>>
>>
>>> Aby to bylo konkretni, tak napr toto je ve vsech knihovnach STM
>>>
>>> // BUG
>>> //#define FLASH               ((FLASH_TypeDef *) FLASH_R_BASE)
>>> #define FLASH               ((FLASH_TypeDef volatile *) FLASH_R_BASE)
>>>
>>> Pokud se na tu periferii odkazete v kodu, budete cekat v cyklu, tak se nedockate (nema volatile). Je to odkaz do pameti a ten compiler precte jen jednou. Podobne na to narazi i jini, ale nevi proc jim to nejde.
>>>
>>> Jirka
>>>
>>>
>>> Dne 4. 10. 2015 v 10:16 Jiøí Nesvaèil napsal(a):
>>>> Kdyz vyvojari STM se nenaucili klicove slovo volatile. Pote ty knihovny s ruznou optimalizaci prekladu, ci ruznou verzi GCC chodi za roh. Je to bohuzel ve vsech knihovnach. Pokud Vam neco nejde, tak musite napsat sami.
>>>> Napriklad zapis do FLASH, sice je v include precastovani, ale to nema priznak volatile. Protoze odkazy na porty jsou jako odkazy do pameti, tak to optimalizator vezme a i pres funkce v jednom *.c souboru zoptimalizuje na jedno cteni a cekani
>>>> nechodi. Bohuzel to je vsude. V CUBE se to snazili predelat definici _IO, ale to moc nepomohlo, staci volatile.
>>>>
>>>> Jirka
>>>>
>>>>
>>>> Dne 3. 10. 2015 v 1:03 Jan Waclawek napsal(a):
>>>>>> Jdu spat a zitra nevim jestli to spis zahodim a vratim se k SPL nebo
>>>>>> jeste neco zkusim...
>>>>> Cesta spat je nemozna, musite prejst na LL :-)
>>>>> http://www.mikrozone.sk/news.php?extend.1042.4
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list at list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>_______________________________________________
>HW-list mailing list  -  sponsored by www.HW.cz
>Hw-list at list.hw.cz
>http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list