注册 登录
查看: 604|回复: 29

程序模块都测试了,接下来怎么办?

[复制链接]
发表于 2014-7-2 17:02:35 | 显示全部楼层 |阅读模式
山哥,我的是山外的K60FX15核心板,我把官方的教程看了,把给的每一个模块都学习了,现在单个的模块没有问题了,但是不知道怎么加到主函数里面,不知道该怎么用函数的返回值和函数的调用。我该怎么做系一步?我是不会把函数放到一起调用。
回复

使用道具 举报

 楼主| 发表于 2014-7-2 17:03:05 | 显示全部楼层
过来看看啦,请赐教啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-2 18:00:17 | 显示全部楼层
牧马人 发表于 2014-7-2 17:03
过来看看啦,请赐教啊。

哥哥们过来聊聊吧
回复 支持 反对

使用道具 举报

发表于 2014-7-2 21:28:30 | 显示全部楼层
你要做小车,你就开始设计小车用到什么模块,一个个模块代码往里面加进去。
回复 支持 反对

使用道具 举报

发表于 2014-7-2 21:28:50 | 显示全部楼层
每个模块都是独立的,你可以参考原先的例程,逐渐添加模块的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-2 21:30:06 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-2 21:28
你要做小车,你就开始设计小车用到什么模块,一个个模块代码往里面加进去。

我是不知道代码怎么加,比如一个摄像头,我该加什么啊,现在是困惑了,之前只是测试学习你们官方的每一个小模块的代码了
回复 支持 反对

使用道具 举报

发表于 2014-7-2 21:44:43 | 显示全部楼层
牧马人 发表于 2014-7-2 21:30
我是不知道代码怎么加,比如一个摄像头,我该加什么啊,现在是困惑了,之前只是测试学习你们官方的每一个 ...

我们有摄像头例程的嘛!!按照例程的方法,移植到你自己的工程里就好了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-2 22:00:25 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-2 21:44
我们有摄像头例程的嘛!!按照例程的方法,移植到你自己的工程里就好了。

我这边下的是那个摄像头程序学习笔记,有没有例程地址发给我一下,非常感谢啊
回复 支持 反对

使用道具 举报

发表于 2014-7-2 22:01:55 | 显示全部楼层
牧马人 发表于 2014-7-2 22:00
我这边下的是那个摄像头程序学习笔记,有没有例程地址发给我一下,非常感谢啊

那个没有配套的例程哦。
直接看我们的摄像头例程就好了。思路其实很简单。

摄像头初始化、配置中断。然后调用采集函数,接着图像处理
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-2 22:07:01 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-2 22:01
那个没有配套的例程哦。
直接看我们的摄像头例程就好了。思路其实很简单。

只看主函数吗,我是改的时候看到好多的函数都有关联,改的是错误越来越多啊
回复 支持 反对

使用道具 举报

发表于 2014-7-2 22:08:48 | 显示全部楼层
牧马人 发表于 2014-7-2 22:07
只看主函数吗,我是改的时候看到好多的函数都有关联,改的是错误越来越多啊

主函数就是最重要的,主函数很多东西都是调用底层的。

有什么错误,就发上来吧。你直接说有错误,你叫我怎么知道你的错误呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-2 22:15:52 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-2 22:08
主函数就是最重要的,主函数很多东西都是调用底层的。

有什么错误,就发上来吧。你直接说有错误,你叫 ...

好的,我晚上再仔细搞一晚上,明天把错误一起发上去,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-3 06:37:31 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-2 22:08
主函数就是最重要的,主函数很多东西都是调用底层的。

有什么错误,就发上来吧。你直接说有错误,你叫 ...


#include "common.h"
#include "include.h"
//////////////////////////////////////////////陀螺仪,加速度
extern float Gyro_Now,g_fCarAngle;
extern float OutData[4];                              //SCI示波器参数
extern float Gyro_Now,angle_offset_vertical;          //陀螺仪转化后的角速度,转化后的加速度角度
extern float g_fCarAngle,g_fGyroscopeAngleIntegral;   //融合后的角度
extern volatile int     MMA7361 ,ENC03,real_angle;    //加速度计AD ,陀螺仪AD,模块输出的角度

