你这个问题,最后,解决了么? 如果解决了,可跳过后续内容。
你这个单片机,正式名称应该是 IAP15W4K61S 吧。
STC 的 IAP系列,都是程序和Eeprom 共用空间的,即程序空间 = Eeprom空间 (物理上)。
那么,带来一个问题,对于,KEIL来讲,你是只有程序空间,没有Eeprom空间的。下面比较拗口,不知道我这样描述,你是否能理解,尽我最大努力吧。
在ICE仿真的时候,你的程序,其实是在电脑上的,电脑上单步运行,然后,把需要执行的指令,通过串口传给单片机,然后,单片机收到后在单片机运行,如果有返回值,则把返回值返回给电脑。即,程序在电脑,运行在单片机。
那么,(重点)问题来了,你写一个数值到Eeprom, 指令传输给单片机后,单片机运行后,他确确实实把这个值写到了单片机上的指定位置。此时,有没有返回值?有,写成功这个值回传到电脑了,但是,没有其他的返回值了。因为事实上,Eeprom操作时,也不会有其他的返回值,所以,你电脑端(Keil),根本不会知道,你单片机的某个地址,发生了内容变更。
而,你电脑上Memory 1 看到的,其实是你电脑上的为了执行ICE仿真而做出来的“程序区”的内容。和实际上单片机上的程序区内容,是完全没有任何关系的。事实上,你单片机上烧录了仿真程序后,会占用6K容量,这一点,你在仿真的时候,也无法在Keil的 地址区看到。
所以,这就是一个信息不对称问题,而实际上,你只要多写一个 IAP_CMD = 1 的读程序,读你写入的地址,存到一个变量,你就能发现,IAP操作,其实是成功了。
不知道这么描述,是否能把我想表达的意思传递给你,如果能,就太好了。如果不能,我只能说抱歉了,我已经尽力了。 |