ICELL Interface—Cells as Algorithm Containers:

DSP的算法标准(XDAIS)为算法提供了一个标准的接口.这样我们就可以使用第三方的算法.For technical detailson the TMS320 DSP Algorithm Standard, see TMS320 DSP AlgorithmStandard Rules and Guidelines (SPRU352) and the TMS320 DSPAlgorithm Standard API Reference (SPRU360).

RF5的应用程序使用了相对多的算法和通道,为了简化算法的融合,RF5使用"cell".一个"cell"是一个XDAIS算法的封装.一个RF5通道可以包含多个细胞,因此多个算法.在通道结构的核心是细胞的概念.算法的运行时函数可以不同.一个细胞是一个标准的算法封装.对每一个算法实例,就会有一个细胞对象.通道不直接和算法接口,而是同细胞接口,结果调用算法接口.RF5提供细胞接口ICELL.他的结构被接口定义,而没有ICELL模块函数调用.

ICELL接口类似于IALG接口规范.也就是,这个接口的结构在头文件中定义.必须有一个结构来使用.对ICELL和IALG来说,最主要的区别是算法提供者被要求使用IALG接口.而,算法设计者一般为每个算法使用ICELL接口来为某个特别地应用定制.

应用必须创建如下的结构为每一个算法:

  • ICELL_Fxns类型的结构和它的函数.这个结构为算法的执行函数提供了一个一致的接口,它的名字
    和参数不是标准的.这个结构在RF_DIR\include\icell.h中定义:
    typedef struct ICELL_Fxns {
        Bool(*cellClose )(ICELL_Handle handle);
        Int(*cellControl)(ICELL_Handle handle, IALG_Cmd cmd, IALG_Status*status);
        Bool(*cellExecute)(ICELL_Handle handle, Arg arg);
        Bool(*cellOpen )(ICELL_Handle handle);
    } ICELL_Fxns;

    例如:RF_DIR\apps\rf5\cells\vol\cellVol.h和cellVol.c文件使用了ICELL_Fxns结构和它的函数为VOL算法.
    Int VOL_cellControl( ICELL_Handle handle, IVOL_Cmd cmd, IVOL_Status*status);
    Bool VOL_cellExecute( ICELL_Handle handle, Arg arg );

    ICELL_Fxns VOL_CELLFXNS = {
        NULL,
       VOL_cellControl,
       VOL_cellExecute,
        NULL
    };
    cellClose,cellControl,cellOpen并不一定需要.cellExecute是必须的.cellExecute在线程的主循环中被调用了很多次.cellControl可以被偶尔调用来调整控制信息.cellClose,cellOpen是在调用CHAN_open()和CHAN_close()时被使用的.即:在细胞被创建和销毁的时候创建的.
    这些函数一般使用算法提供的IALG执行和AlGRF模块来激活或不激活算法.
    Bool VOL_cellExecute( ICELL_Handle handle, Arg arg )
    {
        IVOL_Fxns*volFxns = (IVOL_Fxns *)handle->algFxns;
        IVOL_HandlevolHandle = (IVOL_Handle)handle->algHandle;
        // activateinstance object
       ALGRF_activate( handle->algHandle );
       volFxns->amplify( volHandle,
        (XDAS_Int16*)handle->inputIcc[0]->buffer,
        (XDAS_Int16*)handle->outputIcc[0]->buffer );
        //deactivate instance object
       ALGRF_deactivate( handle->algHandle );
        return (TRUE );
    }

  • ICELL_Obj对象:
    这个结构体定义了一个细胞的特征.这个结构体在RF_DIR\include\icell.h中定义.我们也可以修改这个结构体.
    typedef struct ICELL_Obj {
        Intsize;                
        Stringname;             
        ICELL_Fxns*cellFxns;    
        PtrcellEnv;             
        IALG_Fxns*algFxns;      
        IALG_Params*algParams;  
        IALG_HandlealgHandle;   
        UnsscrBucketIndex;      
        ICC_Handle*inputIcc;    
        UnsinputIccCnt;         
        ICC_Handle*outputIcc;   
        UnsoutputIccCnt;        
    } ICELL_Obj;

    这个结构体帮助创建ICELL,IALG,ICC和SSCR模块之间的关系.ICELL_Obj结构体中的一些需要我们注意:
    --size和name:大下是:sizeof(ICELL_Obj).name是:算法使用的字符串.
    --cellFxns:这个元素指向了前面描述的ICELL_Fxns.
    --cellEnv:这个是用户自己定义的.每一个细胞都有自己的cellEnv指针,这个可以被用来保持细胞特性指针.每一个细胞可以有不同的结构定义.例如:如果一个算法有相互包含的函数,如,apply1和apply2,cellExecute结构可以决定哪一个函数来执行,这个是基于cellEnv结构体中的一个域,而且这个域是调用函数的线程可以写的.另外一个对cellEnv结构体的使用是存储DMA句柄(被细胞使用).在cellOpen函数中,DMA通道可以被分配并存储在cellEnv结构体中.然后,cellExecute函数可以使用这个DMA句柄.
    --  algFxns, algParams, and algHandle. Theseelements have types defined by the IALG interface that is part ofthe XDAIS specification.
    --  scrBucketIndex. Generally, all cells inchannels executed by tasks at the same priority level should havethe same scrBucketIndex. This element is used by the SSCR module,which is described in Section 7.5, SSCR Module—Shared ScratchMemory, page 54.
    --  inputIcc andoutputIcc:这些元素调用CHAN_regCell()是填充的.这个信息被ICC模块使用.whichis  described in Section 7.4,ICC Module—Inter-CellCommunication, page 52.

  • For example, theRF_DIR\apps\rf5\threads\process\thrProcess.c file creates an arrayof elements of type ICELL_Obj for all the cells in the application,which you should modify to integrate your algorithms. The followingportion
    shows the declaration of the first cell.

