5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 1181|回复: 15
打印 上一主题 下一主题

mwc版本不同飞控代码差异

[复制链接]
跳转到指定楼层
楼主
发表于 2015-3-5 00:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xzzd1000 于 2015-3-6 13:43 编辑

mwc的版本不同里面的代码差异挺大的。在2.3版本之前#define ROLL       0
#define PITCH      1
#define YAW        2
#define THROTTLE   3
#define AUX1       4
#define AUX2       5
#define AUX3       6
#define AUX4       7
2.3版只有
const char pidnames[] PROGMEM = "ROLL;" "PITCH;" "YAW;" "ALT;" "Pos;" "PosR;" "NavR;" "LEVEL;" "MAG;" "VEL;"  ;

有没有人知道,原来2.3版本以前的定义去哪里了?







欢迎继续阅读楼主其他信息

沙发
发表于 2015-3-5 09:11 | 只看该作者
改了代码嘛,用了预先存储而已,减少ram的消耗啊。怎么了?
3
发表于 2015-3-5 11:28 | 只看该作者
这些发不是差不多嘛..一个是单独定义..是个是放到数组内使用..话说...能不能先学会语法
4
 楼主| 发表于 2015-3-5 14:06 | 只看该作者
sakunamary 发表于 2015-3-5 09:11
改了代码嘛,用了预先存储而已,减少ram的消耗啊。怎么了?

对的,就是想问问这两种代码在飞控中是器什么作用?
5
 楼主| 发表于 2015-3-5 14:57 | 只看该作者
爵爷 发表于 2015-3-5 11:28
这些发不是差不多嘛..一个是单独定义..是个是放到数组内使用..话说...能不能先学会语法

单独定义那个很明显,定义 ROLL为0,PITCH为1,YAW为2等等
我也知道2.3版本的是定义一个放在flash里面的数组,正如你所说的,我不是很明白那个语法
为什么pidnames[] PROGMEM =后面没有用中括号将后面的变量全都括起来,而且为什么还用“ ”将ROLL;等变量括起来?
6
发表于 2015-3-5 15:17 | 只看该作者
xzzd1000 发表于 2015-3-5 14:57
单独定义那个很明显,定义 ROLL为0,PITCH为1,YAW为2等等
我也知道2.3版本的是定义一个放在flash里面的 ...

之前定义的也相当于是一堆常量而已...后来改成数组更简洁..而且占用更少

7
发表于 2015-3-5 15:45 | 只看该作者
xzzd1000 发表于 2015-3-5 14:57
单独定义那个很明显,定义 ROLL为0,PITCH为1,YAW为2等等
我也知道2.3版本的是定义一个放在flash里面的 ...

这个就是定义数组变量的格式吧,引用的时候应该是  pidnames.roll   pidnames.picth   ....... 或者 pidnames(pidnames)=xx     
本人也在研究mwc

8
 楼主| 发表于 2015-3-5 17:30 | 只看该作者
爵爷 发表于 2015-3-5 15:17
之前定义的也相当于是一堆常量而已...后来改成数组更简洁..而且占用更少

对了,为什么我在mwc 2.3版本里面找不到 ROLL PITCH YAW THROTTLE AUX1等这些值大小的定义啊?

9
发表于 2015-3-5 18:51 | 只看该作者
xzzd1000 发表于 2015-3-5 17:30
对了,为什么我在mwc 2.3版本里面找不到 ROLL PITCH YAW THROTTLE AUX1等这些值大小的定义啊?

你是说读取遥控器数据的?
来自苹果客户端来自苹果客户端
10
 楼主| 发表于 2015-3-5 19:12 | 只看该作者
爵爷 发表于 2015-3-5 18:51
你是说读取遥控器数据的?

对对对,就是这个意思

11
 楼主| 发表于 2015-3-5 21:02 | 只看该作者
爵爷 发表于 2015-3-5 18:51
你是说读取遥控器数据的?

你知道吗?

12
发表于 2015-3-5 23:21 | 只看该作者
这个问题建议去拿本C语言教材看一看就懂了,两种写法的效果是完全一样的
13
发表于 2015-3-6 10:10 | 只看该作者
之前版本的内存代码可能是这样的:
0000 0000 0000 0001 YAW=1
0000 0000 0000 0010 ROLL=2
0000 0000 0000 0011 PITCH=3
之后的内存代码可能是这样的:
0001 0010 0011 0000 PID=[YAW=1,ROLL=2,PITCH=3]
可以看出之后的代码比之前的更省内存空间。
个人见解,仅供参考。:)
14
 楼主| 发表于 2015-3-6 13:49 | 只看该作者
do335maomao 发表于 2015-3-5 23:21
这个问题建议去拿本C语言教材看一看就懂了,两种写法的效果是完全一样的

我看过好几遍c语言的书了,表示真没见过这样的语句,这个还不带中括号,当然没带中括号的我见过,直接是字符串赋值给数组! 可是下面的代码有这么多个字符串,而且每个字符串后面还带有个分号!您说一看就懂,那求指点咯 const char pidnames[] PROGMEM = "ROLL;" "PITCH;" "YAW;" "ALT;" "Pos;" "PosR;" "NavR;" "LEVEL;" "MAG;" "VEL;"  ;



15
发表于 2015-3-6 15:13 | 只看该作者
xzzd1000 发表于 2015-3-6 13:49
我看过好几遍c语言的书了,表示真没见过这样的语句,这个还不带中括号,当然没带中括号的我见过,直接是 ...

这个就是吧ROLL赋值为0,PITCH赋值为1,接下去是2,3,4,依次类推
把这段摘出来放到avr上跑一遍,输出下这几个值,最清楚不过了嘛

16
 楼主| 发表于 2015-3-6 21:07 | 只看该作者
do335maomao 发表于 2015-3-6 15:13
这个就是吧ROLL赋值为0,PITCH赋值为1,接下去是2,3,4,依次类推
把这段摘出来放到avr上跑一遍,输出下 ...

现在我看懂了,这个没有赋值的功能,不能得到ROLL为1,PITCH为2.......这个就是把"ROLLPITCHYAWALTPosPosRNavRLEVELMAGVEL;"一串字符串放到pidnames这个数组里面

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

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