Chinaunix首页 | 论坛 | 博客
  • 博客访问: 262708
  • 博文数量: 45
  • 博客积分: 1618
  • 博客等级: 上尉
  • 技术积分: 530
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-11 10:13
文章分类

全部博文(45)

文章存档

2012年(1)

2011年(25)

2010年(19)

我的朋友

分类: 嵌入式

2011-09-14 16:10:14

Ti的DaVinci架构为嵌入式程序的开发提供了很好的框架,对于DM6467,一个项目的开发可以分为Codec Engine Application Developer、Codec Engine Server Integrator 、Codec Engine Algorithm Creator三个角色,但是不论是哪一个角色,都应该了解三者直接如何共同合作。
应用程序运行在GPP端,算法运行在DSP端,APP通过一些接口函数控制dsp端创建或者执行算法,并取得结果,交互过程如下(翻译加个人理解):
1、CERuntime_init();初始化所有的框架环境
2、GPP端通过VISA create API(xxx_create)在DSP端创建算法实例(个人理解为一个线程)
   (1)GPP端创建通用的接口对象(包括句柄、必要的参数、指针等)
   (2)GPP端创建一个"node"对象,负责沟通DSP端"node"
   (3)GPP端形成一条create信号,DSP端接收后创建DSP端的"node"(此node是由DSP端负责功能调度的一个线程创建的)    ------貌似这样链路就通了
   (4)DSP端继续解析create信号,经过错误校验等,创建并初始化一个状态对象   -------这个对象估计就是记录了此解码器的状态与参数
   (5)此时会创建一个消息队列,负责GPP端命令接收   -------每一个解码器有自己的队列
   (6)DSP端特定的"create"函数会被调用,初始化node状态、内存资源等    -------此函数也是有DSP端负责功能调度的线程创建
   (7)到此一个单独专用的解码线程被创建,但此时他是挂起状态的
   (8)调度线程保存新创建线程的状态信息,并发送一个状态恢复信息到GPP
   (9)GPP端收到成功信息,更新相关结构体
   (10)GPP端会生成一条start命令,DSP端调度线程会使解码算法线程由挂起转至运行,此时算法线程会执行"execute"函数,但此函数为阻塞函数,在等待GPP命令
3、GPP端调用VISA process(xxx_procese):
   (1)GPP端执行基本的参数校验
   (2)一条消息结构体被创建(DSP端需要的所有参数)
   (3)该消息发送到DSP端的消息队列
   (4)DSP端收到消息,调用算法框架
   (5)框架分析参数,同步cache和内存里面的数据,并激活
   (6)调用编解码函数
   (7)等待cache里面的数据进入非活跃
   (8)框架将数据写回外寸(其实就是内存)
   (9)回复执行状态消息,等待下一条命令
   (10)GPP端分析outArgs,取到执行结果
到此解码完成。
4、另外对于删除一个解码算法实例 VISA delete(xxx_delete):
   (1)GPP发送消息通知exit
   (2)DSP收到exit回复应答
   (3)GPP发送"delete"消息
   (4)DSP调度线程删除编码算法线程
   (5)调用对应算法里面的delete函数   ------此函数调用也是由调度线程完成的
   (6)DSP端的"node"接口被删除,消息队列也被删除,回复GPP
   (7)GPP端"node"接口也被删除,消息队列关闭,更新相关参数

阅读(3328) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~