注册 登录
查看: 430|回复: 16

[平衡组] 关于无线调试变量的疑问

[复制链接]
发表于 2014-3-30 17:28:42 | 显示全部楼层 |阅读模式
山外无线调试变量的例程里有6个变量:
uint8  var1 = 20, var2;
uint16 var3, var4;
uint32 var5, var6;
不过这6个变量好像没什么作用。现在我想用直立控制部分的PD等参数替代这些空变量的位置,是不是只需要将这6个空变量中的相应变量换成需要调试的参数变量就可以???有做过无线调试的吗?你们是怎么做的?
回复

使用道具 举报

发表于 2014-3-30 17:45:38 | 显示全部楼层
你看看山外哥的视频吧,有讲如何修改的。

需要将这6个空变量中的相应变量换成需要调试的参数变量,不过需要修改几个地方
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-30 17:49:35 | 显示全部楼层
栾端静 发表于 2014-3-30 17:45
你看看山外哥的视频吧,有讲如何修改的。

需要将这6个空变量中的相应变量换成需要调试的参数变量,不过需要 ...

嗯,看了,也大致知道要修改的那几个地方,只是有点疑问,因为有的参数是由define宏定义的,那如果再在主函数之前定义这些同名变量,会不会有冲突,或者程序无法识别?
回复 支持 反对

使用道具 举报

发表于 2014-3-30 17:51:12 | 显示全部楼层
草原上的星星 发表于 2014-3-30 17:49
嗯,看了,也大致知道要修改的那几个地方,只是有点疑问,因为有的参数是由define宏定义的,那如果再在主 ...

不是同名。一个是大写,一个是小写。
大写的是编号,小写是真正的变量
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-30 17:56:11 | 显示全部楼层
栾端静 发表于 2014-3-30 17:51
不是同名。一个是大写,一个是小写。
大写的是编号,小写是真正的变量

不是那个,我意思是我需要用来替换的那些参数(如下):
#define MMA7361_ratio               0.14  //0.12//1150  //将加速度计采集到的角度归一化时需要用到的系数
#define P_ANGLE             35         //角度控制比例参数
#define D_ANGLE             0.5        //角度控制微分参数

如果我再定义一遍,如:
int32  MMA7361_ratio , P_ANGLE, D_ANGLE ;
会不会冲突?
回复 支持 反对

使用道具 举报

发表于 2014-3-30 17:58:23 | 显示全部楼层
草原上的星星 发表于 2014-3-30 17:56
不是那个,我意思是我需要用来替换的那些参数(如下):
#define MMA7361_ratio               0.14  // ...

删掉宏定义的,然后直接用变量替换
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-30 17:59:30 | 显示全部楼层
栾端静 发表于 2014-3-30 17:58
删掉宏定义的,然后直接用变量替换

嗯,明白了。非常感谢
回复 支持 反对

使用道具 举报

发表于 2014-3-30 18:19:18 | 显示全部楼层
草原上的星星 发表于 2014-3-30 17:59
嗯,明白了。非常感谢

对了,山外哥的代码支持32位的,但是会当作是整型来处理,所以调试的时候,需要处理一下,例如你定义一个整型  uint32 num ,然后 num = MMA7361_ratio * 100 ,调试的时候是 调试num ,然后接收到num的值后,MMA7361_ratio  = num  / 100.0
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-30 18:22:28 | 显示全部楼层
栾端静 发表于 2014-3-30 18:19
对了,山外哥的代码支持32位的,但是会当作是整型来处理,所以调试的时候,需要处理一下,例如你定义一个整 ...

嗯,这个之前我也有考虑到,因为调试器上只能加整数(之前我是这样想的),你这么一解释我就更明白了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-30 18:36:03 | 显示全部楼层
栾端静 发表于 2014-3-30 18:19
对了,山外哥的代码支持32位的,但是会当作是整型来处理,所以调试的时候,需要处理一下,例如你定义一个整 ...

对了,还有件事想问你,这个变量最多能有几个?直立控制和速度控制用到的参数好像定义为8位【uint8】就可以了对吧?或者我uint8下定义2个,uint16下定义2个,uint32定义两个,刚好6个?
回复 支持 反对

使用道具 举报

发表于 2014-3-30 18:44:46 | 显示全部楼层
草原上的星星 发表于 2014-3-30 18:36
对了,还有件事想问你,这个变量最多能有几个?直立控制和速度控制用到的参数好像定义为8位【uint8】就可 ...

理论上是255个吧(用uint8 修饰编号的),视频有讲怎么拓展的
回复 支持 反对

使用道具 举报

发表于 2014-3-30 18:46:32 | 显示全部楼层
草原上的星星 发表于 2014-3-30 18:36
对了,还有件事想问你,这个变量最多能有几个?直立控制和速度控制用到的参数好像定义为8位【uint8】就可 ...

可以拓展的,山外哥仅仅示范了 6个而已,按照山外哥提供的规则加进去就好了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-30 21:04:52 | 显示全部楼层
栾端静 发表于 2014-3-30 18:19
对了,山外哥的代码支持32位的,但是会当作是整型来处理,所以调试的时候,需要处理一下,例如你定义一个整 ...

出问题了:
首先,我在control.h里面注释掉#define Gyro_ratio

然后再在control.c里定义:
float  Gyro_ratio=0.8;        //0.8    //陀螺仪比例参数

在main.c中定义:
uint8  var1_Gyro_ratio;     //Gyro_ratio*100      //陀螺仪比例参数*100
再对其赋值:var1_Gyro_ratio=Gyro_ratio*100;      //陀螺仪比例参数*100

然后编译出错:


问题不在这,问题是我在main.c 中定义【float  Gyro_ratio;        //0.8    //陀螺仪比例参数】后,它显示我重定义:

这是为何???你有遇到过吗?

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2014-3-30 21:47:33 | 显示全部楼层
草原上的星星 发表于 2014-3-30 21:04
出问题了:
首先,我在control.h里面注释掉#define Gyro_ratio

要在 头文件里加声明!!!
既然已经定义了,就不需要在main那里重新定义,只需要加声明即可,声明的时候加上 extern 修饰
回复 支持 反对

使用道具 举报

发表于 2014-3-30 21:47:35 | 显示全部楼层
草原上的星星 发表于 2014-3-30 21:04
出问题了:
首先,我在control.h里面注释掉#define Gyro_ratio

要在 头文件里加声明!!!
既然已经定义了,就不需要在main那里重新定义,只需要加声明即可,声明的时候加上 extern 修饰
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-31 07:32:34 | 显示全部楼层
小学童鞋 发表于 2014-3-30 21:47
要在 头文件里加声明!!!
既然已经定义了,就不需要在main那里重新定义,只需要加声明即可,声明的时候 ...

还是不行,在control.h中声明:
extern float  Gyro_ratio=0.8;        //0.8    //陀螺仪比例参数
结果还是报错:

如果不声明的话,在control.c中又报错:

在control.c 中定义:
float  Gyro_ratio;        //0.8    //陀螺仪比例参数
然后没有报错了。问题是这个在main.c中还用到,所以用到时还是会报错,说是未定义。而我在main.c 中定义后,它又显示重复定义,这到底是为什么呢?你遇到这问题吗?

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2014-3-31 11:36:35 | 显示全部楼层
草原上的星星 发表于 2014-3-31 07:32
还是不行,在control.h中声明:
extern float  Gyro_ratio=0.8;        //0.8    //陀螺仪比例参数
结果 ...

声明的时候不能赋值!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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