注册 登录
查看: 558|回复: 30

摄像头小车加入方向控制后,程序就跑飞

[复制链接]
发表于 2014-7-14 17:16:14 | 显示全部楼层 |阅读模式
不加方向控制没有任何问题,可是一加上程序就死掉了,坐等大神解答
回复

使用道具 举报

发表于 2014-7-14 17:24:27 | 显示全部楼层
出现这问题,可以参考我们的IAR调试视频(K60视频),里面有针对这些内容来进行讲解的。

你在IAR里打开调用栈,然后截图调用栈的信息,上传上来,让我们看看是什么情况。

调用栈在 view —— call stack 里调出
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-14 17:35:24 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-14 17:24
出现这问题,可以参考我们的IAR调试视频(K60视频),里面有针对这些内容来进行讲解的。

你在IAR里打开调 ...

我看了调用栈
先是程序停在了
  1. void uart_putchar (UARTn_e uratn, char ch)
  2. {
  3.     if(uratn == UART0)
  4.     {
  5.         //等待发送缓冲区空
  6.         while(!(UART0_S1 & UART0_S1_TDRE_MASK));

  7.         //发送数据
  8.         UART0_D = (uint8)ch;
  9.     }
  10.     else
  11.     {
  12.         //等待发送缓冲区空
  13.         while(!(UART_S1_REG(UARTN[uratn]) & UART_S1_TDRE_MASK));

  14.         //发送数据
  15.         UART_D_REG(UARTN[uratn]) = (uint8)ch;
  16.     }
  17. }
这里
接着显示了
  1. int fputc(int ch, FILE *stream)
  2. {
  3.     uart_putchar(FIRE_PORT, (char)ch);
  4.     return(ch);
  5. }
这个函数,这是什么原因呐?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-14 17:45:22 | 显示全部楼层
调用栈的截图就是这个,

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2014-7-14 23:51:59 | 显示全部楼层
莫非你无线发射器没插好,或者根本就没插?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-15 08:47:49 | 显示全部楼层
草原上的星星 发表于 2014-7-14 23:51
莫非你无线发射器没插好,或者根本就没插?

必须要插上吗。。。
回复 支持 反对

使用道具 举报

发表于 2014-7-15 09:46:25 | 显示全部楼层
miss可可 发表于 2014-7-14 17:45
调用栈的截图就是这个,

你的工程进入了默认中断函数,你看看是什么中断函数。
回复 支持 反对

使用道具 举报

发表于 2014-7-15 11:02:54 | 显示全部楼层
miss可可 发表于 2014-7-15 08:47
必须要插上吗。。。

是的,必须要插上,如果你代码中有发送程序的话就要插上,之前我也遇到这样的问题。不过比赛貌似不能用这个发射模块,所以你还是改改代码吧
回复 支持 反对

使用道具 举报

发表于 2014-7-15 11:05:44 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-15 09:46
你的工程进入了默认中断函数,你看看是什么中断函数。

他应该是没插无线调试器的缘故,之前我也是无意中发现的,和他一模一样的问题,插上就好了。不过考虑到比赛不能用无线发射模块,所以刚刚我把关于无线调试的程序都去掉了。然后就可以用了。只是小液晶屏不能用了,之前还想着用小液晶屏调参数呢,所以不设拨码开关,看来这回惨了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-15 11:15:01 | 显示全部楼层
草原上的星星 发表于 2014-7-15 11:05
他应该是没插无线调试器的缘故,之前我也是无意中发现的,和他一模一样的问题,插上就好了。不过考虑到比 ...

但是我都没有加这个模块啊
回复 支持 反对

使用道具 举报

发表于 2014-7-15 11:18:52 | 显示全部楼层
miss可可 发表于 2014-7-15 11:15
但是我都没有加这个模块啊

那就不知道了,不过你那个截图和我的情况是一样的,进入了那个中断,要不然你把那个中断去掉试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-15 11:32:51 | 显示全部楼层
草原上的星星 发表于 2014-7-15 11:18
那就不知道了,不过你那个截图和我的情况是一样的,进入了那个中断,要不然你把那个中断去掉试试

