不用系统延时方式(系统死等不好),实现延时发送串口数据,怎么实现呢?

不用系统延时方式,实现延时发送串口数据,怎么实现呢?

比如现在代码如下,怎么去掉sys_delay_ms系统延时(系统死等不好),但又能实现延时100ms。
uart_send(uint8 cmd1,uint8 cmd2)
{
switch (cmd1)
{
case 1:
sys_delay_ms(100);
send(cmd1,cmd2);
break;

 case 2:
 sys_delay_ms(100);
 send(cmd1,cmd2);
 break;

}
}

可以在定时器里面添加一个计数器,定时时间到了之后计数器加1,然后发送数据时获取计数器的值,并和上次发送数据时计数器的值比较,如果两次计时器值的差乘以定时时间等于100ms时,就发送数据,否则就不发送。
比如定时器定时时间为1ms,每1ms计时器自加一次,那么就在两次计数器值差为100的时候,发送一次数据。或者当计时器值记到100时,发送一次数据,并将计数器值清零。继续等待下一次发送。

看看操作系统有没有提供定时器/阎炽/线程休眠的函数。
windows上有sleep
一些嵌入式有 delay

使用定时器触发 或者使用条件循环达到延时效果

写个消息队列就可以了

设置一个标志位, 然后开启定时器,设定所需时间,定时器到达的时候,检测标志位,执行动作并清除标志位