本帖最后由 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结构里FRONTSTOPBACK没定义去向,如按下这几个键应该是不起任何作用的,但现在的情况是按
下任意键都是退出。看程序只有在按下ADJUST键和SAVE键才会将remote_offset_adjust_flag赋值为FALSE而退出ELSE下的SWITCH结构,而且
整个程序里只有remote_adjust_key_operation()和remote_offset_adjust_value_save()这2个函数会将改变remote_offset_adjust_flag的值。
现在却是按下FRONTSTOPBACK也改变了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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
加上BREAK就不起作用了,经过测试原来是跳到case REMOTE_SAVE_KEY: remote_offset_adjust_value_save(); break这里去了
case REMOTE_FRONT_KEY:
case REMOTE_STOP_KEY:
难道这是KEIL的BUG?
一周热门 更多>