对实时性要求不高(降低延时,增大timeout_stopwatch可改善实时性),任务执行完等待一段时间才能知道执行结果,如果失败,需要重新执行,但是只能执行有限次数,超过次数执行接下来程序
u8 timeout_stopwatch; u8 timeout_num = 0; again:; //执行任务 timeout_stopwatch=0; while(XXXX)//判断任务是否执行成功 { if(timeout_stopwatch > 100)//一段时间后还能进入while,表示出错,需要重新执行任务 { timeout_num++; if(timeout_num > 10) //执行10次没成功,不再执行 { break; } goto again; } delay_ms(100);//实时性受此函数限制
timeout_stopwatch++;
}//等待接收完成
对实时性要求不高(降低延时,增大timeout_stopwatch可改善实时性),任务执行完等待一段时间才能知道执行结果,如果失败,需要重新执行,直到执行成功(可能导致程序卡死)
u8 timeout_stopwatch; again:; //执行任务 timeout_stopwatch=0; while(XXXX)//判断任务是否执行成功 { if(timeout_stopwatch > 100)//一段时间后还能进入while,表示出错,需要重新执行任务 { goto again; } delay_ms(100);//实时性受此函数限制 timeout_stopwatch++; }//等待接收完成
对实时性要求高,任务执行完等待一段时间才能知道执行结果,如果失败,需要重新执行,直到执行成功或者有次数限制
把实时性要求不高的程序中,延时函数去掉,timeout_stopwatch++放定时器中断里面
任务执行完立马知道执行结果,如果失败,等待一段时间再次执行,但有次数限制
u8 timeout_stopwatch; timeout_stopwatch = 0; while(timeout_stopwatch < 20 && 任务函数 == 0xFF)//假设0xFF表示失败 { delay_ms(200); timeout_stopwatch++; }