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
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
【福利三:逢7发帖赢大礼】成功利用STM32H743VI片内SRAM12和DTCM空间(完全胜利)
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
【福利三:逢7发帖赢大礼】使用惠勤致远STM32H743VI开发板+ST7796并口彩屏移植LVGL9.5并分享一些额外内容
【 逢7发帖赢大礼】7、TouchGFX中实现云彩流动效果
【 逢7发帖赢大礼】6、TouchGFX中添加图像素材和自定义代码编辑
【 逢7发帖赢大礼】5、TouchGFX 创建自定义界面和交互
微信公众号
手机版