This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA2EXEVM:Multi-Eve 处理器平台中的 Spinlock 问题

Guru**** 662690 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1078859/tda2exevm-spinlock-issue-in-multi-eve-processors-platform

部件号:TDA2EXEVM

您好,

我正在使用 任务方法的数据分区为多 Eve 方案开发应用程序。(使用 SYS/BIOS 任务)

 我们已使用自旋锁来同步 在多个 Eve 处理器上运行的进程。 问题在于 某些实现同步的自旋锁 在 EVE1, EVE1和 EVE3之后,EVE2或 EVE1只会获取锁定并释放,直到算法执行结束,EVE3将等待锁定,因此 EVE3核心执行被卡住。

我们无法找到路由原因,因为它在某些实施之前就起作用,我们突然发现了这种行为。 请告诉我们 ,在多除夕场景中使用自旋锁时,需要考虑哪些因素。

以下是我们用于获取 和释放处理器锁的功能。

#define SPINLOCK_ID (40U)
#define SOC_SPINLOCK (0x4a0f6000U)

使 MulticoreLockAcquire()//无效以获取锁定

   UINT32_t 状态= 1U;
   UINT32_t baseAddr = SOC_SPINLOCK;
   UINT32_t spinLockId = SPINLOCK _ ID;

   同时(0U !=状态)
  {
     状态= SPINLOCKLockStatusSet (baseAddr,spinLockId);
     //printf("在锁定乐趣状态的 while 循环中旋转=%d \n",状态);
  }

}

使 MulticoreLockRelease()//无效 以释放锁定

  UINT32_t baseAddr = SOC_SPINLOCK;
  UINT32_t spinLockId = SPINLOCK _ ID;
  SPINLOCKLockStatusFree (baseAddr,spinLockId);

}

此致,
马纳维 H V

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    在 EVE1和 EVE2上释放锁并重新获取锁后,您能添加一些延迟,看看会发生什么情况?

    此致,
    斯坦利