《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)、事件戳、流偏移地址等,也可伴随着循环缓冲区的偏移值。

你可能感兴趣的:(关键组件,DSPLINK)