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
- 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.
Překlad jsem si vyložil takto:cannot optimize loop, the loop counter may overflow [-Wunsafe-loop-optimizations]
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;
}