搜索
bottom↓
回复: 6

请高手指点下这2个函数有什么问题

[复制链接]

出0入0汤圆

发表于 2012-3-29 10:52:15 | 显示全部楼层 |阅读模式
本帖最后由 szzyq 于 2012-3-29 10:54 编辑

以下是遥控器的2个函数,但有些不明白,请高手指点下是怎么回事?
看以下这2个函数,在FALSE == remote_offset_adjust_flag时按下ADJUST键进入remote_adjust_key_operation()这个函数,在这个函数里会
将remote_offset_adjust_flag赋值为TRUE,在这种情况下再按下任意键应该进入到调整偏移量模式的SWITCH下,只有按下ADJUST键和SAVE键
才会退出调整偏移量模式,在这个SWITCH结构里FRONT\STOP\BACK没定义去向,如按下这几个键应该是不起任何作用的,但现在的情况是按
下任意键都是退出。看程序只有在按下ADJUST键和SAVE键才会将remote_offset_adjust_flag赋值为FALSE而退出ELSE下的SWITCH结构,而且
整个程序里只有remote_adjust_key_operation()和remote_offset_adjust_value_save()这2个函数会将改变remote_offset_adjust_flag的值。
现在却是按下FRONT\STOP\BACK也改变了remote_offset_adjust_flag的值从而退出了调整偏移量模式。请问到底是怎么回事?

void remote_key_operation(void)
{
    if(FALSE == remote_offset_adjust_flag)         //非调整模式
    {
        switch(RF_key_number)
        {
            case REMOTE_STOP_KEY:   remote_stop_key_operation(); break;                  //按下STOP键
            case REMOTE_FRONT_KEY:  remote_front_key_operation(); break;                //按下FRONT键
            case REMOTE_BACK_KEY:   remote_back_key_operation(); break;                  //按下BACK键
            case REMOTE_LEFT_KEY:   remote_left_key_operation(); break;
            case REMOTE_RIGHT_KEY:  remote_right_key_operation(); break;
            case REMOTE_ADJUST_KEY: remote_adjust_key_operation(); break;                //按下ADJUST键
            //case REMOTE_SAVE_KEY:   remote_prescribe_length_key_operation(); break;
            default: break;
        }
    }
    //偏移量调整
    else                                             //调整偏移量模式
    {
        switch(RF_key_number)
        {
            case REMOTE_ADJUST_KEY: remote_adjust_key_operation(); break;         //按下ADJUST键
            case REMOTE_BACK_KEY:   
            case REMOTE_FRONT_KEY:  
            case REMOTE_STOP_KEY:   
            case REMOTE_SAVE_KEY:   remote_offset_adjust_value_save(); break;     //按下SAVE键
            case REMOTE_LEFT_KEY:   send_adjust('R'); break;                                //按下LEFT键
            case REMOTE_RIGHT_KEY:  send_adjust('L'); break;                               //按下RIGHT键
            default: break;
        }
    }
}

void remote_adjust_key_operation(void)
{
    if(TRUE == remote_offset_adjust_flag)
    {
        start_flag = 0;
        set_speed_band = 0;
        system_mode = MODE_RUN;

        send_adjust('E');

        remote_offset_adjust_flag = FALSE;
    }
    else
    {
        set_direction = 'F';
        set_speed_band = 1;
        
        system_mode = MODE_RUN;

        start_flag = 1;

        send_adjust('B');

        remote_offset_adjust_flag = TRUE;
    }
}

void remote_offset_adjust_value_save(void)
{
    start_flag = 0;
    system_mode = MODE_RUN;

    send_adjust('S');

    remote_offset_adjust_flag = FALSE;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2012-3-29 11:00:36 | 显示全部楼层
程序运行是正常的,只是不明白为什么按下FRONT\STOP\BACK这几个会退出偏移调整模式。

出0入0汤圆

发表于 2012-3-29 12:40:53 | 显示全部楼层
case REMOTE_BACK_KEY:  
case REMOTE_FRONT_KEY:  
case REMOTE_STOP_KEY:
这三个语句不要试一下,要是要的话在后面都加上break语句试下.

出0入0汤圆

 楼主| 发表于 2012-3-29 14:39:15 | 显示全部楼层
zyyn123 发表于 2012-3-29 12:40
case REMOTE_BACK_KEY:  
case REMOTE_FRONT_KEY:  
case REMOTE_STOP_KEY:

加上BREAK就不起作用了,经过测试原来是跳到case REMOTE_SAVE_KEY:   remote_offset_adjust_value_save(); break这里去了

出0入0汤圆

发表于 2012-3-29 14:52:20 | 显示全部楼层
按道理来说,应该加上BREAK就不会跳到case REMOTE_SAVE_KEY:   remote_offset_adjust_value_save(); break这句,因为case语句再没有遇到BREAK语句时会依次执行下面的case语句的.所以当按下FRONT\STOP\BACK这几个会退出偏移调整模式的.不知道我理解对不对.

出0入0汤圆

 楼主| 发表于 2012-3-29 16:42:50 | 显示全部楼层
应该就是这样,但后面不是有DEFAULT语句吗,把这几行屏蔽掉就没事         case REMOTE_BACK_KEY:   
            case REMOTE_FRONT_KEY:  
            case REMOTE_STOP_KEY:   
难道这是KEIL的BUG?

出0入0汤圆

发表于 2012-3-29 17:52:19 | 显示全部楼层
如果按下FRONT\STOP\BACK键,程序是不会执行到default语句的.假如按下了BACK键,那程序执行应该如下图:

本帖子中包含更多资源

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

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 03:59

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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