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. 【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 ...

  2. 【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 ...

  3. 【博弈论】极小极大搜索(Minimax Algorithm)与α-β剪枝(Alpha-Beta Pruning)

    文章目录 一.极大极小搜索(Minimax Algorithm) 二.α-β剪枝(Alpha-Beta Pruning) 三.解题技巧 一.极大极小搜索(Minimax Algorithm) 在零和博 ...

  4. 【KMP】572: Boyer–Moore–Horspool algorithm

    题目: http://acm.swust.edu.cn/#/problem/572/490 题目描述 题目内容来自:https://en.wikipedia.org/w/index.php?title ...

  5. 【机器学习】关联分析算法-DHP Algorithm

    数据挖掘课程讲到的算法,太忙了,先填个坑,回头填. DHP algorithm is an optimization of A-priori algorithm.So what's the short ...

  6. 【Verilog】布斯算法(Booth Algorithm)乘法器的 Verilog 实现

    目录 布斯算法介绍 计算步骤 计算流程图 举个栗子 Verilog 实现 设计思想 Verilog 代码 TestBench 代码 仿真波形 布斯算法介绍 Booth 的算法检查有符号二的补码表示中 ...

  7. 【译】LXC and LXD: Explaining Linux Containers

    LXC和LXD是两个重要的缩略词,可以知道你是否装入容器. 不幸的是,它们也是难以直接相互保持的缩略语. 他们听起来很像. 它们指的是类似的平台,这些平台大部分是由同一家公司创建的. 而且他们在技术层 ...

  8. 【python】Algorithm

    枚举法 递推 与枚举算法思想相比,递推算法能够通过已知的某个条件,利用特定的关系得出中间推论,然后逐步递推,直到得到结果为止.由此可见,递推算法要比枚举算法聪明,它不会尝试每种可能的方案. 在日常应用 ...

  9. 【BZOJ】1607: [Usaco2008 Dec]Patting Heads 轻拍牛头

    [算法]模拟 #include<cstdio> #include<algorithm> using namespace std; const int maxn=100010,m ...

  10. PE 521【DP】

    题目大意:设 ms(i) ms(i)代表i的最小质因数,求 ∑ni=2ms(i) \sum_{i=2}^nms(i), n=1012mod109 n = 10^{12}\;mod\;10^9 对于 p ...

最新文章

  1. Linux中如何配置IP
  2. Windows远程桌面(mstsc)不能复制粘贴的解决办法
  3. Flume自定义Hbase Sink的EventSerializer序列化类
  4. mogndb 慢查询
  5. k8s + 微服务,王炸!
  6. JQuery UI AutoComplete 与 Strtus2 结合使用
  7. Android内存优化(二):一分钟发现内存泄漏
  8. 【C语言】最大的两个数(指针专题)
  9. Session 与 Cookie
  10. asp.net identity 学习1
  11. 阿里架构师手写Tomcat——Session源码解析
  12. 如何在内存中创建文件供用户下载,而不是通过服务器下载?
  13. iis 回收工作进程时出错的解决办法
  14. java表格数据导出到Excel案例
  15. oracle查看asm磁盘,OracleOnLinux-Windows下如何查看ASM磁盘对应的设备
  16. C++ atuo关键字看这一篇就够了
  17. 【转】U-Boot启动过程--详细版的完全分析
  18. 深度学习与AI入门——追风记
  19. Java Algorithm 简单算法
  20. 计算机禁止共享上网,Win7 windows7网络共享设置及登录失败:禁用当前用户解决方法...

热门文章

  1. EPLAN小知识——如何在费斯托(FESTO)官网下载EPLAN部件
  2. LimeSDR DAB发射 RTL SDR DAB接收
  3. mysql execute stmt_mysql_stmt_execute()--MySql数据库
  4. C语言中数组名的使用总结
  5. Numpy 笔记(二): 多维数组的切片(slicing)和索引(indexing)
  6. 解决浏览器打开就是被篡改的桔梗网界面
  7. oracle碎片产生原因,oracle碎片小结
  8. 线性代数【13】基,基本向量、坐标系的构建和线性生成空间SPAN (向量线性相关)
  9. r语言 rgl 强制过程中_R语言正则表达式:提取括号中的内容
  10. 程序员眼中的古典名画