IALG接口浅析

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://erudite.blogbus.com/logs/5805933.html

      最近一直在论证毕设的可行性,多查阅资料,就怕给自己挖的坑太大添不平.......

      我是想做DM642上的系统集成,算法库有了,别人做好的要集成平台也有了,现在只是一个拼装的过程,不过对于我这种菜鸟而言,还是怕出岔子,毕竟第一次接触,谁初到出什么问题。所以多方查阅资料,发现需要学习RF5框架和XDAIS算法标准的内容...随便写了点东西,里面不成熟的内容大侠们多指正

     先说XDAIS算法标准,原本以为是类似C的语法标准,结果买了本书查了下才知道,这是一个实现标准(个人定义,呵呵),不是定义算法该如何具体去写,而是定义了算法能做什么不能去做什么,好像有46条规则,还在完善中。至于为什么要符合这个标准,是因为现在第三方厂家提供算法都是按照它来写的,这样更方便系统集成(比如TI的某部分程序+你自己完成的某部分程序)......

     对于规则中一些编程的规范,不在重复,没多大意思。主要关心的是接口的问题。提到接口,就不能不说下XDAIS最终要实现的目标--就是将算法与硬件的使用相分离,如果使用硬件资源,只能使用逻辑资源,真正分配时不依靠算法本身,这样可以使算法在任意平台下都可以被调用...

    XDAIS定义的抽象接口包括2部分:IALG,IDMA2。

    IALG是算法实例接口,头文件是ialg.h。它的主要任务是让算法定义其使用的存储器资源以实现更高效资源利用。所有的XDAIS算法都要实现IALG接口。其中一个结构体特殊,它是一些函数的结构体,IALG_Fxns

typedef struct IALG_Fxns {

    Void    *implementationId;

    Void    (*algActivate)(IALG_Handle);

    Int     (*algAlloc)(const IALG_Params *, struct IALG_Fxns **, IALG_MemRec *);

    Int     (*algControl)(IALG_Handle, IALG_Cmd, IALG_Status *);

    Void    (*algDeactivate)(IALG_Handle);

    Int     (*algFree)(IALG_Handle, IALG_MemRec *);

    Int     (*algInit)(IALG_Handle, const IALG_MemRec *, IALG_Handle, const IALG_Params *);

    Void    (*algMoved)(IALG_Handle, const IALG_MemRec *, IALG_Handle, const IALG_Params *);

    Int     (*algNumAlloc)(Void);

} IALG_Fxns;

上面结构体中的所有函数都要实现或赋予相应的值,就算不需要完成任何功能,也要将指针设置为NULL。结构体中只有第一个成员变量比较特殊,不是函数指针而是一个空指针,它的作用是唯一标识模块的实现,经常需要用到。

       剩下定义的函数可以分为3类:1.用于创建、初始化和删除实例对象的函数,包括:algAlloc(),algInit()和algFree();2.算法处理的函数,包括:algActivate()和algDeactivate();3.用于控制和重定位实例对象的函数,包括:algControl()和algMoved()。剩下的一个algNumAlloc()函数可在任何时候调用且值不变,主要是求得算法实例的需要分配的存储器数目。

       按顺序逐一而来:

      1.algActivate()。功能:在数据处理之前,实现临时存储器的初始化。参数是算法实例的句柄IALG_Handle  handle,通过该句柄识别出算法需要的不同类型的缓冲,并完成相应的初始化。该函数是可选实现的,仅当在数据处理之前需要初始化时才实现,如不实现可置NULL,以下雷同。

        调用的前提:必须在algInit()成功之后才能调用;handle是一个有效的算法句柄;它不能抢占对象的其它方法;如果算法实现了IDMA2接口,则algActivate()必须在dmaInit()成功后调用。实现此函数之后,算法中所有方法都可使用。

       2.algAlloc()。功能:得到算法对象对于存储器的需求情况。第一个参数是指向用于创建算法对象的参数,如果为NULL则是默认参数,第二个参数是输出参数,返回给父IALG函数;第三个参数是一个存储器记录的表格。如果成功返回一个非0整数,这个整数说明表格中包含多少个有效项。

       调用前提:存储器表格中记录的个数不能少于algNmAlloc()返回值,params允许为空。

       3.algControl()。功能:算法的控制和状态信息的提取。第一个参数是算法实例的句柄,剩下的2个参数是算法特定的。返回值是IALG_EOK或是其它出错信息。这个函数实现是可选的,如不实现设置为空。

       调用条件:只能在algInit()后调用,handle是一个有效句柄,cmd的数值必须小于IALG_SYSCMD。

      4.algDeactivate()。功能:保存所有的持久数据到非临时存储器上。与algActivate()类似,在其之后只能调用algActive()或algFree()。

      5.algFree()。功能:获得算法的存储器资源。与algAlloc()类似,返回值是存储器表格的有效项数。存储器表格中包含所有传递给算法的指向缓冲的指针。

algInit()。功能:初始化算法实例对象。algInit()实现在运行阶段创建算法实例对象,在该函数成功返回后,算法实例对象才开始处理数据。参数解释:第一个参数是算法实例句柄,它指向一个初始化后的IALG_Obj结构,数值与memTab[0].base相同(看不明白先看下他们的数据结构);第二个参数是存储器记录表格,有效记录项目数与algAlloc()相同;第三个参数是另一个算法实例对象的句柄,通常为NULL,表示没有父对象存在;最后一个是算法特定参数,可以为NULL。

     调用条件较复杂。。。。。。

     algMoved()。功能:重新定位算法实例的存储器资源。主要是当算法实例需要移动时调用,可选实现,不实现表明不可移动。参数与algInit()中一样。

     algNumAlloc()。功能:返回需要的存储器数目。必须大于等于algAlloc()的返回值,可以在任何时刻调用,且值不变。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蛋白质是生物体中普遍存在的一类重要生物大分子,由天然氨基酸通过肽键连接而成。它具有复杂的分子结构和特定的生物功能,是表达生物遗传性状的一类主要物质。 蛋白质的结构可分为四级:一级结构是组成蛋白质多肽链的线性氨基酸序列;二级结构是依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠;三级结构是通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构;四级结构用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子。 蛋白质在生物体内具有多种功能,包括提供能量、维持电解质平衡、信息交流、构成人的身体以及免疫等。例如,蛋白质分解可以为人体提供能量,每克蛋白质能产生4千卡的热能;血液里的蛋白质能帮助维持体内的酸碱平衡和血液的渗透压;蛋白质是组成人体器官组织的重要物质,可以修复受损的器官功能,以及维持细胞的生长和更新;蛋白质也是构成多种生理活性的物质,如免疫球蛋白,具有维持机体正常免疫功能的作用。 蛋白质的合成是指生物按照从脱氧核糖核酸(DNA)转录得到的信使核糖核酸(mRNA)上的遗传信息合成蛋白质的过程。这个过程包括氨基酸的活化、多肽链合成的起始、肽链的延长、肽链的终止和释放以及蛋白质合成后的加工修饰等步骤。 蛋白质降解是指食物中的蛋白质经过蛋白质降解酶的作用降解为多肽和氨基酸然后被人体吸收的过程。这个过程在细胞的生理活动中发挥着极其重要的作用,例如将蛋白质降解后成为小分子的氨基酸,并被循环利用;处理错误折叠的蛋白质以及多余组分,使之降解,以防机体产生错误应答。 总的来说,蛋白质是生物体内不可或缺的一类重要物质,对于维持生物体的正常生理功能具有至关重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值