MDK5.00中*** error 65: access violation at 0x40021000 : no 'read' permission的一种解决方法

本文介绍了解决MDK5环境下出现的AccessViolation错误的方法。通过调整Debug选项卡中的参数设置,可以避免使用STM32F103ZE芯片进行软件仿真时遇到的权限读取问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自从升级到MDK5版本后,以前由MDK4建的工程都正常,但是用MDK5来建立工程的话,总是在软件仿真的时候出现

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

经过几番查找,终于在以前正常的工程的Debug选项卡看到了差别

我使用的芯片STM32F103ZE,开发环境 MDK5.00

报错的工程是这样的:

差异就在于这四个方框里的参数。

正常的工程是这样的:

还有这样的:这与上面一个相比就是第一行的两个参数是空的。

把那报错的,照着正常的改,就可以了。

顺便说一下这几个方框里的命名规律

SARMCM3.DLL是一个动态链接库,名称SARMCM3表示是ARM Cortex-M3架构

DCM.DLLTCM.DLL同理,表示Cortex-M系列。参数-pCM3表示Cortex-M3系列的参数

由于Cortex-M3只是个大框架,具体的厂商实现细节不一样,所以还是修改得具体点好。

DARMSTM.DLLTARMSTM.DLL则指明了是STMicroelectronics(意法半导体)的ARM架构的产品。


### Keil 编译器中 Error 65 访问违规问题分析 在嵌入式开发过程中,当使用 Keil MDK 软件进行 STM32 的调试时,可能会遇到 `Error 65 Access Violation` 这类错误提示。该错误通常表示程序试图访问未被允许的内存地址或者尝试执行非法操作。 #### 错误原因解析 此类错误可能由多种因素引起,常见的有以下几种情况: - 配置不当:如果外设寄存器基址配置不正确,则可能导致 CPU 尝试写入或读取不存在的硬件资源[^1]。 - 初始化顺序错误:某些外设需要按照特定次序初始化才能正常工作;若违反此规则也可能引发异常行为。 - 存储越界:数组或其他数据结构超出其定义范围的操作同样会触发类似的保护机制中断程序运行流程。 #### 解决方案建议 针对上述提到的各种可能性提供相应的解决方案如下: ##### 方法一:检查并修正存储器映射设置 确认项目选项中的 Memory Map 设置是否与目标芯片规格相符。对于 Cortex-M 系列微控制器而言,默认情况下 SRAM 和 Flash 地址区间已被预设好,但如果自定义修改过这些参数则需格外小心验证准确性。 ```c // Example of memory map configuration in scatter file (.sct) LR_IROM1 0x08000000 0x00080000 { ; load region size_region ER_IROM1 0x08000000 0x00080000 { RO } RW_IRAM1 0x20000000 0x00010000 { RW, ZI } } ``` ##### 方法二:审查代码逻辑防止缓冲区溢出 仔细排查源码里是否存在潜在的风险点比如字符串拷贝函数 strcpy() 使用不当造成堆栈破坏等问题。改用更安全版本如 strncpy() 并严格控制长度可以有效降低风险发生概率。 ##### 方法三:重新审视外设驱动库调用方式 确保 HAL/LL 库版本兼容当前使用的固件包以及 MCU 类型。另外注意遵循官方文档给出的最佳实践指南完成各模块间的交互过程管理。 最后提醒一点,在实际解决问题之前最好先备份整个工程文件夹以防万一改动失败还能迅速恢复原始状态继续查找其他线索直至彻底排除故障为止!
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值