![]() |
|
||||||||||||||
| . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测室 . 技术文库 . 会员区 . 商城 . 服务导航 . 邮购 . 资源 . | ||
|
||
|
|||||
| DM642 RF框架小结 | |||||
作者:A005 文章来源:本站 点击数: 更新时间:2007-2-28 ![]() |
|||||
|
RF5 主要实现三个功能,存储管理,线程模型和通道封装,对于不同的应用,我们只需在这三个元素上做修改,而对于整个应用程序,不用从头设计,这样大大简化了开发者的开发难度,缩短了开发时间。 RF5适用于包含大量的算法,且要求多线程,多通道的应用,如图像处理,多媒体应用等,以Ti提供的实例mpeg2loopback为例,对RF5进行分析。 RF5包含的元素有: 1 线程(Thread): RF5框架包含四个基本的数据处理元素,处在最顶层的是线程,线程总是顺序的执行所包含的通道,线程在一个比较高级的级别上把数据组织在一起,他们可以与别的线程,设备驱动以及别的类似结构进行通讯,在mpeg2lookback实例中,创建了三个线程分别是tskVideoInput,tskVideoOutput和tskProcess。每个线程都在不断的等待消息,处理数据,并将结果发送给其他的线程,同时有可能还要发送同步消息给其他线程已实现线程间的通讯,这里使用的机制是SCOM模块。 每个线程都是进行数据处理的一个单元,有的是处理简单的,有的处理是相对复杂的过程,简单的线程可以不包括任何的通道,而进行复杂数据处理的线程有可能包含多个的通道。 2 通道(Channel): RF5提供了一种通道结构是为了更方便的封装算法,这可以理解通道为并行里的串行,因为线程的执行就是由通道的串行执行来完成的,一个通道包含一组核(Icell),其主要任务就是依次顺序的执行所包含的核,主要执行的流程为:首先需要初始化通道模块,然后建立通道对象,注册该通道所包含的核对象,接着依次执行每个核,执行完成了后就销毁对象,最后退出。每个通道可以包含多个核,每个核都要进行初始化后在调用CHAN_regCell注册。 通道对象的结构如下: typedef struct CHAN_Obj { 3 核(Icell): 核实际上就是ICELL接口对象,基于RF5的应用常常包含大量的算法和通道,为了便于算法集中到应用中,RF5提出了核的概念,一个核就是包含一种XDAIS算法的容器,一个RF5通道对象可以包含多个核,也即是包含多个算法,通道通过核来调用算法,实际上,真正的数据处理是在XDAIS算法,核只是提供一个调用算法的接口,这大大简化了工作量,便于移植。 该接口包含一个重要的结构:ICELL_Fxns,该结构包含一组函数指针。通道通过调用这些函数来调用算法,其中包含一个关键的函数cellExecute,这个函数的功能是调用XDAIS算法来执行,上面的通道执行函数CHAN_execute就包含了每个cellExecute的调用。 4 ICC模块 ICC模块是用来管理在核之间以及核与其他线程之间的数据通讯,我们知道线程间的数据传输是通过SCOM模块来实现的,每个ICC模块管理一个或者多个ICC对象,每个核都有一组输入和输出ICC对象。这些对象是通过CHAN_regCell()来注册到相应的通道里。 5 同步通讯机制(SCOM) ThrProcess中包含两个SCOM对象,RF5使用SCOM对象来实现线程的通讯。SCOM消息时用户自定义的一个机构,一个线程通过调用SCOM_putMsg()函数将SCOM消息放置一个SCOM队列中,发送给其他的线程,或者通过调用SCOM_getMsg()函数从队列中获取消息,一般情况下,发送消息指明接收线程所要读取的数据缓冲区的地址(以指针形式),接收消息指明发送线程所要写入的数据缓冲区的地址,在mape2loopback实例中,thrProcess要从thraVideoInput接收消息,并发送消息给thrVideoOutput输出图像。RF5使用SCOM来实现线程间的通讯:thrProcess拥有一些缓冲区,需要thrVideoInput写或thrVideoOutput读,所以thrProcess通过SCOM告诉thrVideoIput和thrVideoOutput线程数据缓冲区的地址,同时还要保证两个线程不会同时访问同一个缓冲区。thrProcess创建了两种消息以分别和两个线程进行通讯,scomMsgRx和scomMsgTx,scomMsgRx指定了被thrVideoInput写的缓冲区地址,scomMsgTx指定了被thrVideoOutput读的缓冲区地址。 在实际的操作中,可是将SCOM看作是种同步标记,她用来区分模块内存是否正在被其他线程所使用,这样就可以放置内存访问的冲突。整个系统中包含很多存储区,这些内存区很有可能在某一时刻正在被某一线程访问,为了保证在任意时刻只有一个线程访问某一块内存,当前正在访问这一内存块的线程通过发送SCOM消息给与这一内存块有关联的线程,告诉他,“我正在访问呢,你等会再来吧”。当他访问完后,放弃了这一内存块的占有权,再通过SCOM消息告诉相关联的线程,“我用完了,你可以用了。”于是相关联的线程就可以访问了。 6 ALGRF模块—算法的实例化Algorithm Instantiation ALGRF Module用DSP/BIOSMEM内存管理器来创建和删除XDAIS算法的模块。参考框架服务简化XDAIS部件的使用。所有符合XDAIS标准的算法都必须使用一个标准的接口——IALG接口。ALGRF使用算法的IALG来实现对XDAIS算法的实例化。任何符合XDAIS标准的算法都可以被ALGRF所使用。 用户代码不必直接的调用ALGRF函数,这个工作由CHAN和其他的库函数来完成。例外的是cell wrappers中的ALGRF_activate/deactivate序列化:如果cell中的XDAIS算法执行IALG_active/deactivate函数,细胞需要调用两个ALGRF函数来完成。 三个模块来简化IALG接口创建算法对象,RF5使用ALGRF模块来创建,配置,删除XDAIS算法实例。ALG模块使用CCStudio作为通用目的使用,并且不用DSP/BIOS MEM模块分配内存.ALGMIN是三个中的最小应用。 一般情况下,三个模块是相互包含的,但是只有一个能在应用程序中使用。ALGRF适于RF5的需要和别的RF级别,而不适合紧凑和底端的如RF1级别的系统。 ALGRF与ALG相比,有以下的优势: 1 更小的代码脚本(代码量): 作为一个通用的模块,ALG支持malloc/free 运行时库和DSP/BIOS MEM_alloc/MEM_free动态内存分配方式,ALGRF只支持DSP/BIOS分配,这为设计者省了代码空间,另外ALGRF保证没有无用代码的存在.只有被调用的函数才被连接到执行程序中。 2 暂存区支持: 下面的API在ALGRF中介绍的实例: 3 从DSP/BIOS堆标签中做提取: ALGRF使用DSP/BIOS 的MEM模块动态分配内存。一个堆标记或内存段名可以传给 |
|||||
| 欢迎点击进入:TI德州中文网 (国内唯一针对TI应用的中文技术网站) 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| DM642上TCP/IP协议的实现及性… 基于DM642嵌入式无线视频监控… DM642 I2C通用读写源代码 基于AVS-M和DM642视频服务器… DM642 Ver2.0多路实时图像处… DM642与百兆以太网接口设计 DM642与1394a的接口设计 DM642和线阵CCD的接口 DM642与以太网的接口 DM642与CMOS图像传感器的接口 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|
|