英飞凌TC264之双核互斥

编程入门 行业动态 更新时间:2024-10-28 00:29:02

<a href=https://www.elefans.com/category/jswz/34/1741611.html style=英飞凌TC264之双核互斥"/>

英飞凌TC264之双核互斥

TC264是双核单片机,在用两个和运行同一资源时会出现竞争的问题,例如CPU0,CPU1在同时调用一个串口时会出现竞争,导致从串口输出值出现乱码,我们可以通过软件来解决这一问题,这就类似于互斥锁。
双方在在开同一扇的同时,谁先拿到钥匙谁就开门,开完门后放回钥匙,等待下一次开门,这样双方就不会出现资源竞争了。
TC264底层也给出了解决方案:

IFX_EXTERN boolean IfxCpu_acquireMutex(IfxCpu_mutexLock *lock);
boolean IfxCpu_acquireMutex(IfxCpu_mutexLock *lock)
{boolean         retVal;volatile uint32 spinLockVal;retVal      = FALSE;spinLockVal = 1UL;spinLockVal =(uint32)__cmpAndSwap(((unsigned int *)lock), spinLockVal, 0);/* Check if the SpinLock WAS set before the attempt to acquire spinlock */if (spinLockVal == 0){retVal = TRUE;}return retVal;
}

例程:

CPU0:
extern IfxCpu_mutexLock g_MutexUart;
main()
{if(IfxCpu_acquireMutex(&g_MutexUart))  //判断互斥量是否使用{UART_PutStr(UART0, "这里是CPU0 \r\n");IfxCpu_releaseMutex(&g_MutexUart);  //互斥量释放}delayms(5);  //这个时间可以让CPU1来使用互斥量
}
CPU1:
IfxCpu_mutexLock g_MutexUart;  //设置互斥信号
main()
{if(IfxCpu_acquireMutex(&g_MutexUart))  //判断互斥量是否使用{UART_PutStr(UART0, "这里是CPU1 \r\n");IfxCpu_releaseMutex(&g_MutexUart);  //互斥量释放}delayms(5);  //这个时间可以让CPU1来使用互斥量
}

按照这个思路我们也可以设置一个全局变量来充当这个互斥量,令这个全局变量为1(钥匙),其中一核拿到1(钥匙),让这个全局变量为0,此时另一核判断全局变量为0(没拿到钥匙),拿到钥匙的核中执行完相应的程序后,再令设置的全局变量为1,这样就是先抢钥匙,抢到钥匙在进行相应的程序,就不会存在资源竞争的问题。

更多推荐

英飞凌TC264之双核互斥

本文发布于:2023-06-22 14:08:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/834271.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:英飞凌   互斥   双核

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!