注册 登录
查看: 658|回复: 17

[K60] 山外哥,关于ccd采集的地址,它保存到哪个数组里面了..

[复制链接]
发表于 2013-12-13 11:37:15 | 显示全部楼层 |阅读模式
用live witch 里面 CCD_BUFF[0] 看这个数据 128个都可以看到,但是我不知道如何调用这个数组,
就是如何调用 这个里面的数据..山外哥帮我一下呗..谢谢啦!!
回复

使用道具 举报

发表于 2013-12-13 12:01:06 | 显示全部楼层

数组的定义:
  1. //定义存储接收CCD图像的数组
  2. uint8 CCD_BUFF[TSL1401_MAX][TSL1401_SIZE];
假设 TSL1401_MAX 定义了 3个,即
(uint8 *)&CCD_BUFF[0] 为 第一个数组的 地址
(uint8 *)&CCD_BUFF[1] 为 第二个数组的 地址
(uint8 *)&CCD_BUFF[2] 为 第三个数组的 地址


代码上,如果你想用 一维指针的方式操作,那么:
  1. //纯指针方式
  2. uint8 * ccd1 = (uint8 *)&CCD_BUFF[0];
  3. uint8 * ccd2 = (uint8 *)&CCD_BUFF[1];
  4. uint8 * ccd3 = (uint8 *)&CCD_BUFF[2];
或者
  1. //数组指针方式 (推荐)
  2. uint8 (* ccd1)[TSL1401_SIZE] = (uint8 *)&CCD_BUFF[0];
  3. uint8 (* ccd2)[TSL1401_SIZE] = (uint8 *)&CCD_BUFF[1];
  4. uint8 (* ccd3)[TSL1401_SIZE] = (uint8 *)&CCD_BUFF[2];
此后,ccd1 、ccd2 、ccd3 就是 采集的地址


