Fwd: STM CUBE - zkusenosti

Jiří Nesvačil nesvacil na posys.eu
Neděle Říjen 4 19:36:21 CEST 2015


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 na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list