HSEM--双核MCU_H417的核与核之间的硬件信号量

在RTOS中,信号量(Semaphore)是一种实现任务间通信的机制,可以实现任务之间同步或临界资
源的互斥访问,常用于协助一组相互竞争的任务来访问临界资源。在多任务系统中,各任务之间需要
同步或互斥实现临界资源的保护,信号量功能可以为用户提供这方面的支持。在双核MCU中同样存在
核与核之间对公共资源的访问,任务同步等问题,H417提供了32路硬件信号量通道,用于在多核中不
同进程运行间的同步操作,并提供非阻塞单指令锁定模式。
 
 1,通知:

image

我们可以利用此机制实现双核之间通知

配置如下:

image

中断服务函数:

image

 

 当我们屏蔽掉上面的释放信号量函数时,发现V3中的代码会一直卡在

while(Notif_Rx == 0)标志上。,
2,同步:
一般有两种方式,可以利用上面的释放信号量产生中断来唤醒对应核来实现,其实我们几乎任意demo都采用了该机制
也就相当于是例程的执行流程一般都是:先进V3,V3里NVIC_WakeUp_V5F(Core_V5F_StartAddr);唤醒V5,然后执
行V5,并且此时V3进入低功耗,然后V5触发信号量,唤醒V3,从而实现双核的同步。

image

 方式1,

image

 该方式也可以放到主循环while1中,以实现低功耗的目的。

方式2,
我们采用硬件信号量机制:
这个就比较好理解了,不在过多赘述,其中一个核心释放信号量,才会跳过该循环,以实现同步的目的。
 
 
while(HSEM_GetOneSemTakenState(HSEM_ID0) == 0)

3,互斥

既然是双核心,避免不了的可能会同时使用到共享资源,如都需要使用同一个通讯接口发送数据,同一个IO,同一段

内存等,这个是不能同时使用的,不然可能会造成一些意料之外的问题,需要避免,这时就可以利用硬件信号量实现互斥

的机制。我们来验证下。

image

这时我们通过串口打印可以很清晰的看到,当PA1接地时,V3申请到信号量,

这时V5中将会一直打印printf("V5 get no ok..\r\n");,当松开PA1时,V5得以

申请到信号量。

posted @ 2025-08-01 11:42  WCH_CH32  阅读(82)  评论(0)    收藏  举报