《CMEM与DSPLINK详解(二)》:DSPLINK关键组件

DSPLINK关键组件

DSPLINK关键组件有8个,下面分别进行介绍。

1、PROC

 PROC 组件表述应用空间的 DSP 处理器, PROC 是处理器的缩写。该组件提供以下服务:

--
初始化 DSP,使之能从 GPP 端进行访问;

--
加载 DSP 的代码至 DSP 处理器;

--
从 DSP 代码制定的地址运行 DSP 程序;

--
读写 DSP 端的地址空间;

--
停止 DSP 端程序的运行;

--
其他一些平台专有的控制操作;

目前版本只支持一个处理器,而
API 设计支持多个 DSP 处理器,因此为提供了一个 processorId 参数以支持以后的多处理器功能。

2、CHNL

 CHNL 是 channel 的缩写,该组件表述应用空间的一个逻辑数据传输通道,负责 GPP 与 DSP
之间的数据传输。通道 channel 的概念如下述:

--
一种 GPP 与 DSP 端传输数据方式

--
一个基于 GPP 与 DSP 的物理连接上的逻辑实体映射

--
唯一的一个数字标识一个专用连接到 DSP 的一组 channel 中的某个 channel

--无方向性,通道方向可以在运行时进行配置;

多通道复用在
DSP 端与 GPP 端的一条物理连接上,物理连接基于 link 和相关 link 驱动的特性。

被传输的数据中不包含目的和源地址的任何信息,数据发送与接收端的数据通路需要应用前进行显式的建立。该组件采用
issue-reclaim模式进行数据传输,基于 DSP/BIOSTM的
SIO 模块模仿 issue-reclaim 行为模式。

3、MSGQ

 MSGQ 是 message queue 的缩写,表述基于 message 的队列,负责 GPP与
DSP 端的可变长度的短消息交互,基于 DSP/BIOSTM的 MSGQ 模块实现。

message
的发送接收都通过消息队列实现,消息接收者从消息队列接收信息,而消息发送者将数据写入到消息队列中,一个消息队列只可以有一个接收者,但可以有多个发送者。一个任务可以读写多个消息队列。

4、POOL

 此模块提供了 API 用于配置共享内存区域,同时还提供两个 CPU 间的缓存数据同步的 API
接口。此模块提供如下功能:

--通过调用打开(open)和关闭(close)配置共享内存区域;

--在共享内存区域内分配或释放缓存;

--分配的内存地址可以在不同的地址空间内转换;

--在不同
CPU 核之间实现内存数据的同步。

5、NOTIFY

 此组件允许应用程序为发生在远程处理器上的事件通知(Notification)注册,并发送事件通知给远程的处理器。允许应用程序为远程处理器上的事件注册一个带事件回调函数;使能应用程序发送事件通知到远程处理器;同时,应用程序也可以发送一个事件处理的选项值。

Notify
组件为事件通知定义了优先级,优先级通过事件编号来实现,低编号的事件享有更高的优先级。如果事件通知不再需要使用,应用程序也可以实时注销其相应的回调函数。

6、MPCS

 应用程序 MPCS 实现 GPP 和 DSP( Multi-Processor Critical Section)互斥访问共享的数据结构。应用程序有时候需要定义属于自己的,并能够被多个处理器访问的数据结构,用于多个处理器之间信息的通信。但是,应用程序必须保证多个处理器,或者每个处理上的
各个任务之间互斥的访问这些数据结构,从来保证数据的连贯性。为了实现这个设想, MPCS被用来支持这个功能。

在拥有可以共同访问的内存区域的多处理器系统中,可以实现
GPP 和 DPS 之间的MPCS。为了防止没有共享存储区域的情况出现,该模块内部实现了 MPCS 组件要求的带保护的同步。

MPCS
组件提供了 APIs 接口来创建和删除 MPCS 的实体。每个 MPCS 实体通过一个系统唯一的字符串名字来标识。每一个需要使用 MPCS 的客户端都需要调用 API 打开函数来获取句柄。当不再需要使用
MPCS 时,通过相应的 API 函数来关闭句柄。同时也提供了进入和离开 MPCS 对象句柄指定的临界区域的 API 函数。

如果
MPCS 对象要求的存储空间由用户提供的话,它必须位于所有处理器都可以访问到的池(Pool)中;如果在创建对象的时候不提供存储空间,则指定池的 ID 号将被 MPCS对象用来内部分配空间。

7、MPLIST

 此组件提供给予 GPP 和 DSP 之间传输机制的双重循环连接列表。在 GPP 和 DSP 之间存在共享存储空间的设备上,该模块实现共享存储空间的连接列表。对于不存在共享存储空间的设备,该模块内部保持远程处理器上连接列表的一致。

该组件提供了创建和删除
MPLIST 实体的 APIs 函数。每个 MPLIST 实体通过一个系统宽唯一的字符串名字来标识。每一个需要使用 MPLIST 的客户端都需要调用 API 打开函数来获取句柄。当不再需要使用
MPLIST 时,通过相应的 API 函数来关闭句柄。

