解决STM32F407软件仿真时候提示error 65: access violation at 0x40023800 : no 'read' permission

作者首次移植RT-Thread并创建LED闪烁程序,在软件仿真过程中遇到Debug系统提示错误56和65,通过创建Debugconfig.ini内存配置文件并调整其存放位置成功解决问题。

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

第一次移植RT-Thread,并创建了一个LED闪烁程序,由于新冠病毒疫情不允许出小区,没法拿办公室里的开发板,只能用软件仿真。程序编译都没有问题了,启动Debug系统提示

*** error 56: cannot open file

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

百度查询过error 65: access violation at 0x40023800 : no 'read' permission可以通过建立一个内存配置文件解决

我就创建了一个Debugconfig.ini文件放在了项目目录的Debugconfig文件夹里,但是不好使

map 0x40000000, 0x40007FFF read write // APB1

map 0x40010000, 0x400157FF read write // APB2

map 0x40020000, 0x4007FFFF read write // AHB1

map 0x50000000, 0x50060BFF read write // AHB2

map 0x60000000, 0x60000FFF read write // AHB3

map 0xE0000000, 0xE00FFFFF read write // CORTEX-M4 internal peripherals

 

 

又找了很多资料都不管用,我在点编辑按钮的时候发现提示错误

于是我怀疑这个配置文件存放的目录MDK可能找不到,于是我把配置文件放到了MDK安装目录中,就OK了!

 

### 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 类型。另外注意遵循官方文档给出的最佳实践指南完成各模块间的交互过程管理。 最后提醒一点,在实际解决问题之前最好先备份整个工程文件夹以防万一改动失败还能迅速恢复原始状态继续查找其他线索直至彻底排除故障为止!
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值