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