TIwilliam hill官网
直播中

杨芳

7年用户 162经验值
私信 关注
[问答]

C66硬件信号量的三种模式

一直在和C66系列打交道,有些经验理解,和大家分享,可能会有些纰漏,欢迎探讨:)
C66的硬件信号量用于保护核间的零界资源,C6678有64个硬件的信号量,可工作在以下三种模式下:
直接模式:如果硬件信号量可用,则返回0x1并获得信号量;如果信号量不可用,则返回占用当前信号量的核号,然后立即就退出。
非直接模式:如果信号量可用,则返回0x1并获得信号量;如果不可用,则此核必须持续申请直到获得信号量为止。所有对此硬件信号量的申请都进入一个先进先出队列,进行排序。
组合模式:如果硬件信号量可用,则返回0x1并获得信号量;如果信号量不可用,则返回占用此信号量的核号,并向占用此信号量的核发去申请,如果申请被占用信号量的核允许,则可立即获得信号量。
C66x系列中,核间共享资源,经常会用到spin_lock(),那spin_lock()的底层是如何实现的呢?
主要通过硬件信号量实现,硬件信号量用于保护不同核间,以及核与外设之间的资源共享/同步。
在C66x中硬件信号量有下面三种类型:
OSEck中的spin_lock使用第一种模式(直接模式),然后在软件上使用循环。
有问题欢迎探讨。
William.dong@enea.com

回帖(2)

罗兰君

2018-6-21 01:39:27
Thanks for sharing!
                                                                         Jane
举报

王永佳

2018-6-21 01:50:07
你好,我最近也在看这个硬件信号量。希望可以多多交流。
一下几点和您写的不太相同,希望进行探讨:
1.c6678应该只有32个硬件信号量,因为看了csl中关于硬件信号量的寄存器定义只有32个。
2.关于非直接模式的描述,通过一次获取后,申请者不需要一直进行获取,在调用此接口并且当前信号量不是free的时候,系统中会进行记录,当此硬件信号量可用时,系统会把此信号量的拥有者设置为在排队的第一个申请者,并给申请者发送0x10号中断,申请者收到中断后,就可以确定自己已经获得了硬件信号量。另外,非直接的方式是没有返回值的。
3.关于组合模式,只是将直接和非直接获取的模式进行了合并,有返回值,并且如果没有立即回去可以接受信号量中断。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分