keil仿真错误:*** error 65: access violation at 0x40021000 : no ‘write‘ permission

文章讲述了作者使用STM32F103C8T6芯片在遇到仿真问题后,成功解决的过程,包括步骤和可能的解决方案。

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

 

按下图打开:

进行修改:

 

 我用的芯片是:STM32F103C8T6

开始仿真:

成功解决不能仿真问题 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aurora Smith

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值