注册 登录
查看: 795|回复: 5

山外ccd采集到的数据到底存放在哪儿?CCD_BUFF还是tsl1401_addr里?

[复制链接]
发表于 2014-1-1 19:33:53 | 显示全部楼层 |阅读模式
//采集图像
void tsl1401_gather(void)
{
#define TSL1401_TIME   10   //延时时间

    uint8_t n = TSL1401_SIZE, k = 0;
    uint8_t i;

    tsl1401_clk_out(0);             //CLK = 0
    tsl1401_delay(TSL1401_TIME);
    tsl1401_si_out(1);              //SI  = 1
    tsl1401_delay(TSL1401_TIME);
    tsl1401_clk_out(1);             //CLK = 1
    tsl1401_delay(TSL1401_TIME);

    tsl1401_si_out(0);              //SI  = 0
    tsl1401_delay(TSL1401_TIME);

    while(n--)
    {

        tsl1401_clk_out(0);        //CLK = 0

        i = TSL1401_MAX;
        while(i--)
        {
            (tsl1401_addr[i])[k] = (uint8_t)adc_once(tsl1401_ch[i], ADC_8bit);             //函数adc_once返回数据类型为16位无符号整型
            //*img++ =  adc_once(ADC1_AD8, ADC_8bit);
        }

        tsl1401_clk_out(1);        //CLK = 1
        tsl1401_delay(TSL1401_TIME);
        k++;
    }
#undef TSL1401_TIME









//设置采集图像的地址
//num 为 TSL1401_MAX 时,设置全部地址,否则设置指定的地址
void tsl1401_set_addrs(TSL1401_e num, uint8 *addr, ... )
{
    ASSERT(num <= TSL1401_MAX);

    va_list ap;                                 //创建栈指针ap
    uint8_t *value;
    uint8_t n = 0;

    if(num < TSL1401_MAX)
    {
        tsl1401_addr[num] = addr;
    }
    else if(num == TSL1401_MAX)
    {
        va_start(ap, addr);                         //获取可变参数列表的第一个参数的地址
        value = addr;
        while(num--)
        {
            tsl1401_addr[n++] = value;
            value = va_arg(ap, uint8_t * );             //获取可变参数的当前参数,返回指定类型并将指针指向下一参数
        }

        va_end(ap);                                 //清空va_list可变参数列表
    }
}
主要想知道数据是存在哪个地方,因为部分代码还看不懂。
望好心人帮忙解答一下,帮助必言谢!


回复

使用道具 举报

发表于 2014-1-1 22:05:32 | 显示全部楼层
tsl1401_addr 这个是 指针数组,存放 数据的 指针 的 数组

CCD_BUFF 才是 真正 存放数据的 数组 ,线性 CCD 初始化的时候 ,需要 调用 tsl1401_set_addrs 把 CCD_BUFF  的 值 赋值 给 tsl1401_addr

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-1 22:46:19 | 显示全部楼层
山外メ雲ジ 发表于 2014-1-1 22:05
tsl1401_addr 这个是 指针数组,存放 数据的 指针 的 数组

CCD_BUFF 才是 真正 存放数据的 数组 ,线性  ...

但是采集数据时用的(tsl1401_addr)[k] = (uint8_t)adc_once(tsl1401_ch, ADC_8bit);
感觉不是很明白
回复 支持 反对

使用道具 举报

发表于 2014-1-1 22:49:51 | 显示全部楼层
爱神风玲-★ 发表于 2014-1-1 22:46
但是采集数据时用的(tsl1401_addr)[k] = (uint8_t)adc_once(tsl1401_ch, ADC_8bit);
感觉不是很明白

线性 CCD 初始化的时候 ,需要 调用 tsl1401_set_addrs 把 CCD_BUFF  的 值 赋值 给 tsl1401_addr


所以 赋值后
  1. (tsl1401_addr)[k] = (uint8_t)adc_once(tsl1401_ch, ADC_8bit);
等效为:
  1. (CCD_BUFF)[k] = (uint8_t)adc_once(tsl1401_ch, ADC_8bit);
你要 看懂  tsl1401_set_addrs  这个 函数 的 作用,就能 理解
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-1 23:26:37 | 显示全部楼层
微粒子 发表于 2014-1-1 22:49
线性 CCD 初始化的时候 ,需要 调用 tsl1401_set_addrs 把 CCD_BUFF  的 值 赋值 给 tsl1401_addr

谢谢提醒,我找到原因了,就是你说的CCD初始化地址的时候,把指针数组分别指向了CCD_BUFF的首地址
回复 支持 反对

使用道具 举报

发表于 2014-1-1 23:34:59 | 显示全部楼层
爱神风玲-★ 发表于 2014-1-1 23:26
谢谢提醒,我找到原因了,就是你说的CCD初始化地址的时候,把指针数组分别指向了CCD_BUFF的首地址

是的 ~~~

睡觉去咯,明天 还得 复习
回复 支持 反对

使用道具 举报

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

本版积分规则

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