例如 显示 ccd1 的图像:
  1. LCD_Img_gray_Z(site1,size,ccd1 ,imgsize);//直接传递 ccd1 地址即可
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-13 12:08:09 | 显示全部楼层
Admin 发表于 2013-12-13 12:01
数组的定义:假设 TSL1401_MAX 定义了 3个,即
(uint8 *)&CCD_BUFF[0] 为 第一个数组的 地址
(uint8 * ...

山外哥太给力了!!!太谢谢啦!
回复 支持 反对

使用道具 举报

发表于 2013-12-13 12:32:14 | 显示全部楼层
ewew43 发表于 2013-12-13 12:08
山外哥太给力了!!!太谢谢啦!

欢迎 去 我们每日一题 里 补充知识。

如果不懂,就提出来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-13 13:16:10 | 显示全部楼层
Admin 发表于 2013-12-13 12:01
数组的定义:假设 TSL1401_MAX 定义了 3个,即
(uint8 *)&CCD_BUFF[0] 为 第一个数组的 地址
(uint8 * ...

山外哥 如果比如说,我想调用 ccd1 的 0~50 70~128个的数据的话 应该怎么操作  直接指针加一就可以么
回复 支持 反对

使用道具 举报

发表于 2013-12-13 13:18:31 | 显示全部楼层
ewew43 发表于 2013-12-13 13:16
山外哥 如果比如说,我想调用 ccd1 的 0~50 70~128个的数据的话 应该怎么操作  直接指针加一就可以么

假如 我想读取 ccd1 的 第 80 个点 的像素值。
  1. ccd1[80 - 1];  //为什么 减1 ? 数组从0开始数数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-13 14:48:34 | 显示全部楼层
Admin 发表于 2013-12-13 12:01
数组的定义:假设 TSL1401_MAX 定义了 3个,即
(uint8 *)&CCD_BUFF[0] 为 第一个数组的 地址
(uint8 * ...

山外哥 如果我用数组指针
uint8 (* ccd1)[TSL1401_SIZE] = (uint8 *)&CCD_BUFF[0];这个
报错,提示
Error[Pe144]: a value of type "unsigned char *" cannot be used to initialize an entity of type "uint8 (*)[128]"  指针类型不对...
回复 支持 反对

使用道具 举报

发表于 2013-12-13 15:59:04 | 显示全部楼层
ewew43 发表于 2013-12-13 14:48
山外哥 如果我用数组指针
uint8 (* ccd1)[TSL1401_SIZE] = (uint8 *)&CCD_BUFF[0];这个
报错,提示

直接这样:
  1. uint8 (* ccd1)[TSL1401_SIZE] = &CCD_BUFF[0];
或者
  1. uint8 (* ccd1)[TSL1401_SIZE] = (uint8 (*)[TSL1401_SIZE])&CCD_BUFF[0];
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-13 21:35:08 | 显示全部楼层
Admin 发表于 2013-12-13 15:59
直接这样:或者

山外哥,其实我要是直接调用 CCD_BUFF[0] 这样的话是不是也可以读取出数值来
回复 支持 反对

使用道具 举报

发表于 2013-12-13 21:39:17 | 显示全部楼层
ewew43 发表于 2013-12-13 21:35
山外哥,其实我要是直接调用 CCD_BUFF[0] 这样的话是不是也可以读取出数值来

假如 第 1个 元素

那么 CCD_BUFF[0][0] 这样来读取,因为定义的时候是定义成 2维
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-14 13:26:39 | 显示全部楼层
格拉姆 发表于 2013-12-13 21:39
假如 第 1个 元素

那么 CCD_BUFF[0][0] 这样来读取,因为定义的时候是定义成 2维

~搜噶~~谢谢啦@
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-14 19:49:44 | 显示全部楼层
Admin 发表于 2013-12-13 15:59
直接这样:或者

山外哥 再问你个问题..哈哈..真是太麻烦你了.
那个,如果我取消了差分的绝对值的话,那么收到的数据 由白线变成黑线是一个上升的脉冲 还是下降的脉冲,这几天实验室的示波器坏了,,没办法调了 ,,,告诉我一下被 谢谢啦!!
回复 支持 反对

使用道具 举报

发表于 2013-12-14 20:27:15 | 显示全部楼层
ewew43 发表于 2013-12-14 19:49
山外哥 再问你个问题..哈哈..真是太麻烦你了.
那个,如果我取消了差分的绝对值的话,那么收到的数据 由白线变 ...

这个很简单啊 ……

白色的 值是 高 ,黑色的 值是 低。

如果 左白 右黑 , 而你 代码差分是 右减 左,那么就是 负数 ……反之亦然,自己分析一下吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-15 12:50:13 | 显示全部楼层
风落小鱼 发表于 2013-12-14 20:27
这个很简单啊 ……

白色的 值是 高 ,黑色的 值是 低。

搜噶...突然就明白了..
我想问一下. 求差分值中的CCD_BUFF[TSL1401_MAX+0] 他是用来保存差分值的,是不是也就是相当于 CCD_BUFF[3]
那么CCD_BUFF[2*TSL1401_MAX+0] 是不是也就是CCD_BUFF[6]呢..我这里不是太懂..求大神相助 谢谢啦!
回复 支持 反对

使用道具 举报

发表于 2013-12-15 12:54:14 | 显示全部楼层
ewew43 发表于 2013-12-15 12:50
搜噶...突然就明白了..
我想问一下. 求差分值中的CCD_BUFF[TSL1401_MAX+0] 他是用来保存差分值的,是不是 ...

这个是 随你定义的,我们的代码:

CCD_BUFF[0]                   是 采集 CCD1 的图像
CCD_BUFF[1*TSL1401_MAX+0]    是 差分值
CCD_BUFF[2*TSL1401_MAX+0]    是二值化后的图像

定义多个的目的,就是 可以随意地使用 这些数组
回复 支持 反对

使用道具 举报

发表于 2013-12-15 12:54:25 | 显示全部楼层
ewew43 发表于 2013-12-15 12:50
搜噶...突然就明白了..
我想问一下. 求差分值中的CCD_BUFF[TSL1401_MAX+0] 他是用来保存差分值的,是不是 ...

这个是 随你定义的,我们的代码:

CCD_BUFF[0]                   是 采集 CCD1 的图像
CCD_BUFF[1*TSL1401_MAX+0]    是 差分值
CCD_BUFF[2*TSL1401_MAX+0]    是二值化后的图像

定义多个的目的,就是 可以随意地使用 这些数组
回复 支持 反对

使用道具 举报

发表于 2014-5-5 16:40:30 | 显示全部楼层
ewew43 发表于 2013-12-13 14:48
山外哥 如果我用数组指针
uint8 (* ccd1)[TSL1401_SIZE] = (uint8 *)&CCD_BUFF[0];这个
报错,提示

我的也是 同样的问题   按照山外哥给的下面的方法后   还是错误:Error[Pe167]: argument of type "uint8 (*)[128]" is incompatible with parameter of type "unsigned char *"
  怎么解决  指点下 谢谢
回复 支持 反对

使用道具 举报

发表于 2014-5-5 16:42:40 | 显示全部楼层
Admin 发表于 2013-12-13 15:59
直接这样:或者

我按照上面的方法 改了后  还是会出现Error[Pe167]: argument of type "uint8 (*)[128]" is incompatible with parameter of type "unsigned char *"    怎么解决  劳烦指点下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部