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. .NETFramework-Web.Mvc:HttpXxxAttribute-目录

    ylbtech-.NETFramework-Web.Mvc:HttpXxxAttribute-目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返 ...

  2. C#窗体代码相关笔记

    获取ComboBox下拉列表的所有选项值 ArrayList al = new ArrayList(); foreach (string item in this.comboBox2.Items) { ...

  3. 在 my_rootfs 中建立 Linux 目录树

    [arm@localhost my_rootfs]#mkdir bin dev etc home lib mnt proc sbin sys tmp root usr [arm@localhost m ...

  4. HTML5 上传图片预览

    html5出现之前如果需要上传图片预览 一般都是先上传到服务器然后远程预览 html5出现之后   有个filereader 解决了这问题 //选中图片之后 $("#fileAddPic&q ...

  5. 利用HttpWebRequest模拟提交图片

    利用HttpWebRequest模拟提交图片 最近在做排量post工具, 以前做的都是提交文字 这次需要post图片过去,弄了半天终于弄好了: /// <summary> /// Post ...

  6. [JZOJ4763] 【NOIP2016提高A组模拟9.7】旷野大计算

    题目 题目大意 给你一个数列,有很多个询问,询问一段区间内,某个数乘它的出现次数的最大值,也就是带权众数. 思考历程 第一次看到这道题,立马想到了树套树之类的二位数据结构,发现不行.(就算可以也很难打 ...

  7. csps模拟测试707172部分题解myc

    题面:https://www.cnblogs.com/Juve/articles/11678524.html 骆驼:构造题,留坑 根据5×5的矩形构造成大矩形 毛一琛: mid in the midd ...

  8. LintCode_1 单例模式

    从今天开始我的LintCode之旅,由于C/C++好久没有使用了,语法生疏不说,低级错误频繁出现,因此在做题之后,还会有部分时间复习语法项目. ---------------------------- ...

  9. Ajax之json返回结果是集合的处理

    Jquery实现ajax: $.ajax({       type    //数据的提交方式:get和post        url   //数据的提交路径        async   //是否支持 ...

  10. UNION All中ORDER By的使用

    一个sql中,union了几个子查询.单独执行每个子查询都没问题,但union后执行,报ORA-00904: "xxx": invalid identifier关于union的使用 ...