需要帮助了解 STM32 防火墙的 "Call Gate" 序列

Need Help Understanding the "Call Gate" Sequence for the STM32's Firewall

我正在尝试根据 reference manual 第 146 页使用 STM32(l412kb) 的防火墙。我知道要初始化防火墙,您需要设置基地址和要保护的段的长度。然后通过清除 SYSCFG 寄存器中的 FWDIS(禁用防火墙)位来启用防火墙。

但是我不明白怎么打开防火墙执行代码。据我了解,代码段的前三个 32 位地址处有三个字。第一个词是一个虚拟词。第二个和第三个字是两个特定的 32 位字,称为 'call gate'。

我的问题是:

  1. 这3个词是什么时候造出来的?

  2. 我需要输入一些额外的密码才能打开大门吗?

  3. 这两个叫门词是什么?

  4. 参考手册中提到,虚拟词被跳过到第2和第3个词。我如何确保发生这种情况?

    1. 要保护 SRAM,必须知道要保护的内存位置的地址。我如何知道我要保护的数据将保存在 RAM 中的哪个位置?

或者这些都是自动硬件操作。

非常感谢您的帮助,

哈利

  1. At what point were these 3 words created?

它们由编译器和链接器创建,并写入片上闪存。

  1. Do i need to put in some extra code to open the gate?

没有。跳转到第二个字会打开防火墙

  1. What are these two call-gate words?

受保护函数开头的Thumb(-2) 机器码指令。它们必须按顺序取,也就是说第二个字不能有分支指令。

我就直接用4条NOP指令填充第一个和第二个字,后面直接放保护函数。

  1. The reference manual mentions that the dummy word is skipped to the 2nd and 3rd words. How do I ensure this happens?

仔细编写您的代码,使其永远不会尝试执行或读取第一个单词。

  1. To protect the SRAM, the address of the memory location to protect must be known. How do I know where in RAM the data I want to protect will be held?

在链接器定义文件中定义一个单独的部分(.ld.sct.icf,取决于所使用的链接器)来放置受保护的变量,根据防火墙要求,然后在该部分的开头和结尾导出一个符号,就像在 .data.bss.heap 部分中所做的那样。