OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4905|回复: 7

调试时候出现奇怪的现象

[复制链接]

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-7-10
在线时间
0 小时
发表于 2014-8-18 17:22:04 | 显示全部楼层 |阅读模式
5金钱
u8 servomove (u16   ccrup, u16 ccrp12,u16 ccrdown ,u8 s1,u8 s23, u8 s4 )
                                                            //控制定位舵机 其中down为旋转舵机  a7,PB 0 ,PB1 , PA 6 
{

u16 c1,c2;
servop1ratio=13;
servop2ratio=13;//分别是TIM3->CCR3,4
while (s1||s23||s4)
{
c2= (u16)servop2ratio ;
c1= (u16)servop1ratio ;
}
return 1 ;
}
出现了极其不科学的事情。调试的时候显示c1 ,c2 竟然都是零。
这是什么情况?求大神指点。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

头像被屏蔽

2

主题

164

帖子

1

精华

禁止访问

积分
1316
金钱
1316
注册时间
2012-5-13
在线时间
127 小时
发表于 2014-8-18 20:15:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-8-18 20:46:49 | 显示全部楼层
回复【2楼】qq371833846:
---------------------------------
是的。。
这是最有可能的。
因为你的C1,C2并没有被引用到,说明他们没有存在的价值,就可能被优化了。。。、
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-7-10
在线时间
0 小时
 楼主| 发表于 2014-8-18 21:46:09 | 显示全部楼层
回复【3楼】Admin:
---------------------------------
不是的。这个c确实显示了servop1ratio的值,13并没有赋值给servop1ratio。从波形图可以看出来。而且,当while循环进行一次之后,C就可以正确的显示值了,但是是26,这么说就是servop2ratio在被赋值13后的值是-1,这样自加运算之后才是零,C1才会是26.。。。。。。。而且,如果继续跟着程序调试的话,就会发现其他的赋值一切正常了。。。。
u8 servomove (u16   ccrup, u16 ccrp12,u16 ccrdown ,u8 s1,u8 s23, u8 s4 )
                                                            //控制定位舵机 其中down为旋转舵机  a7,PB 0 ,PB1 , A 6 
{

u16 c1,c2;
if (ccrup>25||ccrp12>25||ccrdown>25)
return 0 ;
servop1ratio =13;
servop2ratio=13;
while (s23==1)
{
   c1=servop1ratio;
 if (s23)
{

  if (servop2ratio>ccrp12)
{
  servop2ratio--;
  servop1ratio=26-servop2ratio;
  delay_ms(smooth);
}
if (servop2ratio < ccrp12)
{
  servop2ratio++;
servop1ratio=26-servop2ratio;
delay_ms(smooth);
}
  if (servop2ratio == ccrp12)
   s23=0;
}

}
return 1 ;
}
回复

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-7-10
在线时间
0 小时
 楼主| 发表于 2014-8-18 21:46:22 | 显示全部楼层
回复【2楼】qq371833846:
---------------------------------
不是的。这个c确实显示了servop1ratio的值,13并没有赋值给servop1ratio。从波形图可以看出来。而且,当while循环进行一次之后,C就可以正确的显示值了,但是是26,这么说就是servop2ratio在被赋值13后的值是-1,这样自加运算之后才是零,C1才会是26.。。。。。。。而且,如果继续跟着程序调试的话,就会发现其他的赋值一切正常了。。。。
u8 servomove (u16   ccrup, u16 ccrp12,u16 ccrdown ,u8 s1,u8 s23, u8 s4 )
                                                            //控制定位舵机 其中down为旋转舵机  a7,PB 0 ,PB1 , A 6 
{

u16 c1,c2;
if (ccrup>25||ccrp12>25||ccrdown>25)
return 0 ;
servop1ratio =13;
servop2ratio=13;
while (s23==1)
{
   c1=servop1ratio;
 if (s23)
{

  if (servop2ratio>ccrp12)
{
  servop2ratio--;
  servop1ratio=26-servop2ratio;
  delay_ms(smooth);
}
if (servop2ratio < ccrp12)
{
  servop2ratio++;
servop1ratio=26-servop2ratio;
delay_ms(smooth);
}
  if (servop2ratio == ccrp12)
   s23=0;
}

}
return 1 ;
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-19 00:32:36 | 显示全部楼层
楼主位的c1,c2没有被用到,直接会被编译器无视的。
这个你自己加个printf,打印C1,C2的值,就不会被优化了,立即就可以看到效果的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-7-10
在线时间
0 小时
 楼主| 发表于 2014-8-19 12:03:14 | 显示全部楼层
加上printf还是不行。。。。。关键是现象也表明,赋值确实不成功。调试脉冲波确实是从零开始的。
这是程序源码,求原子哥救援。。。

ALIENTEK MINISTM32 实验3 串口实验.zip

449.49 KB, 下载次数: 58

回复

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-7-10
在线时间
0 小时
 楼主| 发表于 2014-8-19 12:04:08 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥看下六楼源码。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-3 13:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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