欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

ti dm3730内核图像采集的有关问题

更新时间: 2014-01-05 03:19:51 责任编辑: Author_N1

 

TI DM3730内核图像采集的问题
   之前一直以为,当应用层向内核申请了n个buffer(用于图像的采集存储),然后,内核驱动就会使用乒乓的存储方式,不断的使用这n个buffer,当sensor产生帧中断的时候,中断处理函数,轮询的将采集到的图像,放到buffer中;但是,进过测试发现,当应用层不去取数据的话,内核将这n个buffer存满之后,就不会再去轮询的存图像数据,sensor的帧中断处理函数也不再执行了。只有当应用层将数据取走了,进行buffer的出对和入队的操作后,才会按照理解的流程走。

   我不知道,这样的理解是否正确,正确的话,请指出,TI为什么会这样设计,这样不会造成漏帧吗,如果应用层取帧不及时的话。
--参考方法--
这是一种通信机制,术语叫阻塞通信。必须等待buffer中的数据被转存或操作以后才会解锁继续发送接收,与之对应的就是非阻塞通信,这样buffer中的数据很容易被覆盖掉或者不是你想要的数据,不同的方式适用于不同情况,不知道对你是否有用,如果你的通信方式可以配置的话或许可以选择用哪种机制。
--参考方法--
这样不会造成漏帧吗,如果应用层取帧不及时的话。 
先说这个问题,处理不及时肯定会漏帧。一般缓冲满不是丢弃就是覆盖,这两种做法没有对错之分。

TI为什么会这样设计,
3730的代码我没看过,不好说你说的正不正确。就我看过的代码来说,抓图像用的是capture_get/capture_put,get返回的是一个指针,并且将下面buf.used设为TRUE,保证你在进行数据处理的时候这个buf不会被新数据覆盖。等操作完成以后,capture_put会把used设为FALSE,下面的驱动才会填充这个buf
--参考方法--
引用:
之前一直以为,当应用层向内核申请了n个buffer(用于图像的采集存储),然后,内核驱动就会使用乒乓的存储方式,不断的使用这n个buffer,当sensor产生帧中断的时候,中断处理函数,轮询的将采集到的图像,放到buffer中;但是,进过测试发现,当应用层不去取数据的话,内核将这n个buffer存满之后,就不会再去轮询的存图像数据,sensor的帧中断处理函数也不……
为什么取得不及时?除了程序设计问题,就是系统性能问题,上层都不取了(处理不过来了), 下面还收有什么意思(而且环形缓存已经给你存了几帧了),即使下面收,你上面不取,不一样丢帧吗?

你取帧的同时触发driver抓捕一帧实时数据,保证了视频的实时性。
--参考方法--
这种方式也可以叫同步方式采集图像,应用程序容易写也容易理解;使用多线程很容易实现
若是异步方式,驱动程序和应用程序没有一种同步机制,那应用程序写起来就异常复杂了,应用程序要不停的去查询标记,应用程序做起来反而复杂了。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:19:51
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20897/
本文WWW.DOC100.NET DOC100.NET版权所有。