extern void PIT0_IRQHandler(void);
extern   void OutPut_Data(void);                              //SCI采参数
////////////////////////////////////////////////////////////////摄像头
extern uint8 imgbuff[CAMERA_SIZE];                             //定义存储接收图像的数组
extern uint8 img[CAMERA_W*CAMERA_H];
//函数声明
extern void PORTA_IRQHandler();
extern void DMA0_IRQHandler();
extern void sendimg(uint8 *imgaddr, uint32 imgsize);
extern void img_extract(uint8 *dst, uint8 *src, uint32 srclen);
////////////////////////////////////////////////////////
void main()
{
    DisableInterrupts;//禁止总中断
    // 在control.h定义了相关宏
    adc_init (ZOUT);          //MMA7361 Z轴
    adc_init (Gyro1);        // ENC03角速度
    adc_init (Ang);          //角度
    //////////////////////////////////摄像头
    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_init(imgbuff);
////////////////////////////////////////////////
    uart_init (UART4, 9600);
    //初始化 PWM 输出
    //FTM 的管脚 可在  fire_port_cfg.h
    //宏定义FTM0_PRECISON   改为  1000u
    //PWM数值反转。
    FTM_PWM_init(FTM0, FTM_CH3,10000,1000);
    FTM_PWM_init(FTM0, FTM_CH4,10000,1000);
    FTM_PWM_init(FTM0, FTM_CH5,10000,1000);
    FTM_PWM_init(FTM0, FTM_CH6,10000,1000);

    //开启使能端
    gpio_init(PTD15,GPO,0);
    gpio_init(PTA19,GPO,0);
    gpio_init(PTA5 ,GPO,0);
    gpio_init(PTA24,GPO,0);
    FTM_QUAD_Init(FTM1);  //FTM初始化
    FTM_QUAD_Init(FTM2);  //FTM初始化
    /*
    //3 左 反转
    //5 左 正转
    //4 右 正转
    //6 右 反转
     */
    led_init(LED0);                                         //初始化LED0,PIT0中断用到LED0
    pit_init_ms(PIT0, 5);                                //初始化PIT0,定时时间为: 5ms
   ///////////////////////////////////////////////////
    set_vector_handler(PIT0_VECTORn ,PIT0_IRQHandler);      //设置PIT0的中断复位函数为 PIT0_IRQHandler
    set_vector_handler(PORTA_VECTORn , PIT0_IRQHandler);   //设置LPTMR的中断复位函数为 PIT0_IRQHandler
    set_vector_handler(DMA0_VECTORn , DMA0_IRQHandler);     //设置LPTMR的中断复位函数为 PIT0_IRQHandler
    //////////////////////////////////////////////////////////
   
    enable_irq (PIT0_IRQn);                                 //使能PIT0中断
    EnableInterrupts;//中断允许
    DELAY_MS(3000);
    //////////////////////////////////////////
    while(1)
    {
        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
    }
}
   
    /*while(1)
   {
        #if 0
        OutData[0] = 0;//ENC03;
        OutData[1] = MMA7361;//Gyro_Now;
        OutData[2] = angle_offset_vertical ;
        OutData[3] = g_fCarAngle;
        OutPut_Data();
        #endif
   }
}*/

/**********************中断服务程序*******************/
void PIT0_IRQHandler(void)
{
  
    int16 val1,val2;
    val1 = FTM_QUAD_get(FTM1);          //获取FTM 正交解码 的脉冲数(负数表示反方向)
    val2=FTM_QUAD_get(FTM2);         //获取FTM 正交解码 的脉冲数(负数表示反方向)
     FTM_QUAD_clean(FTM1);
     FTM_QUAD_clean(FTM2);
    AD_Calculate();                             //AD
    Speed_Calculate(g_fCarAngle,Gyro_Now);      //速度计算
    PIT_Flag_Clear(PIT0);                       //清中断标志位
}
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();
}

//发送图像到上位机显示
//不同的上位机,不同的命令,这里使用 yy_摄像头串口调试 软件
//如果使用其他上位机,则需要修改代码
void sendimg(uint8 *imgaddr, uint32 imgsize)
{
    uint8 cmd[4] = {0, 255, 1, 0 };    //yy_摄像头串口调试 使用的命令
    uart_putbuff(FIRE_PORT, cmd, sizeof(cmd));    //先发送命令
    uart_putbuff(FIRE_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 ];
    }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-7-3 10:06:32 | 显示全部楼层
牧马人 发表于 2014-7-3 06:37
#include "common.h"
#include "include.h"
//////////////////////////////////////////////陀螺仪, ...

