嗨对话框:当我提供客户现场硬件中断错误时,我发现了一个问题。我写了一个测试程序如下(da14585_sdk_6.0.2.243):
//全球初始化system_init();
uint8 * paddr = null;* paddr = 100;ARCH_PRINTF(“* PADDR:%d \ n”,* paddr);。运行结果放弃了100个印刷品。我使用零地址,不应该进入硬件故障中断,但不是
嗨Lucienkuang,
嗯,ARM没有限制您从包裹到内存的0x0的写作,那个操作触发了一个硬盘,通常在您这样做(写入地址为零)时,您损坏了中断向量表,这就是您获得的原因硬盘和通常触发硬盘驱动器,因为当ARM使用该表(例如,中断命中)时,值损坏,因此当您在地址0x0的写入时触发硬盘触发为什么。
580和585类似但不相同,在580中,如地址0x0被认为是Sysram的地址,如果它被重复到Sysram,则为0x20000000。默认情况下,从keil下载时,地址0x0未映射到sysram,但它指向ROM,因此当您尝试在580上写入0x0时,实际上您正在尝试在ROM上写入,因此导致总线错误在一个硬贪端。在585中,0x0地址通过keil重复在sysram中,因此当您在0x0写入值100时,您只需损坏初始堆栈指针,它不会在main()函数上有任何差异,因为此值仅在手臂的开始时使用一次。
谢谢mt_dialog.
嗨Lucienkuang,
嗯,ARM没有限制您从包裹到内存的0x0的写作,那个操作触发了一个硬盘,通常在您这样做(写入地址为零)时,您损坏了中断向量表,这就是您获得的原因硬盘和通常触发硬盘驱动器,因为当ARM使用该表(例如,中断命中)时,值损坏,因此当您在地址0x0的写入时触发硬盘触发为什么。
580和585类似但不相同,在580中,如地址0x0被认为是Sysram的地址,如果它被重复到Sysram,则为0x20000000。默认情况下,从keil下载时,地址0x0未映射到sysram,但它指向ROM,因此当您尝试在580上写入0x0时,实际上您正在尝试在ROM上写入,因此导致总线错误在一个硬贪端。在585中,0x0地址通过keil重复在sysram中,因此当您在0x0写入值100时,您只需损坏初始堆栈指针,它不会在main()函数上有任何差异,因为此值仅在手臂的开始时使用一次。
谢谢mt_dialog.