最近在使用NXP的LPC1127FBD48控制器做一个项目,程序的代码写的差不多了。因为其他的事情,写代码的工作停了几天。今天闲下来,继续写剩下的代码。打开原来的工程,刚将程序下载到LPC1127中,Keil的调试输出窗口就提示:*** error 57: illegal address(0x00001000)。
刚开始时,还以为是由于LPC1127的启动文件配置造成的。多次更改相应的配置信息,仍没有解决问题。后来在官网看到的介绍,发现是调试器的配置造成的。
解决方法: 在Options for Target — Debug — Settings — Debug — Download Options对话框中取消勾选Download to Flash选项。
参考资料 Keil官方也给出了相关的介绍: http://www.keil.com/support/docs/3508.htm
下面是官方给出的解决方法: 现象描述: 开始调试Cortex-M器件后,在调试输出窗口提示以下信息:*** error 57: illegal address (...) 为什么会出现非法地址访问呢? 原因: 这种现象有可能是由调试器造成的,例如,当memory窗口的地址指向了调试过程中不能访问的位置。另外,当 Target — Debug — Settings — Debug — Download Options的Flash in Options启用时,也会造成这种现象。 Download to Flash向所有的内存区域写入代码,包括那些定义为Flash的区域。这种方式不能替代直接向Flash内存写代码,需要使用闪存编程算法来烧写Flash。检查 Target Driver Setup — Flash Download对话框。 Download to Flash选项是非常有用的。例如,在间接访问启动存储区如NAND Flash,但需要从SDRAM执行的系统中。在这种情况下,SDRAM区域定义为Flash。代码通过Flash算法烧写到NAND Flash。启动时,代码从NAND复制到SDRAM,并且在SDRAM中执行。但是,在调试时,代码需要通过调试器下载到SDRAM中。通过这个选项,一个target可以用于从SDRAM调试,也可以烧写程序到NAND。 解决方法: 禁用 Target — Debug — Settings — Debug中的Download to Flash选项。这样非法地址的错误就会消失。如果你想在调试前更新目标,请在调试前启用Target — Utilities — Update Target 选项。 |