你這個問題,最后,解決了么? 如果解決了,可跳過后續內容。
你這個單片機,正式名稱應該是 IAP15W4K61S 吧。
STC 的 IAP系列,都是程序和Eeprom 共用空間的,即程序空間 = Eeprom空間 (物理上)。
那么,帶來一個問題,對于,KEIL來講,你是只有程序空間,沒有Eeprom空間的。下面比較拗口,不知道我這樣描述,你是否能理解,盡我最大努力吧。
在ICE仿真的時候,你的程序,其實是在電腦上的,電腦上單步運行,然后,把需要執行的指令,通過串口傳給單片機,然后,單片機收到后在單片機運行,如果有返回值,則把返回值返回給電腦。即,程序在電腦,運行在單片機。
那么,(重點)問題來了,你寫一個數值到Eeprom, 指令傳輸給單片機后,單片機運行后,他確確實實把這個值寫到了單片機上的指定位置。此時,有沒有返回值?有,寫成功這個值回傳到電腦了,但是,沒有其他的返回值了。因為事實上,Eeprom操作時,也不會有其他的返回值,所以,你電腦端(Keil),根本不會知道,你單片機的某個地址,發生了內容變更。
而,你電腦上Memory 1 看到的,其實是你電腦上的為了執行ICE仿真而做出來的“程序區”的內容。和實際上單片機上的程序區內容,是完全沒有任何關系的。事實上,你單片機上燒錄了仿真程序后,會占用6K容量,這一點,你在仿真的時候,也無法在Keil的 地址區看到。
所以,這就是一個信息不對稱問題,而實際上,你只要多寫一個 IAP_CMD = 1 的讀程序,讀你寫入的地址,存到一個變量,你就能發現,IAP操作,其實是成功了。
不知道這么描述,是否能把我想表達的意思傳遞給你,如果能,就太好了。如果不能,我只能說抱歉了,我已經盡力了。 |