注册 登录
查看: 355|回复: 6

自己 添加了算法后, 上位机没法看 图像了,等很久上位及才有图像, 而且变化。慢...

[复制链接]
发表于 2015-1-6 20:13:12 | 显示全部楼层 |阅读模式
main.c 里面的
void  main(void)
{


    Init_all();


    while(1)
    {
        ImageProcess();
  }
}

void Init_all()
{
        camera_init(imgbuff);
    //配置中断复位函数
    set_vector_handler(PORTA_VECTORn , PORTA_IRQHandler);   //设置LPTMR的中断复位函数为 PORTA_IRQHandler
    set_vector_handler(DMA0_VECTORn , DMA0_IRQHandler);     //设置LPTMR的中断复位函数为 PORTA_IRQHandler

    NVIC_SetPriorityGrouping(4);
    NVIC_SetPriority(PORTE_IRQn,0);
    NVIC_SetPriority(PIT1_IRQn,1);
    NVIC_SetPriority(PIT0_IRQn,2);
    NVIC_SetPriority(DMA0_IRQn,3);

}/*!
*  @brief      PORTA中断服务函数
*  @since      v5.0
*/
void PORTA_IRQHandler()
{
    uint8  n;    //引脚号
    uint32 flag;

    while(!PORTA_ISFR);
    flag = PORTA_ISFR;
    PORTA_ISFR  = ~0;                                   //清中断标志位

    n = 29;                                             //场中断
    if(flag & (1 << n))                                 //PTA29触发中断
    {
        camera_vsync();
    }
#if ( CAMERA_USE_HREF == 1 )                            //使用行中断
    n = 28;
    if(flag & (1 << n))                                 //PTA28触发中断
    {
        camera_href();
    }
#endif


}

/*!
*  @brief      DMA0中断服务函数
*  @since      v5.0
*/
void DMA0_IRQHandler()
{
    camera_dma();
}

imageprocess.c 里面的
void ImageProcess(void)
{
         Site_t site     = {0, 0};                           //显示图像左上角位置
         Size_t imgsize  = {CAMERA_W, CAMERA_H};             //图像大小
         Size_t size;                //显示区域图像大小

         LCD_init();

         size.H = LCD_H;
         size.W = LCD_W;
         camera_get_img();                                  //摄像头获取图像


#if     ( CAMERA_COLOR == 1 )                               //灰度摄像头
        LCD_Img_gray_Z  (site, size, imgbuff, imgsize);
#elif   ( CAMERA_COLOR == 0 )                               //黑白摄像头
        LCD_Img_Binary_Z(site, size, imgbuff, imgsize);
#endif
        ////////////////////////发送图像到上位机 ///////////////////////////////
        img_extract(img, imgbuff, CAMERA_SIZE);          //解压为灰度图像,方便发送到上位机显
        sendimg(img, CAMERA_W * CAMERA_H);                    //发送到上位机

               Get_Road_Image(img);                             //将图像转存为二位数组
        Get_AllCenter();                                 //获取赛道中心线
        Check_Set_Data();
        Get_Center_Value();
}
//发送图像到上位机显示
//不同的上位机,不同的命令,这里使用 yy_摄像头串口调试 软件
//如果使用其他上位机,则需要修改代码
void sendimg(uint8 *imgaddr, uint32 imgsize)
{
    uint8 cmd[4] = {0, 255, 1, 0 };    //yy_摄像头串口调试 使用的命令

    uart_putbuff(VCAN_PORT, cmd, sizeof(cmd));    //先发送命令 //改UART

    uart_putbuff(VCAN_PORT, imgaddr, imgsize); //再发送图像
}

//压缩二值化图像解压(空间 换 时间 解压)
//srclen 是二值化图像的占用空间大小
void img_extract(uint8 *dst, uint8 *src, uint32 srclen)
{
    uint8 colour[2] = {255, 0}; //0 和 1 分别对应的颜色
    //注:山外的摄像头 0 表示 白色,1表示 黑色
    uint8 tmpsrc;
    while(srclen --)
    {
        tmpsrc = *src++;
        *dst++ = colour[ (tmpsrc >> 7 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 6 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 5 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 4 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 3 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 2 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 1 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 0 ) & 0x01 ];
    }
}


出现问题 YY上位机很久才会出现图像, 出现图像之后变化还很慢, 可以说基本没有

回复

使用道具 举报

发表于 2015-1-6 20:23:58 | 显示全部楼层
是数据量太大吧?
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-6 20:24:41 | 显示全部楼层
微粒子 发表于 1420547038
是数据量太大吧?
对, 刚查出来了,我把 算法去掉就没问题了, 那有什么办法解决吗?
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

发表于 2015-1-6 20:24:47 | 显示全部楼层
不知道你改了什么,自己排除法找问题吧。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2015-1-6 20:25:39 | 显示全部楼层
老司机 发表于 2015-1-6 20:24
对, 刚查出来了,我把 算法去掉就没问题了, 那有什么办法解决吗?

有可能数据越界,不好说,调试看看吧。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-6 20:26:04 | 显示全部楼层
微粒子 发表于 1420547087
不知道你改了什么,自己排除法找问题吧。
我什么都没改, 就程序那些写的
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

发表于 2015-1-6 20:28:33 | 显示全部楼层
老司机 发表于 2015-1-6 20:26
我什么都没改, 就程序那些写的

你的算法就是你写的啊,怎么出现问题,为啥出问题,外人不会知道的。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

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

本版积分规则

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