
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
高手入门STM32总结+学习步骤
STM32开发五大误区,新手别傻傻信了
【STM32】总线架构
没学过51单片机,能否零基础学STM32?
STM32电机控制用什么型号?高级定时器功能详解与芯片选型指南
STM32H7R/S+TouchGFX:解锁智能家电沉浸式体验新维度
什么是STM32? STM32与ARM有什么关系? STM32能做什么?
STM32 不同时钟频率有什么不同的影响
《STM32H7R/S信息安全线上课程》学习笔记+安全存储
《STM32H7R/S信息安全线上课程》学习笔记+时域隔离,片内与片外存储器保护