以前总在各论坛看到人们用MDK开发LPC824的时候出现Invalid ROM Table的弹框报错,果不其然,今天我也遇到了。 人们对于这个弹框的原因有个猜测就是板载LPC11U35仿真器的固件版本太旧,需要更新高版本的固件,这个猜测的支持者众多,因为人们在更新了固件之后就不会再遇到这个弹框了,但是我经过开发几个LPC824板子(有大联大的VEML6040、深圳优龙电子的LPC824Lite)得出经验,出现Invalid ROM Table弹框的原因并不是固件版本太旧,而是因为板子进入了__WFI()函数的低功耗模式。为什么我会坚定地认为不是固件版本的问题呢?因为我横向测试了两个固件版本不同的VEML6040开发板,一个更新了固件,一个没有更新,两个板子在烧录同一个程序的时候都出现Invalid ROM Table弹框,因此,可以初步判断不是固件版本旧的问题。后来我参阅了某个论坛一个年代非常久远的帖子,这个帖子说凡是采用LPC11U35作为仿真器的LPC8XX开发板,板上除了RESET复位按键以外,都有一个ISP按键,同时按住ISP和RESET按键,然后先松开RESET按键,最后松开ISP按键,就会进入ISP模式,再下程序就不会出现Invalid ROM Table的提示。我个人的猜测是,板子进入ISP模式,不执行任何用户程序,所以就退出了__WFI()低功耗模式了,一旦退出低功耗模式,板子就可以继续下载程序了。注意,这个低功耗模式不是休眠模式,按WAKE_UP按键唤醒是没用的。 这里再说说人们为什么会认为重新刷固件就能解决Invalid ROM Table问题呢?因为重新刷固件的话,板子的用户程序就被擦除了,也一样是退出了低功耗模式,也就可以重新下载程序了。 这里说下会导致板子进入低功耗模式的语句__WFI()。WFI即Wait for Interrupt,等待中断,这是Cortex-M系列工程里面的一个函数,至于为什么这个函数会导致Invalid ROM Table弹框报错,我也不清楚,我只知道的是,把这句注释了,板子下程序的时候就不会再出现Invalid ROM Table提示。
以前总在各论坛看到人们用MDK开发LPC824的时候出现Invalid ROM Table的弹框报错,果不其然,今天我也遇到了。 人们对于这个弹框的原因有个猜测就是板载LPC11U35仿真器的固件版本太旧,需要更新高版本的固件,这个猜测的支持者众多,因为人们在更新了固件之后就不会再遇到这个弹框了,但是我经过开发几个LPC824板子(有大联大的VEML6040、深圳优龙电子的LPC824Lite)得出经验,出现Invalid ROM Table弹框的原因并不是固件版本太旧,而是因为板子进入了__WFI()函数的低功耗模式。为什么我会坚定地认为不是固件版本的问题呢?因为我横向测试了两个固件版本不同的VEML6040开发板,一个更新了固件,一个没有更新,两个板子在烧录同一个程序的时候都出现Invalid ROM Table弹框,因此,可以初步判断不是固件版本旧的问题。后来我参阅了某个论坛一个年代非常久远的帖子,这个帖子说凡是采用LPC11U35作为仿真器的LPC8XX开发板,板上除了RESET复位按键以外,都有一个ISP按键,同时按住ISP和RESET按键,然后先松开RESET按键,最后松开ISP按键,就会进入ISP模式,再下程序就不会出现Invalid ROM Table的提示。我个人的猜测是,板子进入ISP模式,不执行任何用户程序,所以就退出了__WFI()低功耗模式了,一旦退出低功耗模式,板子就可以继续下载程序了。注意,这个低功耗模式不是休眠模式,按WAKE_UP按键唤醒是没用的。 这里再说说人们为什么会认为重新刷固件就能解决Invalid ROM Table问题呢?因为重新刷固件的话,板子的用户程序就被擦除了,也一样是退出了低功耗模式,也就可以重新下载程序了。 这里说下会导致板子进入低功耗模式的语句__WFI()。WFI即Wait for Interrupt,等待中断,这是Cortex-M系列工程里面的一个函数,至于为什么这个函数会导致Invalid ROM Table弹框报错,我也不清楚,我只知道的是,把这句注释了,板子下程序的时候就不会再出现Invalid ROM Table提示。