WPGGJ 2024-05-28 10:22 采纳率: 47.4%
浏览 63
已结题

keil调试报错error 65

我在使用STM32L0系列芯片的时候,用的STM32CubeMX创建HAL工程,然后编译没有报错,就是没有数据,找不到问题,就试一下调试,然后出现了

*** error 65: access violation at 0x40022000 : no 'read' permission

网上说的修改debug我也试了还是不行呢,有没有谁知道这是咋回事吗

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-28 10:22
    关注

    引自免费微信小程序:皆我百晓生

    错误 65(通常在Keil uVision中显示为“access violation”)通常是由于试图访问只读存储器区域时没有适当的权限导致的。在这种情况下,地址0x40022000通常对应于STM32L0系列微控制器的寄存器映射区域。这个区域包含了控制和配置微控制器功能的寄存器,这些寄存器通常只能读取,不能写入。

    针对你遇到的问题,这里有几个可能的解决步骤:

    1. 检查中断向量表: 确保你的中断向量表设置正确。在SystemInit()函数中,初始化向量应该被正确地指向中断处理程序。这可能是导致调试器尝试读取不应该读取的内存位置的原因。确保在startup_stm32l0xx.s文件中的中断向量表配置正确。

    2. 检查指针操作: 检查你的代码中是否存在对无效内存地址的访问,特别是那些超出数组范围或者未初始化的指针。确保你在访问任何内存之前都正确分配和初始化了变量。

    3. Flash配置: 在STM32L0中,闪存可能被配置为只读。检查你的STM32CubeMX项目设置,确保在SystemMemoryMap.c文件中,Flash区域的权限设置为可读可执行(RX)。如果你不确定如何操作,可以在STM32CubeMX中选择Project -> Options for Target -> Debug -> Flash Download,确认是否正确设置了Flash的权限。

    4. 断点设置: 取消所有位于0x40022000附近的断点,因为它们可能会触发错误。如果问题消失,那么可能是某个断点意外地定位到了一个敏感区域。

    5. 重新生成启动文件: 如果以上步骤都无法解决问题,尝试重新生成启动文件。在STM32CubeMX中,选择你的项目,点击Tools -> Generate Code,然后重新构建工程。

    6. 核对硬件连接: 确保你的开发板与电脑的连接没有问题,有时硬件故障也会引发类似错误。

    如果上述方法仍然无法解决问题,建议你分享更多关于你的代码和调试设置的详细信息,以便更深入地分析。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月18日
  • 创建了问题 5月28日

悬赏问题

  • ¥15 CPU卡指令整合指令数据都在图片上
  • ¥15 火车票关联12306问题
  • ¥15 odoo17处理受托加工产品
  • ¥15 如何用MATLAB编码图三的积分
  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES
  • ¥15 结构功能耦合指标计算
  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 非科班怎么跑代码?如何导数据和调参