【DM642】ICELL Interface—Cells as Algorithm Containers的更多相关文章

  1. 【转】Go Interface 源码剖析

    源网址:http://legendtkl.com/2017/07/01/golang-interface-implement/ 0.引言 在上一篇文章 <深入理解 Go Interface> ...

  2. 【转】Android Interface的使用

    原文网址:http://www.3g-edu.org/Android_free/art115.htm Android应用程序采用Java语言编写,Java语法和C/C++有很大的相似性,但也有一些特别 ...

  3. 【SSSP】A forward-backward single-source paths algorithm

    0. 引子基础的算法和数据结构已经学习的差不多了,上学期期末就打算重点研究研究STOC和FOCS上面的论文.做这件事情的初衷是了解别人是如何改进原有算法的,搞清楚目前比较热的算法问题有哪些,更重要的是 ...

  4. 【转】comparable Interface

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.什么是Comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 , ...

  5. 【Leetcode_easy】1030. Matrix Cells in Distance Order

    problem 1030. Matrix Cells in Distance Order 参考 1. Leetcode_easy_1030. Matrix Cells in Distance Orde ...

  6. 【leetcode】1030. Matrix Cells in Distance Order

    题目如下: We are given a matrix with R rows and C columns has cells with integer coordinates (r, c), whe ...

  7. 【leetcode】957. Prison Cells After N Days

    题目如下: There are 8 prison cells in a row, and each cell is either occupied or vacant. Each day, wheth ...

  8. 【DM642】H.264源代码在DM642上的移植

    TI公司提供了用于C语言开发的CCS(Code Composer Studio),该平台包括了优化的ANSI编译器,使之可以使用C语言开发DSP程序.这种方法不仅使DSP开发的速度大大加快,而且DSP ...

  9. 【LeetCode】1030. Matrix Cells in Distance Order 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 排序 日期 题目地址:https://leetcod ...

随机推荐

  1. <day003>登录+爬取淘宝商品信息+字典用json存储

    任务1:利用cookie可以免去登录的烦恼(验证码) ''' 只需要有登录后的cookie,就可以绕过验证码 登录后的cookie可以通过Selenium用第三方(微博)进行登录,不需要进行淘宝的滑动 ...

  2. POJ 3348 /// 凸包+多边形面积

    题目大意: 给定的n个点 能圈出的最大范围中 若每50平方米放一头牛 一共能放多少头 求凸包 答案就是 凸包的面积/50 向下取整 /// 求多边形面积// 凹多边形同样适用 因为点积求出的是有向面积 ...

  3. where与having区别

    解释一. 聚合函数是比较where.having 的关键. 开门见山.where.聚合函数.having 在from后面的执行顺序: where>聚合函数(sum,min,max,avg,cou ...

  4. virtualbox虚拟机下的cdlinux找不到无线网卡的解决方法

    virtualbox虚拟机下的cdlinux找不到无线网卡的解决方法 自己解决了,记录一下. cdlinux 带reaver1.4的版本 http://pan.baidu.com/share/link ...

  5. 论一个X倒下了千千万万个X站起来了

        一个人倒下了,千千万万个人站起来了.起源自革命时期的标语.后来又被应用于各种激励的场景.     这句话在当时环境是好的,但是在无数人应用在不同场景,并且这些场景都不怎么好的时候.人的普遍思维 ...

  6. 如何快速合并多个TXT文本内容

    工作中有时候需要合并很多文本内容,例如一些推送清单之类,一个一个打开去复制粘贴的话,少量还行,如果txt文本数据量大(10+M以上)且文件数量多(成百上千),这种方式就显得很低效了.具体要求如下:   ...

  7. Algo: Dynamic programming

    Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...

  8. Android开发 ViewPager删除Item后,不会更新数据和View

    问题描述: 在使用ViewPager的适配器删除适配器里一个Item后依然会,而删除的这个item依然会保留缓存,适配器不会重新加载更新数据.如下代码: public class TReleaseCi ...

  9. JAVA数据结构之数组

    接下来的几篇博文会在最近仔细研读数据结构与算法的书籍后会摘录一些要点和总结一些自己的心得体会,帮助大家更深入地理解java中的数据结构和一些基本的算法,同时巩固自己数据结构和算法这些最基础的计算机知识 ...

  10. leetcode146周赛-1131-绝对值表达式的最大值

    题目描述: class Solution: def maxAbsValExpr(self, arr1, arr2) -> int: def function(s1,s2): result1=[] ...