Tak nějak jsem psaním kódu narazil na zajímavé varování, teda pro mě zajímavé a rozhodl jsem se zjistit více.
Takže, mám tuto funkci:
- Kód: Vybrať všetko
FLASH_write_n_data_32
Která zapisuje data do interní FLASH u STM32.
- data - pole dat, které chci zapsat
- adresa odkud chci zapisovat
- nybytes - kolik 32bit hodnot chci zapsat.
Funkce funguje pěkně, ale.....
Překladač mě nenechá na pokoji.
cannot optimize loop, the loop counter may overflow [-Wunsafe-loop-optimizations]
Překlad jsem si vyložil takto:
Nemohu optimalizovat smyčku, smyčka může přetéct.
A teď přijde to zajímaví. Jak to udělat tak, aby to nastat nemohlo? Díky moc za rady.
- Kód: Vybrať všetko
uint8_t FLASH_write_n_data_32(uint32_t *data, uint32_t start_address, uint32_t nbytest)
{
uint32_t address = start_address;
uint32_t stop_addr = nbytest*4 + address;
while(address < stop_addr )
{
FLASH_ProgramWord(address, *data++);
address = address + 4;
}
return 0;
}
PS: Pro všechny rýpaly, to že to funguje neznamená, že se varováním nemusím zabývat. A ano zkoušel jsem mnoho věcí, ale nic mi nepomohlo. A cesta na google byla moje první, ale nepomohlo mi to.