//实现间隔time_interval时间点亮红灯(此时间间隔并不是绝对的,是大于等于的关系)
//用于系统要求无延时且延时时间粗略的场合,比如间隔一段时间采样数据,间隔一段时间点亮状态灯等
//HAL_GetTick()是系统ms级别滴答时间
//轮询一遍此函数的时间显然要小于设置的时间间隔time_interval,否则每次都会触发也就起不到间隔的目的
uint32_t time_interval = 500;
void Light_SetStatus(void) {
if(time_interval != 0) { uint32_t tick; static uint32_t interval_cnt = 0; tick = HAL_GetTick() / time_interval; if(tick > interval_cnt) {
//这里加入间隔时间到的功能 Light_Red(LIGHT_ON); } interval_cnt = tick; } }
另一种方式:
void Light_SetStatus(void) { if(time_interval != 0) { static uint32_t delay_start = 0; if(delay_start == 0) { delay_start = HAL_GetTick(); } if(HAL_GetTick() - delay_start > interval_cnt) { delay_start =0; ret = Light_Red(LIGHT_ON); } } }
第一种方式中interval_cnt会以自增的方式不断变大,所以可以利用这点做一些其它事情!