公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

我正在阅读《架构技术手册》,第 38 页提到 " CPUSS 最多有三个相同的 SRAM 控制器;有关详细信息,请参阅设备数据表。" 我试图在设备数据表上找到有关"三个 " SRAM 控制器的明确信息,但我无法澄清这个问题:

SRAM 是单块存储器还是 3 块独立存储器,每个模块都有自己的控制器并连接到系统总线? 为了进一步说明我的问题,我想知道如果两个内核同时访问这个内存,SRAM 是否会出现争用延迟。

 

谢谢。

 

0 点赞
3 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

@Raz3l

让我试着回答你的两个问题。 先是最后一个。


...我想知道如果两个内核同时访问此内存,SRAM 是否会出现争用延迟。

 

如果两个内核都在尝试访问相同的 SRAM 部分,它会自动正确处理 SRAM 的读取或写入。 有内部硬件仲裁来保证它能读取实际内容。 仲裁硬件与 DMA 硬件类似。

由于这种仲裁,一个内核对该 SRAM 的访问可能会出现一些延迟。 这是意料之中的,在运行时无法准确预测。 因此,基于 SW 的时序循环可能会稍长一些。

现在来问你的第一个问题:


SRAM 是单块存储器还是 3 块独立存储器,每个模块都有自己的控制器并连接到系统总线?

 

SRAM 的 3 个独立块的主要原因是,根据您希望在哪种低功耗模式下运行, SRAM 的某些部分(组)会断电。在低功耗模式下保持开机状态的 SRAM 将消耗数百个 PA 到 UA 的电流。这将更快地耗尽电池电量。

因此,策略是确定需要开启哪个 SRAM 库才能在低功耗模式下生存。

你应该担心的最重要问题是"多作者/多个读者的困境。"这类似于两个人在不协调账户余额的情况下从同一个支票账户开支票。透支的可能性很大(很抱歉这里有古老的  参考文献。)

如果两个内核同时有效地写入完全相同的 SRAM 变量,则稍后使用任一 CPU 读取该数据时,该值可能与预期不符。

 鼓励使用@@ 三种技巧来避免"多个作者/多个读者的困境 。"

  1. 将变量(或变量范围)声明为 IPC 变量。 IPC(处理器间通信)。
    这种 SW 方法使用信号量、互斥信号(互斥)信令等软件技术来确保使用时的变量所有权。这确实需要更多的 CPU 时间和延迟才能访问变量,但这是 “安全” 且推荐的方法。
  2. 使用 IPC 调用访问变量。 切勿直接访问变量。 如果读取,IPC 调用会将变量加载到另一个变量中。写入时,IPC 调用将需要 IPC 函数内部"的新"变量值。
  3. 将使用共享变量的所有临时变量声明为 v " olatile "。这应该可以防止编译器优化将临时变量存储在寄存器中。根据您的优化编译器,可能不需要执行此步骤。 这只是一种合理的预防措施。
0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

谢谢 Len 的长时间回复,完全澄清了我的问题 🙂

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@Raz3l

不客气。

英飞凌的代码提供了有关如何使用IPC的示例。以此为起点。

0 点赞