Fwd: STM CUBE - zkusenosti

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


Zdravím,
děkuji. Ten překladač již taky nemám, jen si na to vzpomínám. Nicméně mi tam to volatile v definici těch adres za periferie v STM knihovnách chybí.
On to někdo použije a je z toho chyba.


U maple jsem se díval na obecné metody zápisu čtení z GPIO a zpět. A našel poznámku viz níže.
Nejspíš v té verzi asi chybí taky volatile.(Nevím jak aktuální.) Je si na to dobré dávat pozor.

https://github.com/leaflabs/maple-bootloader/blob/master/hardware.h


/* todo: there must be some major misunderstanding in how we access
    regs. The direct access approach (GET_REG) causes the usb init to
    fail upon trying to activate RCC_APB1 |= 0x00800000. However, using
    the struct approach from ST, it works fine...temporarily switching
    to that approach */
typedef struct {
     vu32 CR;
     vu32 CFGR;
     vu32 CIR;
     vu32 APB2RSTR;
     vu32 APB1RSTR;
     vu32 AHBENR;
     vu32 APB2ENR;
     vu32 APB1ENR;
     vu32 BDCR;
     vu32 CSR;
} RCC_RegStruct;
#define pRCC ((RCC_RegStruct *) RCC)


Jirka


Dne 4. 10. 2015 v 20:23 Ales Povalac napsal(a):
> Dobrý den,
>
> toto je bug překladače, který mě před pár roky také potrápil. Je
> reportovaný na http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45052 .
> Týká se verze GCC 4.5.1, použité v Sourcery G++ Lite 2010.09-51 a
> Atollic Studiu 2.1.0. Novější verze GCC už potíže nemají.
>
> Zdravím
> A. Povalač
>
>
> Dne 4. října 2015 20:16 Jiří Nesvačil <nesvacil na posys.eu> napsal(a):
>> Zdravim,
>> konkretne kod pro test, zda flash je resetovana (je i v cube) vola interni
>> metodu(viz nize) pro zjisteni stavu banky a zavola se jen jednou. Prekladac,
>> vse co je v jednom *.c souboru optimalizuje. Pomohlo az slovo volatile pred
>> FLASH.
>>
>> gcc version 4.5.1 (Sourcery G++ Lite 2010.09-51)
>>
>> Zkuste si dat slovo volatile pred tyhle zakladni odkazy v *.h souboru a
>> uvidite jestli se Vam zmeni velikost prekladu, atp. . Nebo ten kdo ovlada
>> asm muze i tam zkouknout.
>>
>>
>> FLASH_Status FLASH_GetBank1Status(void)
>> {
>>    FLASH_Status flashstatus = FLASH_COMPLETE;
>>
>>    if((FLASH->SR & FLASH_FLAG_BANK1_BSY) == FLASH_FLAG_BSY)
>>    {
>>      flashstatus = FLASH_BUSY;
>>    }
>>    else
>>    {
>>      if((FLASH->SR & FLASH_FLAG_BANK1_PGERR) != 0)
>>      {
>>        flashstatus = FLASH_ERROR_PG;
>>      }
>>      else
>>      {
>>        if((FLASH->SR & FLASH_FLAG_BANK1_WRPRTERR) != 0 )
>>        {
>>          flashstatus = FLASH_ERROR_WRP;
>>        }
>>        else
>>        {
>>          flashstatus = FLASH_COMPLETE;
>>        }
>>      }
>>    }
>>    /* Return the Flash Status */
>>    return flashstatus;
>> }
>>
>>
>> Dne 4. 10. 2015 v 19:56 Jan Waclawek napsal(a):
>>
>>> 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
>>>
> _______________________________________________
> 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