深入理解DM8168中的线程通信

多核异构的硬件基础:共享存储区和寄存器和中断的设计。

寄存器和中断用来实现各个核中进程间的事件的通信,共享存储区用来实现各个核之间的数据的传递与共享。

1+《基于T264的编码器在多核异构处理器上的设计与实现_王娇》这篇文章讲的非常详细

包括本地通信流程,异地通信流程。




在存储器 DDR3 中开辟多核之间可以共享的缓冲区,每个通道所映射缓冲区地址独立, 以供多核之间进行数据传递


link 在视频数据流中是最基本的单元模块 , 每个
link 中包含了一个基于 BIOS6/Linux 任务 线程
消息盒(
使用操作系统的信号量实现 ) 由于每个 link
运行一个独立的线程 , 因此各个 link 之间可以并行
运行
消息盒是关联用户指定的 link , link 之间有
个互相对话的机制
, 用来传递信令 而对于视频流数
原始图像数据的传递 link 实现了专门的接口来
实现
,只传递指针,而不是数据 基于 link 结构 , 视频
处理的流程中
, 所有工作量就可以均衡到每个处理
器内核上去执行


Mailbox 为处理器提供了通过写寄存器向其他处理器发送中断的机制 

DM8168 通过自旋锁( Spinlock )实现了系统共享资源的互斥

根据这 linkId 判断这个消息是发给本地的 link 还是远端处理器的 link
如果是本地的直接调用
BIOS/LINUX API 函数,否则就通过 Syslink 模块的 MessageQ 发送这
个消息到指定的处理器,让其调用对应的函数处理



link 之间使用缓冲队列进行帧交换 ,没有理解FULL队列和EMPTY队列

getFullFrames :该 link 从设备驱动获取视频数据;
putEmptyFrames :归还该 link 的帧 buffer 

当一个 link 采集完或处理完一帧数据后会发送一
个消息“
SYSTEM_CMD_NEW_DATA” 给后向的 link ,通知它有数据可取; 后向 link 收到该
消 息 后 可 调 用
System_getLinksFullFrames() 函 数 来 获 取 帧 数 据 , 处 理 完 后 再 调 用
System_putLinksEmptyFrames() 函数来归还给前向 link 继续使用   为什么要归还

读取上一个Link的数据信息
如果需要处理帧,则分配空buffer
将处理之后的buffer指针传递给输出队列,并且通知下一个Link






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值