机器人天空 发表于 2018-5-18 21:58:10

宏定义计算出错

请教各位大神,为啥宏定义ACT1_RCLA_STOP_ON实际的值并不是420,但是ACT1_RCLA_TAIL_ON的值是80?

#defineRCLB_TAIL_UP                           4
#defineRCLA_TAIL                              11
#defineRCLB_TAIL_DOWN                      6
#defineRCLA_STOP                              7
#defineRCLB_STOP                              7

#defineACT1_CYCLE                              200//周期200ms
#defineACT1_RATIO                              10   //系数
#defineACT1_RCLA_WAIT                     1500 //1500ms

#defineACT1_RCLA_TAIL_ON                ((RCLB_TAIL_UP*ACT1_CYCLE)/ACT1_RATIO)   // 80
#defineACT1_RCLA_STOP_ON    (((RCLA_TAIL*ACT1_CYCLE)+(RCLB_TAIL_DOWN*ACT1_CYCLE)+ACT1_RCLA_TAIL_ON)/ACT1_RATIO))// 420
#defineACT1_RCLA_STOP_OFF             ((RCLA_STOP*ACT1_CYCLE)+ACT1_RCLA_WAIT+ACT1_RCLA_STOP_ON)               // 710
#defineACT1_RCLA_TAIL_OFF            ((RCLA_STOP*ACT1_CYCLE)+(RCLB_TAIL_DOWN*ACT1_CYCLE)+ACT1_RCLA_STOP_OFF) //970

luobote55 发表于 2018-5-18 22:03:26

#defineACT1_RCLA_TAIL_ON                ((RCLB_TAIL_UP*ACT1_CYCLE)/ACT1_RATIO)   // 80
4 * 200 / 10 = 80 没毛病啊。

#defineACT1_RCLA_STOP_ON    (((RCLA_TAIL*ACT1_CYCLE)+(RCLB_TAIL_DOWN*ACT1_CYCLE)+ACT1_RCLA_TAIL_ON)/ACT1_RATIO))// 420
(((11 * 200) + (6 * 200)) + 80) / 10 = 348 没毛病啊。

机器人天空 发表于 2018-5-18 22:09:41

luobote55 发表于 2018-5-18 22:03
#defineACT1_RCLA_TAIL_ON                ((RCLB_TAIL_UP*ACT1_CYCLE)/ACT1_RATIO)   // 80
4 * 200 ...

我也很郁闷,开发环境是codewarrior 11.6

luobote55 发表于 2018-5-18 22:15:57

后面注释的值是运行得出的值?

机器人天空 发表于 2018-5-18 22:17:30

luobote55 发表于 2018-5-18 22:15
后面注释的值是运行得出的值?

是我自己计算后写的注释

luobote55 发表于 2018-5-18 22:20:43

机器人天空 发表于 2018-5-18 22:17
是我自己计算后写的注释

那到底是什么问题呢?
能描述清楚吗?

机器人天空 发表于 2018-5-18 22:25:50

luobote55 发表于 2018-5-18 22:20
那到底是什么问题呢?
能描述清楚吗?

明天再用别的编译器试一下吧

rundream 发表于 2018-5-18 22:28:16

机器人天空 发表于 2018-5-18 22:17
是我自己计算后写的注释

这是几位单片机?

机器人天空 发表于 2018-5-18 22:30:01

rundream 发表于 2018-5-18 22:28
这是几位单片机?

16位的,飞思卡尔的S12ZVL

rundream 发表于 2018-5-18 22:40:04

机器人天空 发表于 2018-5-18 22:30
16位的,飞思卡尔的S12ZVL

是不是计算的中间过程超过了0xff ff能表达的范围?

机器人天空 发表于 2018-5-18 22:42:43

rundream 发表于 2018-5-18 22:40
是不是计算的中间过程超过了0xff ff能表达的范围?

应该不会,我定义的变量是unsigned int 型,
ACT1_RCLA_STOP_ON最多也就420

rundream 发表于 2018-5-18 22:43:23

luobote55 发表于 2018-5-18 22:03
#defineACT1_RCLA_TAIL_ON                ((RCLB_TAIL_UP*ACT1_CYCLE)/ACT1_RATIO)   // 80
4 * 200 ...

我算也是348{:sad:}

机器人天空 发表于 2018-5-18 22:46:47

rundream 发表于 2018-5-18 22:43
我算也是348

尴尬了,我在线仿真也是348,你用的什么开发环境?

rundream 发表于 2018-5-18 22:49:13

本帖最后由 rundream 于 2018-5-18 22:55 编辑

机器人天空 发表于 2018-5-18 22:46
尴尬了,我在线仿真也是348,你用的什么开发环境?
---------------------------------------------
编辑原因:更换正确图片
世界五百强企业提供的算力!

机器人天空 发表于 2018-5-18 22:57:32

rundream 发表于 2018-5-18 22:49
世界五百强企业提供的算力!

我懂了,是我的错{:titter:}
ACT1_RCLA_TAIL_ON 计算结果已经除以系数10,而下面ACT1_RCLA_STOP_ON整体又除以系数10所以导致结果有问题
#defineACT1_RCLA_STOP_ON    (((RCLA_TAIL*ACT1_CYCLE)+(RCLB_TAIL_DOWN*ACT1_CYCLE)+ACT1_RCLA_TAIL_ON)/ACT1_RATIO))// 420

机器人天空 发表于 2018-5-18 22:58:23

感谢rundream和luobote55两位坛友的指点{:lol:}
页: [1]
查看完整版本: 宏定义计算出错