<html><body>Jen palba od boku ... je kód v RAM nebo flash ? zksil bych ho dát do RAM ...<br/><br/>F.<br/><p>---------- Původní zpráva ----------<br/>Od: Miroslav Mraz &lt;mraz@seznam.cz><br/>Datum: 22. 9. 2013<br/>Předmět: Re: STM32F051 FLASH_ErasePage problem.</p><br/><blockquote>Po delší době - nikdo nic ?<br/>Problém jsem sice víceméně úspěšně obešel, ale pořád mě to tak nějak<br/>vadí. Sice chápu, že může být chybka v překladači, v knihovnách, bordel<br/>ve vektorech a co já vím co všechno, ale nemůžu to najít.<br/><br/>Mrazík<br/><br/>Miroslav Mraz píše v Út 17. 09. 2013 v 18:37 +0200:<br/>> Zdravím,<br/>> objevil jsem další záhadu, snad se najde nějaká dobrá duše, která pomůže <br/>> objasnit jí. Pro představu kousek kódu v main:<br/>> FLASH_Status fs = 0;<br/>> uprintf("begin program %d\r\n", simEeRead());<br/>> while (1) {<br/>> __WFI();<br/>> if (!gblUsart.flag) continue;<br/>> uprintf("pass %d\r\n", gFlashIndex);<br/>> FLASH_Unlock();<br/>> if (gblUsart.flag &amp; 1) {<br/>> gFlashIndex = 0;<br/>> FLASH_ClearFlag (FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPERR);<br/>> uprintf("enter to erase 0x%x\r\n", (uint32_t) gBeginAddr);<br/>> Delay(100); // ms<br/>> fs = FLASH_ErasePage ((uint32_t) gBeginAddr);<br/>> uprintf("erase: %d\r\n", fs);<br/>> Delay(100);<br/>> }<br/>> if (gblUsart.flag &amp; 2) {<br/>> fs = FLASH_ProgramWord ((uint32_t) gBeginAddr + 4*gFlashIndex, gFlashIndex);<br/>> uprintf("write: %d\r\n", fs);<br/>> }<br/>> gFlashIndex++;<br/>> gblUsart.flag = 0;<br/>> FLASH_Lock();<br/>> }<br/>> Volatilní proměnná gblUsart.flag se nastavuje v přerušení od usartu <br/>> (podle přijatého znaku), uprintf je neblokovaný (tzn. nečeká na <br/>> dokončení) výpis na usart v přerušení. Idea je taková, že budu do flash <br/>> zapisovat uint32 parametr (zde jen test), vždy na první volné místo <br/>> (0xFFFFFFFF) na stránce a pokud jí zaplním, tak jí smažu a začnu znovu.<br/>> Zápis není problém. Mazání ano. Pokud vynechám to Delay(100) před <br/>> FLASH_ErasePage, stránka se sice smaže, ale program zůstává viset (podle <br/>> openocd, kterému moc nevěřím) v obsluze přerušení usartu a už se z toho <br/>> nevyhrabe. Vypadá to tak, že pokud usart nestihne odvysílat všechny <br/>> znaky než se začne mazat stránka, zdechne. A marně si lámu hlavu proč. <br/>> Netušíte někdo ?<br/>> <br/>> Mrazík<br/>> <br/>> <br/>> _______________________________________________<br/>> HW-list mailing list  -  sponsored by www.HW.cz<br/>> Hw-list@list.hw.cz<br/>> http://list.hw.cz/mailman/listinfo/hw-list<br/><br/><br/>_______________________________________________<br/>HW-list mailing list  -  sponsored by www.HW.cz<br/>Hw-list@list.hw.cz<br/>http://list.hw.cz/mailman/listinfo/hw-list</blockquote></body></html>