注册 登录
查看: 826|回复: 15

[K60] k60程序处理

[复制链接]
发表于 2013-7-6 15:16:42 | 显示全部楼层 |阅读模式
为什么我写一句判断 当ad[1] <50 && ad2<50让程序处理一个东西,但是 当他们有一个小于50的时候却没有反应?  检查程序n便感觉程序没问题。怀疑是不是k60超频过高? 或者中断影响? (中断全部disable以后也会出现 )貌似还有点概率问题?  
回复

使用道具 举报

 楼主| 发表于 2013-7-6 15:18:13 | 显示全部楼层
是不是山外哥底层库有东西有问题?
回复 支持 反对

使用道具 举报

发表于 2013-7-6 15:21:41 | 显示全部楼层
排除法解决:ad[1] 和 ad2 都先用一个常数来代码看看

没有反应 ,那是什么意思?
回复 支持 反对

使用道具 举报

发表于 2013-7-6 15:25:49 | 显示全部楼层
JudeScorpio 发表于 2013-7-6 15:18
是不是山外哥底层库有东西有问题?

出问题,把责任推到别人的身上,会影响到你的判断

把 你的代码 贴上拉,详细描述一下 现象,如果你简单的说没反应,我们不清楚你的没反应是啥意思,是死机?条件成立但没进入语句执行?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-6 15:26:55 | 显示全部楼层
山外メ雲ジ 发表于 2013-7-6 15:21
排除法解决:ad[1] 和 ad2 都先用一个常数来代码看看

没有反应 ,那是什么意思?

就是当有一个小于50我在5110上显示了一个特定的东西。但是  没有显示,就是没有进去小于50以后需要处理的函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-6 15:31:40 | 显示全部楼层
void adManage(void)
{
  AD[0] = ((AD[1]<50)?250:AD[0]);
  AD[1] = ((AD[0]<50)?250:AD[1]);
  if((AD[5]>OUT_BACKWARD)&&(AD[2]>OUT_BACKWARD))
  {
    lTrackLose = 0;
    rTrackLose = 0;
  }
  else
    reverseCount();     
}

void reverseCount(void)
{  
  if(AD[2]<50&&(road[2]<(-10))&&lTrackLose ==0&&rTrackLose ==0)
  {
    if((rTrackLose == 0)&&(lTrackLose==0))
    {
      ad5reverseCountMax = AD[5];
      if(ad5reverseCountMax <= 200)
        ad5reverseCountMax = 200;
    }
    rTrackLose = 1;
    lTrackLose = 0;   
  }  
  else if(AD[5]<50&&(road[2]>10)&&rTrackLose ==0&&lTrackLose ==0)
  {
    if((rTrackLose == 0)&&(lTrackLose==0))
    {
      ad2reverseCountMax = AD[2];
      if(ad2reverseCountMax <= 200)
        ad2reverseCountMax = 200;
    }
    lTrackLose = 1;
    rTrackLose = 0;
  }   
  if(rTrackLose == 1)
  {
    differenceAD[5] =  ad5reverseCountMax - AD[5];
    AD[5] = ad5reverseCountMax + differenceAD[5];
  }
  else if(lTrackLose == 1)
  {
    differenceAD[2] =  ad2reverseCountMax - AD[2] ;
    AD[2] = ad2reverseCountMax + differenceAD[2];  
  }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-6 15:33:42 | 显示全部楼层
额,是的。
但是之前还是一直很稳定,怀疑是超频问题吧。

就是有一个小于50 另一个反正往上加。
而且5110上显示着
rTrackLose lTrackLose  标志位。但是 小于50 以后还是显示0 0  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-6 15:38:13 | 显示全部楼层
山外メ雲ジ 发表于 2013-7-6 15:25
出问题,把责任推到别人的身上,会影响到你的判断

把 你的代码 贴上拉,详细描述一下 现象,如果你简单 ...

是的。主要从上午做到现在一个一个挨着试了试,有时候屏蔽到下面的一段函数就能进入判断,我害怕是定时器问题,然后有加了一堆无用的赋值语句同屏蔽的长度相同,然后竟然有不进入判断了。然后我吧定时器关了,但是还是概率性进入不进入
条件成立但没进入语句执行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-6 15:40:03 | 显示全部楼层
是  AD[5] 和 AD[2] 小于 50  road【2】是这两个的差值road[0]=(s32)(AD[2]-AD[5]);//外一字差值
回复 支持 反对

使用道具 举报

发表于 2013-7-6 15:42:35 | 显示全部楼层
JudeScorpio 发表于 2013-7-6 15:33
额,是的。
但是之前还是一直很稳定,怀疑是超频问题吧。

超频,是容易导致异常的情况发生,既然你怀疑超频,那可以先降低频率来排除这个可能性。或者换一块核心板来测试,排除核心板的问题
回复 支持 反对

使用道具 举报

发表于 2013-7-6 15:43:40 | 显示全部楼层
JudeScorpio 发表于 2013-7-6 15:40
是  AD[5] 和 AD[2] 小于 50  road【2】是这两个的差值road[0]=(s32)(AD[2]-AD[5]);//外一字差值

通过串口,把这几个参数都打印出来,然后如果跳进 if ,也打印出来
回复 支持 反对

使用道具 举报

发表于 2013-7-6 15:44:57 | 显示全部楼层
JudeScorpio 发表于 2013-7-6 15:26
就是当有一个小于50我在5110上显示了一个特定的东西。但是  没有显示,就是没有进去小于50以后需要处理的 ...

5110 ,你是用模拟时序的方式实现的吗?
模拟时序,有个不好的地方是抗干扰能力弱,如果被中断了,容易破坏时序。

你可以实现 printf 函数 来进行调试
回复 支持 反对

使用道具 举报

发表于 2013-7-6 15:45:41 | 显示全部楼层
JudeScorpio 发表于 2013-7-6 15:33
额,是的。
但是之前还是一直很稳定,怀疑是超频问题吧。

超频,有可能导致你 与 5110 的时序不对,导致显示异常的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-6 21:17:12 | 显示全部楼层
试了一下,是超频问题。改成150没问题
回复 支持 反对

使用道具 举报

发表于 2013-7-6 21:25:30 | 显示全部楼层
JudeScorpio 发表于 2013-7-6 21:17
试了一下,是超频问题。改成150没问题

确定是超频问题,那就容易解决。
是否超频导致液晶显示异常,你用 printf 来看看是否真的没执行到(或者LED等方式)
回复 支持 反对

使用道具 举报

发表于 2013-7-7 17:39:31 | 显示全部楼层
JudeScorpio 发表于 2013-7-6 21:17
试了一下,是超频问题。改成150没问题

超频导致计算错误?应该是还有其他原因的,不是根本原因
回复 支持 反对

使用道具 举报

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

本版积分规则

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