MPLIST
组件提供的 API 函数,可以在列表中最后加入一个新的元素,或者删除列表前面的一个元素。也允许应用程序在某个已有的列表元素前插入一个缓冲,删除列表中任意一个指定的元素。并提供了检查列表是否为空的
API 函数。另外,还有 API 函数,通过获取列表首元素的指针和指定元素后的一个元素,横断列表。

8、RING IO

 该组件提供基于数据流的循环缓冲区。该组件允许在共享存储空间创建循环缓冲区。不同的处理都能够读取或者写入循环缓冲区。
RINGIO 组件允许写指针获取数据缓冲区的空存储空间,当该存储空间被释放之后,相应存储空间可以再次写入。

RINGIO
组件允许读指针获取缓冲区中读取空间的有效数据。当被释放之后,相应存储空间的数据被标记为无效。每个 RINGIO 实体拥有一个读指针和一个写指针。 RINGIO 组件也有
API 函数,可以使能数据属性的同步传输。如: EOS(End Of Stream)、事件戳、流偏移地址等,也可伴随着循环缓冲区的偏移值。

时间: 2024-09-10 14:53:57

《CMEM与DSPLINK详解(二)》:DSPLINK关键组件的相关文章

Masonry自动布局详解二:动画更新约束

Masonry自动布局详解二:动画更新约束 说到iOS自动布局,有很多的解决办法.有的人使用xib/storyboard自动布局,也有人使用frame来适配.对于前者,笔者并不喜欢,也不支持.对于后者,更是麻烦,到处计算高度.宽度等,千万大量代码的冗余,对维护和开发的效率都很低. 笔者在这里介绍纯代码自动布局的第三方库:Masonry.这个库使用率相当高,在全世界都有大量的开发者在使用,其star数量也是相当高的. 支持原创,请阅读原文 效果图 本节详解Masonry的以动画的形式更新约束的基本

QtDBus编程详解(二)

                                                           QtDBus编程详解(二)   我在上一篇博客QtDBus编程详解(一)中主要讲述了与QtDBus以及DBus相关的基本概念,这一章节,我将重点讲述关于QtDBus通信.   QtDBus通信,就必须有服务端和客户端(关键是弄清楚哪一端是server,哪一端是client). 我们先来看看,QtDBus通信,server和client需要做些什么工作.   server: 1.申

Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

  [Android布局学习系列]   1.Android 布局学习之--Layout(布局)详解一   2.Android 布局学习之--Layout(布局)详解二(常见布局和布局参数)   3.Android 布局学习之--LinearLayout的layout_weight属性   4.Android 布局学习之--LinearLayout属性baselineAligned的作用及baseline      Layout Parameters(布局参数):            在XML文

IReport与JasperReport开发详解二

详解  IReport与JasperReport开发详解二        3.2.1  设计报表                现在请点击菜单"DataSource"然后选取中"Report query"项,也可以点击图标 ,接着IReport会弹出一个对话框(如图):现在我们在"Report SQL Query"中输入SQL语句"select * from titles",然后去掉"Automatically Re

使用Java构造和解析Json数据的两种方法(详解二)_java

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Json数据的方法

Bootstrap框架的学习教程详解(二)_javascript技巧

Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. 一.下载Bootstrap Bootstrap (当前版本 v3.3.0)提供以下几种方式帮你快速上手,每一种方式针对具有不同技能等级的开发者和不同的使用场景. 下载地址:http://v3.bootcss.com/getting-started/ PS:其实我们不用下载bootstrap也可以使用它: Bootst

Android Loader 异步加载详解二:探寻Loader内部机制

Android Loader 异步加载详解二:探寻Loader内部机制 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70259914 本文出自[赵彦军的博客] Android Loader 异步加载详解一:基础概念 Android Loader 异步加载详解二:探寻Loader内部机制 在上一篇文章中,讲解了 Loader 的基本概念.这一篇将会用实战的方式来探寻 Android Loader的内部机制.我们准备做一个 读取手

Kafka详解二、如何配置Kafka集群

Kafka集群配置比较简单,为了更好的让大家理解,在这里要分别介绍下面三种配置 单节点:一个broker的集群 单节点:多个broker的集群 多节点:多broker集群 一.单节点单broker实例的配置 1. 首先启动zookeeper服务      Kafka本身提供了启动zookeeper的脚本(在kafka/bin/目录下)和zookeeper配置文件(在kafka/config/目录下),首先进入Kafka的主目录(可通过 whereis kafka命令查找到):      [roo

Oracle数据操作和控制语言详解(二)

oracle|控制|数据|详解 事务控制 事务控制包括协调对相同数据的多个同步的访问.当一个用户改变了另一个用户正在使用的数据时,oracle使用事务控制谁可以操作数据. 事务 事务表示工作的一个基本单元,是一系列作为一个单元被成功或不成功操作的SQL语句.在SQL和PL/SQL中有很多语句让程序员控制事务.程序员可以: 1.显式开始一个事物,选择语句级一致性或事务级一致性 2.设置撤销回滚点,并回滚到回滚点 3.完成事务永远改变数据或者放弃修改. 事务控制语句 语句 用途 Commit 完成事