摄像头中断那里,是注释错了,跟lptmr 无关,复制的时候复制错了
回复 支持 反对

使用道具 举报

发表于 2014-7-3 10:07:35 | 显示全部楼层
牧马人 发表于 2014-7-3 06:37
#include "common.h"
#include "include.h"
//////////////////////////////////////////////陀螺仪, ...

你现在是什么问题呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-3 13:42:22 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-3 10:06
摄像头中断那里,是注释错了,跟lptmr 无关,复制的时候复制错了

把摄像头和平衡控制程序放在一起的时候这样设置中断标志位可以吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-7-3 13:48:28 | 显示全部楼层
牧马人 发表于 2014-7-3 13:42
把摄像头和平衡控制程序放在一起的时候这样设置中断标志位可以吗?

场中断的 中断函数入口,设置错了啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-4 00:15:55 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-3 13:48
场中断的 中断函数入口,设置错了啊

我想在一个去年光电的程序里面改,那个main函数里面没有那个ov7725。h的文件怎么办

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-7-4 10:41:05 | 显示全部楼层
牧马人 发表于 2014-7-4 00:15
我想在一个去年光电的程序里面改,那个main函数里面没有那个ov7725。h的文件怎么办

去年的代码,是旧版本库,这届我们重新整理代码,出新版本的代码。

所以两者代码有些差异的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-4 14:44:44 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-4 10:41
去年的代码,是旧版本库,这届我们重新整理代码,出新版本的代码。

所以两者代码有些差异的。

但是哥,我把方向控制往哪个函数里面加?
回复 支持 反对

使用道具 举报

发表于 2014-7-4 15:14:09 | 显示全部楼层
牧马人 发表于 2014-7-4 14:44
但是哥,我把方向控制往哪个函数里面加?

方向控制,一般都是采集图像后,就进行方向控制啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-4 15:21:33 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-4 10:41
去年的代码,是旧版本库,这届我们重新整理代码,出新版本的代码。

所以两者代码有些差异的。

app里面主要是代表什么意思,board呢……

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-4 15:23:01 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-4 15:14
方向控制,一般都是采集图像后,就进行方向控制啊

哪个board里面没有方向控制吧,我要先在board里面写,然后是在main里面调用吗
回复 支持 反对

使用道具 举报

发表于 2014-7-4 21:27:05 | 显示全部楼层
牧马人 发表于 2014-7-4 15:23
哪个board里面没有方向控制吧,我要先在board里面写,然后是在main里面调用吗

可以在app文件夹下建个文件,然后在里面写的
回复 支持 反对

使用道具 举报

发表于 2014-7-4 21:27:36 | 显示全部楼层
牧马人 发表于 2014-7-4 15:21
app里面主要是代表什么意思,board呢……

app 是用户应用代码。board 是板载代码,chip是芯片级代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-5 21:25:17 | 显示全部楼层
山外哥,有没有你们前一次的摄像头的工程啊,就是分app,cpu,driver的?我对着新的工程编不好了。
回复 支持 反对

使用道具 举报

发表于 2014-7-6 12:19:28 | 显示全部楼层
牧马人 发表于 2014-7-5 21:25
山外哥,有没有你们前一次的摄像头的工程啊,就是分app,cpu,driver的?我对着新的工程编不好了。

上一版本代码仅支持DN,不支持FX的哦

山外小霸王K60光盘资料 - 智能车资料区 - 山外-vcan123论坛 http://www.vcan123.com/forum.php ... ;tid=134&ctid=1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-6 12:43:13 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-6 12:19
上一版本代码仅支持DN,不支持FX的哦

山外小霸王K60光盘资料 - 智能车资料区 - 山外-vcan123论坛 http: ...

这是新代码,板子我们有,开发板是DN的,我的进度跟不上了,所以想用老的和去年光电的改改。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-6 12:44:06 | 显示全部楼层
我要旧的摄像头组代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-6 13:50:06 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-6 12:19
上一版本代码仅支持DN,不支持FX的哦

山外小霸王K60光盘资料 - 智能车资料区 - 山外-vcan123论坛 http: ...

那个写摄像头程序的时候是只用PIT0_IRQHandler复位还是用 PORTA_IRQHandler,,DMA0_IRQHandler?
回复 支持 反对

使用道具 举报

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

本版积分规则

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