好的,我试试,谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-15 15:59:06 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-15 09:46
你的工程进入了默认中断函数,你看看是什么中断函数。

我后来改了一下超频,从148改到96,内核和总线分别是50和25,这样设置对吗。改过之后程序不飞了,但采集到的图像在上位机上显示的是左右一样的两条赛道,这是为什么那
回复 支持 反对

使用道具 举报

发表于 2014-7-15 17:28:05 | 显示全部楼层
miss可可 发表于 2014-7-15 15:59
我后来改了一下超频,从148改到96,内核和总线分别是50和25,这样设置对吗。改过之后程序不飞了,但采集到 ...

额。。。这个你貌似问错人了,其实我是小白,坐等山外的K60新书(据说七月底出版),大爱山外。没帮到你,不好意思哈,你可以问问山外,他是大神!!!
回复 支持 反对

使用道具 举报

发表于 2014-7-15 19:34:52 | 显示全部楼层
miss可可 发表于 2014-7-15 15:59
我后来改了一下超频,从148改到96,内核和总线分别是50和25,这样设置对吗。改过之后程序不飞了,但采集到 ...

改了底层后解决了图像卡住的问题 - 智能车讨论区 - 山外-vcan123论坛 http://www.vcan123.com/forum.php ... tid=4363&ctid=6

看看是不是这个问题导致的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-15 19:58:09 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-15 19:34
改了底层后解决了图像卡住的问题 - 智能车讨论区 - 山外-vcan123论坛 http://www.vcan123.com/forum.php ...

其实,,,有点不太懂。从什么地方可以看出在哪里出了问题啊,是不是<exception frame>下边那个函数就是问题所在啊
回复 支持 反对

使用道具 举报

发表于 2014-7-15 20:02:14 | 显示全部楼层
miss可可 发表于 2014-7-15 19:58
其实,,,有点不太懂。从什么地方可以看出在哪里出了问题啊,是不是下边那个函数就是问题所在啊

是的,那个是表示进入中断,其实是进入中断前的那个函数,往往那部分的代码有问题,才导致的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-15 20:04:51 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-15 20:02
是的,那个是表示进入中断,其实是进入中断前的那个函数,往往那部分的代码有问题,才导致的

是黄色标记的那一句吗,可以程序的上边有一个类型一样的语句就没问题啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-15 20:06:22 | 显示全部楼层
miss可可 发表于 2014-7-15 20:04
是黄色标记的那一句吗,可以程序的上边有一个类型一样的语句就没问题啊。

是黄色标记的那一句吗,可是程序的上边有一个类型一样的语句就没问题啊
回复 支持 反对

使用道具 举报

发表于 2014-7-15 20:35:47 | 显示全部楼层
miss可可 发表于 2014-7-15 20:06
是黄色标记的那一句吗,可是程序的上边有一个类型一样的语句就没问题啊

