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
    评论
SDIO是一种用于连接多种设备的接口标准,包括Wi-Fi等无线网络设备。SDIO接口Wi-Fi驱动程序是用来管理和控制SDIO模块连接Wi-Fi设备的程序。Wi-Fi驱动程序通常是由设备制造商或操作系统供应商提供的,它们可以针对特定的SDIO模块和Wi-Fi设备进行定制。驱动程序管理SDIO接口与Wi-Fi设备的通信,控制数据流和网络连接以及提供对Wi-Fi设备的配置和监视功能。 在SDIO接口中,Wi-Fi设备一般作为一个SDIO卡出现,并通过SDIO总线与主处理器通信。因此,SDIO接口Wi-Fi驱动程序需要充分考虑SDIO总线和Wi-Fi设备之间的交互,并提供相应的操作和处理流程。常见的SDIO接口Wi-Fi驱动程序包括驱动层和协议层两部分。驱动层主要负责设备驱动程序的加载和卸载,以及控制SDIO总线与Wi-Fi设备之间的基本交互。协议层则实现与Wi-Fi设备之间的高级通信协议和数据传输,如TCP/IP协议栈、接入控制和传输协议等。 SDIO接口Wi-Fi驱动程序的设计和实现需要考虑多方面的因素,如SDIO总线的带宽和时序控制、Wi-Fi设备的固件和驱动程序兼容性、网络连接和性能要求等。通常需要经过严格的测试和优化才能实现良好的性能和稳定性。 总之,SDIO接口Wi-Fi驱动程序是一项关键技术,它的实现对Wi-Fi设备的性能和可靠性都有着重要的影响。需要专业的技术团队和优秀的开发工具支持,才能实现高品质的SDIO接口Wi-Fi驱动程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值