首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

TI DM3730内核图像采集的有关问题

2013-07-08 
TI DM3730内核图像采集的问题之前一直以为,当应用层向内核申请了n个buffer(用于图像的采集存储),然后,内核

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

   我不知道,这样的理解是否正确,正确的话,请指出,TI为什么会这样设计,这样不会造成漏帧吗,如果应用层取帧不及时的话。 DM3730?内核?图像采集?
[解决办法]
这是一种通信机制,术语叫阻塞通信。必须等待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抓捕一帧实时数据,保证了视频的实时性。
[解决办法]
这种方式也可以叫同步方式采集图像,应用程序容易写也容易理解;使用多线程很容易实现
若是异步方式,驱动程序和应用程序没有一种同步机制,那应用程序写起来就异常复杂了,应用程序要不停的去查询标记,应用程序做起来反而复杂了。

热点排行