STMCU小助手
发布时间:2022-8-1 22:26
|
1. 引言 PCROP 全称为 Proprietary code read out protection(专用代码保护),它提供了一种新的代码保护机制,在 PCROP 区域的内容只能为可执行,不能读取或写入。这种机制可以为 OEM 厂商提供保护,方便保护自己 IP 的代码。本文主要记录在使用 PCROP 上遇到的 Hardfault 问题。 如何使用 PCROP 呢? 参考 AN4968 中 PCROP 的描述,PCROP 的使用大致有以下几个步骤: 1. 将需要保护的文件,在 IDE 中标识为仅可执行,IAR 和 KEIL,CubeIDE 都有此类标识。 2. 需要修改 Link 文件,将受保护文件中的 rw data, ro data, ro code 进行分区存放。 3. 通过修改选项字,将受保护文件中的 ro code 中的内容进行 PCROP 保护。 4. 编译工程产生保护文件的.o 文件,并把符号导出给实际应用工程使用。 2. 问题描述 在我使用 IAR 进行 PCROP 的测试时,发生了如下错误。
3. 问题分析与定位 PCROP 调试时,会遇到一个问题,那就是由于代码已经被保护起来,无法单步调试。目前知道的只是当 PCROP 打开的时候会导致 Hard Fault,而不使用 PCROP 没有问题。那么这个问题和PCROP 强相关了。 接下来,只能通过一些简单的测试来定位发生问题的大概位置了,比如在函数入口添加一些简单的汇编代码,比如 IAR 中可以添加代码往寄存器 R5 中写入特殊测试值:__ASM(" MOVS R5, #11"),通过这个简单的测试,发现函数并没有执行到这里来。所以大概在跳转之后,执行这一句代码之前就已经发生了问题。 Hard Fault 的错误描述为:INVSTATE,无效状态代表的是试图切换到 ARM 状态,查看文档后有以下信息:
把 PCROP 取消掉以后,查看汇编代码如下图 3:
0x9003 开头的是外部 flash 地址,首先会跳转到 0x9003’6fd8 去执行,如下图 4。
完整版请查看:附件 |
LAT1023_STM32H750上PCROP的使用问题.pdf
下载575.09 KB, 下载次数: 0
经验分享 | STM32H723 SPI 通讯异常排查:实时观察窗口的 “隐形干扰” 解决方案
经验分享 | STM32H7 SPI NSS 脉冲模式灵活应用:解决外置 ADC 通信干扰问题
经验分享 | STM32H7 双核调试配置:STM32CubeIDE 下 M7+M4 协同调试实操
经验分享 | STM32H7 TouchGFX 花屏速解:更换 HyperRAM 后 latency 值适配实操
经验分享 | STM32H743 BDMA+LPTIM+LPUART应用演示
经验分享 | STM32H7Sx MCE 加密解密:外部存储安全防护全解析
如何在STM32和Arduino上实现卷积神经网络
详解STM32单片机的堆栈
STM32 开发者指南:ST.com 全新 MCU 产品阵容视觉布局深度解析
STM32和Arduino对比,谁更耐打?
微信公众号
手机版