嵌入式SoC硬件信号量的保证
我在玩一些拥有多核的MCU,例如STM32H7系列,但现在基于RISC-V的核在硬件中都实现了一个HSEM信号量,可以被单个CPU/PID锁定。
我难以理解在这种情况下会发生什么,我在上层的软件中实现了嵌套等功能,但我更关心HSEM外设的保证。
场景:
给定一个HSEM通道HSEM0,用来保护比如一个共享外设。
当Core0以 PID 0进行锁定时,我会读回lock = 1、core = 0、pid = 0。
在这次锁定期间,同一个Core0想要获取同一把锁,Core0和 PID 0,系统将如何检测它已经被锁定?因为它总是会返回lock = 1、core = 0、pid = 0,显示为已成功获取,但实际上应该标记为已被锁定而失败。
在查阅了一些STM32的数据手册、应用笔记,以及实现同一HSEM组件的一些中文资料后,我看不出如何在同一个核心中使用它。
解决方案
尽量通过一个库来统一访问HSEM。
在一个拥有N 个核心的系统中,分配一个长度为N 的表(数组)。
调用方发出锁请求。
库会查询该表,在“已锁定”的情况下可能会立即返回。
或者库可能使用HSEM,在返回给调用方之前在表中做一个记录。
解锁也同理。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。