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