您好,
我正在使用 任务方法的数据分区为多 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