今天弄了一段小程序去测试继电器开关,写了下面的代码,但是将全局变量传进去后,就发现time不能赋值0,又来一位同来了后,就说time只是复制了全局变量,time=0,只是将自身修改了,而全局变量就没有更改。
你得用指针,真是一天天用ST的库,天天用指针,在这小地方折戟沉沙了,代码修改后见再下面。
void TEST_WORKING_MODE(uint16_t time)
{
switch(TEST_STATE)
{
case 0 ://电机启动计时
motor_run;
if(time >= TIME_MOTRO_START)
{
time = 0 ;
TEST_STATE = 1 ;//进入电机停止计时
}
break ;
case 1 ://电机停止计时
motor_stop;
if(time >= TIME_MOTRO_STOP)
{
time = 0 ;
TEST_MOTRO_COUNT++;
TEST_STATE = 0 ;//进入电机启动计时
}
break ;
default : break ;
}
}
void TEST_WORKING_MODE(uint16_t *time)
{
switch(TEST_STATE)
{
case 0 ://电机启动计时
motor_run;
if(*time >= TIME_MOTRO_START)
{
*time = 0 ;
TEST_STATE = 1 ;//进入电机停止计时
}
break ;
case 1 ://电机停止计时
motor_stop;
if(*time >= TIME_MOTRO_STOP)
{
*time = 0 ;
TEST_MOTRO_COUNT++;
TEST_STATE = 0 ;//进入电机启动计时
}
break ;
default : break ;
}
}
使用时候要向下面这样
uint16_t gloab_value ;//全局变量
TEST_WORKING_MODE(&gloab_value);//这回直接编辑全局变量了,而不是time复制全局变量,完美解决问题
|