#include "delayticks.h" /*延时函数,不会将任务挂起*/ void delay_ticks(uint32_t delay) { /*开始计数器值*/ uint32_t tickstart = xTaskGetTickCount(); /*指定延时时间*/ uint32_t wait = delay; /*计算当前计数器值和开始计数器值的差*/ uint32_t ticks_diff = xTaskGetTickCount() - tickstart; if ( ticks_diff < wait ) { /*计算剩余等待的时间*/ uint32_t remaining_ticks = wait - ticks_diff; /*循环等待,直到剩余时间结束*/ while ( ( xTaskGetTickCount() - tickstart) < wait ) { /*如果发生溢出,则重新计算时间差*/ if ( xTaskGetTickCount() < tickstart ) { /*重新计算时间差*/ ticks_diff = UINT32_MAX - tickstart + xTaskGetTickCount(); if ( ticks_diff < wait ) { remaining_ticks = wait - ticks_diff; } else { /*如果时间差已经大于等于等待时间,则退出*/ break; } } } } }