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

标签 c stm32 firewall

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

但是我不明白如何打开防火墙来执行代码。据我了解,代码段的前三个 32 位地址处有三个字。第一个词是一个虚拟词。第二个和第三个字是两个特定的 32 位字,称为“调用门”。

我的问题是:

  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) 机器代码指令位于 protected 函数的开头。它们必须按顺序取,也就是说第二个字不能有分支指令。

我只是用 4 个 NOP 指令填充第一个和第二个单词,然后直接将 protected 函数放在后面。

  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,取决于所使用的链接器)以将 protected 变量放入,根据防火墙要求对齐,然后在该部分的开头和结尾导出一个符号,就像在 .data, .bss 中所做的那样.heap 部分。

关于c - 需要帮助了解 STM32 防火墙的 "Call Gate"序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57692815/

相关文章:

c++ - 根据需求在 C++ 中定义函数原型(prototype)

c - 显示输入数字指定的矩阵的对角线

c - 删除功能不起作用

c - 如何在STM板上的端口D6(PE_9)上获取PWM信号?

firewall - 如何在Centos 7上启用防火墙?

c - 如何解释在 MacOS 上调用 proc_listpids 函数的结果?

c - STM32F103如何使用ENC28j60

ubuntu - apt-get 通过隧道代理安装,但只能从客户端使用 ssh

php - 从特定 IP 地址访问时无法使用 Joomla 管理控制台

c - 结构包装和与mingw对齐