【问题标题】:ERROR 65 in ARM KEIL 5 (Permissions error)ARM KEIL 5 中的 ERROR 65(权限错误)
【发布时间】:2014-06-28 11:58:00
【问题描述】:

我对 ARM Cortex M4 系列微控制器比较陌生。 当我尝试使用 KEIL 5 模拟器调试一个简单的项目(blinky 很容易使 LED 闪烁和关闭)时,我收到如下错误:

* 错误 65:0x400FE608 处的访问冲突:没有“读取”权限 * 错误 65:0x400FE608 处的访问冲突:没有“写入”权限

我在网上搜索了一个解决方案,我得到了这个:

http://www.keil.com/support/docs/814.htm

但实际上,像上面提到的方法一样,在我的整个代码中提及我想要访问的所有地址并不容易,也不合逻辑。

请问有人可以给我推荐其他的吗?

(实际上,我打算模拟的所有项目都出现此错误,因此我无法模拟任何东西)。

这是我一直在使用的简单代码:

#define GCGPIOR (*((int*)0x400FE608))
int main(void) 
{ 
GCGPIOR |= 0x20; 
return 0; 
}

我正在使用这个 mc:TM4C1294NCPDT

【问题讨论】:

  • 嗯?为什么您不想使用正确的解决方案?您正在映射一个范围,而不是单个地址...
  • 所以我必须提到我想使用的每个地址范围?但是为什么当我下载一些现成的例子时问题仍然存在!编写示例代码的人不应该已经这样做了吗? ..他们是官方的例子,所以我认为有问题!在 IAR 等所有其他 IDE 中是否存在此问题?
  • 大多数人使用真正的硬件。
  • @MohammedNoureldin:不,您不必提及每个范围 - 您可以映射整个内存。但是,人们不得不质疑为什么您要在链接器知识之外直接寻址内存?访问冲突报告用于捕获错误。什么“官方示例”?添加这些链接或问题的实际代码将对您的事业有所帮助。您是否选择了合适的设备进行仿真?您是否在 target options 对话框或 linker options scatter file 中正确设置了内存区域(如果您正在使用)?
  • @MohammedNoureldin:我很确定您在 Cortex-M4 上没有 4Gb 的内存!你的回答w.r.t。示例没有帮助-您仍然没有将代码或链接添加到您的问题的源代码。我想查看直接访问链接器映射之外的内存的实际代码,因为坦率地说我对此表示怀疑,这可能是你真正的问题。您可能在询问是否修复症状,而实际上您需要找到真正的问题

标签: embedded arm microcontroller keil cortex-m


【解决方案1】:

这真的是来自芯片供应商的示例代码吗? GCGPIOR的定义应该是volatile

#define GCGPIOR (*((volatile int*)0x400FE608)))

您是否在模拟器/项目配置中选择了正确的设备?您是否安装了 Keil::TM4C_DFP 设备包并使用了正确的设备配置?

问题似乎是模拟器使用的内存映射是从链接器内存映射自动设置的。如果您进行链接器不知道的直接内存映射 I/O 访问,那么它将引发异常(当此机制检测到代码中的错误时,您可能会很高兴 - 这不是 uVision 中的错误 - 这是故意的行为)。

如果 MAP 命令或对话对您不起作用,奥卡姆剃刀建议我您没有正确执行操作。您应该映射零件数据表或用户手册中给出的整个 I/O 区域。我想如果您在链接器分散文件中定义 I/O 区域,它可能会起作用 - 但这可能有点太复杂了。

【讨论】:

  • 对不起,您看到的地址只是一个例子,错误实际上发生在我尝试访问的地址(在我们的例子中为 0x400FE608)。而其他模拟器配置只是默认配置
  • 关于大括号,是的,它应该像你提到的那样,但它在代码中绝对正确,因为我的错误不在语法中。关于你剩下的问题,他们的答案都是肯定的。
  • @MohammedNoureldin : 不是volatile 不是语法错误,而是语义错误。有关详细信息,请参阅embedded.com/electronics-blogs/beginner-s-corner/4023801/…。我的观点是,我无法相信芯片或编译器供应商会提供这样的代码示例,而您说它是“官方的”(但没有引用链接)。
  • 对不起,我没有注意到 volatile .. 我的意思是最后的大括号。无论如何,我尝试了带有 volatile 的代码,但同样的错误:***错误 65:0x400FE608 处的访问冲突:没有“读取”权限 ***错误 65:0x400FE608 处的访问冲突:没有“写入”权限
  • 该链接并不表明这是一个“问题” - 这是检测错误代码的故意行为。这就是为什么我建议您的配置不正确的原因。 Keil的ARM MDK使用了ARM自己的编译器(Keil归ARM所有);我建议它至少是比 IAR 更好的编译器。特别是它支持 ISO C++98 而不是 IAR 的 EC++ 子集。也就是说,调试器在处理一些 C++ 代码时有些吃力——尤其是命名空间(EC++ 当然不支持)。
【解决方案2】:

在一个带有 LPC1768 微控制器的 CMSIS 项目中,我遇到了与 KEIL V5 类似的问题。

以真正的微控制器为目标进行调试时,一切正常。以模拟器为目标进行调试,当 CMSIS 尝试初始化系统核心时钟时,我得到:

*** error 65: access violation at 0x400FC1A0 : no 'write' permission

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    相关资源
    最近更新 更多