個人總結:延遲21毫秒后再操作EEPROM,延遲20毫秒燒錄都會報錯。(STM8S003F3)
我上個月也出現了這樣的問題,對出現問題的的工程進行分析。
發現,在main函數中直接解除EEPROM的鎖定,然后對特定的EEPROM地址進行賦值,只要賦的值不是0,就會報錯,
直接插入CLR或者LD指令操作EEPROM地址,發現CLR指令不會報錯,LD的會報錯。也就是說,清零沒問題,賦值會有問題。
今天,使用STVP下載的時候再次出現這樣的問題,對多處修改進行分析。發現原來是我用的配置初始化函數中ConfigInit(),
有類似這樣的語句*EEP_Config =ROM_Config(兩個都是結構體,其中前面一個指向EEP,后一個在定義的時候帶有const)。
今天早上之前都沒有這個錯誤的,經查出現錯誤的原因是:以前我是在菜單狀態機的第一個狀態,在啟動后一秒鐘調用ConfigInit(),
而今天早上我是將ConfigInit()函數放到了第一個狀態的入口動作上,也就是說在菜單狀態機被初始化的時候,ConfigInit()函數就會被調用。
同時我是將初始化菜單狀態機的函數,直接放在main函數中的,即上電后馬上調用ConfigInit()!
將ConfigInit()函數延后執行后,程序下載恢復正常。
我才猜測是這樣的:啟動后的一段時間內不能對EEPROM進行賦值,要不然就會被報錯。
結合在STVP下載的時候,能看到LCD狂閃,推論如下:
STVP在下載的時候,程序是可以斷斷續續的運行的,而在期間如果執行了賦值EEPROM的動作,那么STVP在隨后對EEPROM的
檢測的時候,發現并非全是0,就會將不是0的那個地址用下面的語句報錯:
Verify failed at address0xXXXX
希望能幫到以后遇到這個問題的人~~
|