zl程序教程

您现在的位置是:首页 >  其它

当前栏目

《CMEM与DSPLINK详解(一)》:CMEM与DSPLINK简介

详解 简介
2023-09-14 08:57:58 时间
h2 align= center CMEM与DSPLINK简介 /h2 p 在双核(ARM+DSP)系统中(典型的为达芬奇系统),如何共享缓冲区并进行通信是一个值得学习和思考的问题。 /p p CMEM是一个连续物理存储空间分配模块,使得ARM端Linux进程和DSP端算法之间能够共享缓冲区。DSPLINK即DSP/BIOS LINK是基于DaVinci架构处理器的ARM与
CMEM与DSPLINK简介

在双核(ARM+DSP)系统中(典型的为达芬奇系统),如何共享缓冲区并进行通信是一个值得学习和思考的问题。

CMEM是一个连续物理存储空间分配模块,使得ARM端Linux进程和DSP端算法之间能够共享缓冲区。DSPLINK即DSP/BIOS LINK是基于DaVinci架构处理器的ARM与DSP端进行通信。

1、CMEM

由于应用程序是运行在 MontaVista Linux 之上,在应用程序里进行的地址空间都是虚拟地址,实际上的物理地址空间不一定是连续的,当将这个指针传递给 DSP 端的算法时, DSP 不能够进行处理,因为 DSP 端的算法运行在 DSPBIOS 之上,而 DSP端只能访问实的物理地址,为了解决这个问题, TI 提供了一个 CMEM 模块,用于解决这个问题。

CMEM 是一个连续物理存储空间分配模块,使得 ARM 端 Linux 进程和 DSP 端算法之间能够共享缓冲区。当应用程序需要在共享缓存区动态申请一个连续的物理空间时,通过调用 CMEM 的 API 可以实现,申请得到的空间可以供 DSP 端访问,进行算法处理时数据的传递与处理。

对于DVS365开发套件,CMEM位于:..\dvsdk_2_10_00_17\linuxutils_2_24_02\packages\ti\sdo\linuxutils\cmem

注意:DVS365下的cmem下的demo和测试代码make不通过,待处理。。。。基本测试流程如下图所示:

CMEM Demo 提供了以下测试程序, apitest 用于演示测试 CMEM 的 API 功能,translate 用于演示虚拟地址与实物理地址之间的转换,具体流程如下图所示:

2、DSPLINK

DSPLINK 即 DSP/BIOSTMLINK 是基于 DaVinci 架构处理器的 ARM 与 DSP 端进行通信, DSPLINK 提供了一套通用的 API,从应用层抽象出 ARM 与 DSP 的物理连接特性,从而降低用户开发程序的复杂度。 DSPLINK 可以为用户提供以下 API 服务:
--基本的处理器控制;
--基于逻辑通道的数据传输;
--基于 DSP/BIOS 的 MSGQ 模块的消息传递机制,支持 Zero Copy和 ProcessorCopy 两种物理机制的消息传递。

在实际应用中,应用可能不需要 DSPLINK 提供的所有模块功能,而且可能只需要一种消息传递机制,因此 TI 的 DSPLINK 提供了可配置功能,用户可以根据自己的需要进行裁剪配置,以满足应用需求。

DSPLINK的软件架构如下图所示:

2.1、GPP

从上图看,在 GPP 端,一般运行一个操作系统,基于 GPP 上还有以下模块:OS抽象层、LINK Driver、Processor Manager、DSP/BIOS LINK API。

--OS抽象层 :该层包含了 DSPLINK 需要的一些通用的 OS 服务部件,提供一套通用的 API 与 OS 的其他组件隔离,其他组件通过API 访问不进行直接的访问。而此特性也使DSPLINK 可以方便的移植到不同操作系统中。

--LINK Driver :该层包含了基于 GPP 与 DSP 的物理连接的底层控制操作,负责 GPP 与 DSP 之间的数据传输和 DSP 的运行等操作。

--Processor Manager:该层维护一个针对所有模块的 Book-Keeping 信息,通过 API 给用户提供通过 LINK Driver 的控制操作。

--DSP/BIOS LINK API:该层是提供给 GPP 端的接口,是非常轻小型的组件,API 层可以认为是基于 PROCESSOR MANAGER 和LINK DRIVER 之上的层。

2.2、DSP

LINK DRIVER 是 DSP/BIOS 中驱动的一部分,该部分驱动只负责基于物理连接之上与 GPP 之间的交互。 DSP 端没有 DSPLINK 的 API ,通信是基于DSP/BIOSTM 模块上的 SIO、 GIO、 MSGQ 模块实现。


NSIndexSet 简介 NSIndexSet (以及它的可修改子类, NSMutableIndexSet) 是一个排好序的,无重复元素的整数集合。它看上去有点像 支持离散整数的 NSRange .它能用于快速查找特定范围的值的索引,也能用于快速计算交集, 同时,Foundation collection class 提供了很多好用的方法,方便你使用 NSIndexSet.
TrueLicense简介 TrueLicense是一个开源的证书管理引擎,官网 使用场景:当项目交付给客户之后用签名来保证客户不能随意使用项目 默认校验了开始结束时间,可扩展增加mac地址校验等。 其中还有ftp的校验没有尝试,本文详细介绍的是本地校验 license授权机制的原理: 生成密钥对,方法有很多。
exosip 和 pjsip 简介 oSIP  oSIP的开发开始于2000年7月,第一个版本在2001年5月发 布,到现在已经发展到3.x了。它采用ANSI C编写,而且结 构简单小巧,所以速度特别快,它并不提供高层的SIP会话 控制API,它主要提供一些解析SIP/SDP消息的API和事务处理 的状态机,oSIP的作者还开发了基于oSIP的UA lib:exosip和 proxy server lib:partysip.