是的,你把代码也上传上来,不然我们不知道你说什么的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-15 20:44:19 | 显示全部楼层

  1. /*********************************************
  2. ** 函数名称 : Centerline_extract()
  3. ** 函数功能 : 提取赛道中线,获取相关赛道信息
  4. ** 输    入        : (*pdata)[ucLIE]
  5. ** 输    出        : 无
  6. ** 返    回        : 无
  7. ** 备    注 : 前两行无效
  8. *********************************************/
  9. void AH_Centerline_extract(uint8 (*pdata)[ucLIE])
  10. {
  11.   int8 i;
  12.   uint16 j;
  13.   track.ucMiddle[44] = ucHLIE;                                                 //中间点
  14.   track.ucWhiteLineNUM = 0;
  15.   track.ucRightWhiteNUM[0]=0;
  16.   track.ucRightWhiteNUM[1]=0;
  17.   track.ucLeftWhiteNUM[0]=0;
  18.   track.ucLeftWhiteNUM[1]=0;
  19.   deviation[0] = 0;
  20.   uint8 middle = 0;
  21.   uint8 rightOK = 0,leftOK = 0;
  22.   track.ucHangEN[0] = 44;
  23.   for(i = 43;i >=0;i--)                                               //隔行扫描
  24. {
  25.     rightOK = 0;
  26.     leftOK = 0;
  27.     middle = track.ucMiddle[i + 1];
  28.         if((pdata[i][middle + 1] < ucNearAVE) && (pdata[i][middle + 2] < ucNearAVE )&& (pdata[i][middle + 3] < ucNearAVE )&& (pdata[i][middle + 4] < ucNearAVE )){  //提前结束搜索 110  当提取的中线与赛道边线交差时提前结束搜索中线
  29.          if(i >=36){
  30.            track.ucMiddle[i] = track.ucMiddle[i+1];
  31.            track.ucRightBlack[i] = track.ucRightBlack[i+1]; //无效
  32.            track.ucLeftBlack[i] = track.ucLeftBlack[i+1];  //无效
  33.            continue;
  34.          }else{
  35.           track.ucHangEN[0] = 43-i;
  36.            break;
  37.         }
  38.     }


  39.     for(j = track.ucMiddle[i + 1]+6 ;j < ucLIE;j++)                                      //提取右边线
  40.     {
  41.        if(pdata[i][j-2] < ucNearAVE && pdata[i][j-1] < ucNearAVE && pdata[i][j] < ucNearAVE )
  42.        {
  43.         track.ucRightBlack[i] = j-6;
  44.         rightOK = 1;
  45.         break;
  46.        }

  47.      }
  48.     for(j = track.ucMiddle[i + 1]-6; j > 1;j--)                                                //提取左边线
  49.     {
  50.        [color=Red]if(pdata[i][j+2] < ucNearAVE && pdata[i][j+1] < ucNearAVE && pdata[i][j] < ucNearAVE )[/color]
  51.        {
  52.         track.ucLeftBlack[i] = j;
  53.         leftOK = 1;
  54.         break;
  55.        }
  56.     }
  57.     if(!rightOK && leftOK) track.ucRightWhiteNUM[0]++;
  58.     if(rightOK && !leftOK) track.ucLeftWhiteNUM[0]++;
  59.     if(!rightOK && !leftOK)                                                                                         //左右均不可见
  60.     {
  61.         track.ucWhiteLineNUM++;
  62.     }
就是这个函数,我找不出来错误。
哎。。。后天就要比赛了。。。好忧伤啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-15 20:46:54 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-15 20:35
是的,你把代码也上传上来,不然我们不知道你说什么的

代码已经发了,麻烦给看一下。OTZ
回复 支持 反对

使用道具 举报

发表于 2014-7-15 20:58:16 | 显示全部楼层
miss可可 发表于 2014-7-15 20:44
就是这个函数,我找不出来错误。
哎。。。后天就要比赛了。。。好忧伤啊

直接在调用栈里,双击黄色箭头那个函数,截图处理
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-15 21:11:38 | 显示全部楼层
就是这个。。。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-15 21:11:58 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-15 20:58
直接在调用栈里,双击黄色箭头那个函数,截图处理

又忘记点回复了
回复 支持 反对

使用道具 举报

发表于 2014-7-15 21:15:32 | 显示全部楼层
miss可可 发表于 2014-7-15 21:11
就是这个。。。

自己看看有没有数组越界
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-15 21:21:28 | 显示全部楼层
山外メ雲ジ 发表于 2014-7-15 21:15
自己看看有没有数组越界

要在哪里看啊,怎么看
回复 支持 反对

使用道具 举报

发表于 2014-7-15 21:46:04 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2014-7-15 22:18:04 | 显示全部楼层
miss可可 发表于 2014-7-15 21:21
要在哪里看啊,怎么看

这种情况,一般都是你数组超界导致程序跑飞,
我也遇到过,超烦人,,
你还是仔仔细细的检查下吧,,,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-16 09:01:56 | 显示全部楼层
111xian 发表于 2014-7-15 22:18
这种情况,一般都是你数组超界导致程序跑飞,
我也遇到过,超烦人,,
你还是仔仔细细的检查下吧,,,

好的,谢谢
回复 支持 反对

使用道具 举报

发表于 2014-7-16 10:07:29 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

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

本版积分规则

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