需要帮助了解 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'。
我的问题是:
这3个词是什么时候造出来的?
我需要输入一些额外的密码才能打开大门吗?
这两个叫门词是什么?
参考手册中提到,虚拟词被跳过到第2和第3个词。我如何确保发生这种情况?
- 要保护 SRAM,必须知道要保护的内存位置的地址。我如何知道我要保护的数据将保存在 RAM 中的哪个位置?
或者这些都是自动硬件操作。
非常感谢您的帮助,
哈利
- At what point were these 3 words created?
它们由编译器和链接器创建,并写入片上闪存。
- Do i need to put in some extra code to open the gate?
没有。跳转到第二个字会打开防火墙
- What are these two call-gate words?
受保护函数开头的Thumb(-2) 机器码指令。它们必须按顺序取,也就是说第二个字不能有分支指令。
我就直接用4条NOP
指令填充第一个和第二个字,后面直接放保护函数。
- The reference manual mentions that the dummy word is skipped to the 2nd and 3rd words. How do I ensure this happens?
仔细编写您的代码,使其永远不会尝试执行或读取第一个单词。
- 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
部分中所做的那样。
我正在尝试根据 reference manual 第 146 页使用 STM32(l412kb) 的防火墙。我知道要初始化防火墙,您需要设置基地址和要保护的段的长度。然后通过清除 SYSCFG 寄存器中的 FWDIS(禁用防火墙)位来启用防火墙。
但是我不明白怎么打开防火墙执行代码。据我了解,代码段的前三个 32 位地址处有三个字。第一个词是一个虚拟词。第二个和第三个字是两个特定的 32 位字,称为 'call gate'。
我的问题是:
这3个词是什么时候造出来的?
我需要输入一些额外的密码才能打开大门吗?
这两个叫门词是什么?
参考手册中提到,虚拟词被跳过到第2和第3个词。我如何确保发生这种情况?
- 要保护 SRAM,必须知道要保护的内存位置的地址。我如何知道我要保护的数据将保存在 RAM 中的哪个位置?
或者这些都是自动硬件操作。
非常感谢您的帮助,
哈利
- At what point were these 3 words created?
它们由编译器和链接器创建,并写入片上闪存。
- Do i need to put in some extra code to open the gate?
没有。跳转到第二个字会打开防火墙
- What are these two call-gate words?
受保护函数开头的Thumb(-2) 机器码指令。它们必须按顺序取,也就是说第二个字不能有分支指令。
我就直接用4条NOP
指令填充第一个和第二个字,后面直接放保护函数。
- The reference manual mentions that the dummy word is skipped to the 2nd and 3rd words. How do I ensure this happens?
仔细编写您的代码,使其永远不会尝试执行或读取第一个单词。
- 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
部分中所做的那样。