C语言delay函数延时计算
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言delay函数延时计算相关的知识,希望对你有一定的参考价值。
参考技术AC语言delay函数延时计算源代码如下:
#include "stdlib.h"
void delay()
time_t start,end;
start=time(null);
unchar i;
while(z--)
for(i=0;i<121;i++);
end=time(null);
printf("%f",difftime(end,start));
扩展资料
1、对于要求精确延时时间更长,这时就要采用循环嵌套的方法来实现,因此,循环嵌套的方法常用于达到ms级的延时。
对于循环语句同样可以采用for,do?while,while结构来完成,每个循环体内的变量仍然采用无符号字符变量。
常用延时(睡眠)函数
琐碎代码1——延时函数
ARM:
delay: ldr r3, =100000 ldr r4, =0x0 delay_loop: sub r3, r3, #1 //r3 = r3 -1 cmp r3, r4 // cmp会影响Z标志位,如果r4等于r3则Z=1,下一句中eq就会成立 bne delay_loop mov pc, lr // 函数调用返回
C/C++:
void delay(unsigned int t) { unsigned int step = 0; int tick = 10000; for(step = 0; step < t ; step ++) { while(tick) tick--; } }
Qt:
void CANThread::sleep(unsigned int msec) { QTime dieTime = QTime::currentTime().addMSecs(static_cast<int>(msec)); while( QTime::currentTime() < dieTime ) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); }
stm32中断型:
volatile uint32_t time_delay; // 延时时间,注意定义为全局变量 //延时n_ms void delay_ms(volatile uint32_t nms) { //SYSTICK分频--1ms的系统时钟中断 if (SysTick_Config(SystemFrequency/1000)) { while (1); } time_delay=nms;//读取定时时间 while(time_delay); SysTick->CTRL=0x00; //关闭计数器 SysTick->VAL =0X00; //清空计数器 } //延时nus void delay_us(volatile unsigned long nus) { //SYSTICK分频--1us的系统时钟中断 if (SysTick_Config(SystemFrequency/1000000)) { while (1); } time_delay=nus;//读取定时时间 while(time_delay); SysTick->CTRL=0x00; //关闭计数器 SysTick->VAL =0X00; //清空计数器 } //在中断中将time_delay递减。实现延时 void SysTick_Handler(void) { if(time_delay) time_delay--; }
使用时注意传参的范围(uint32_t)。
stm32非中断(使用cortex System timer)
void delay_us(uint32_t nus) { uint32_t temp; SysTick->LOAD = 9*nus; //此处具体参数根据系统实际时钟频率 SysTick->VAL=0X00;//清空计数器 SysTick->CTRL=0X01;//使能 do { temp=SysTick->CTRL;//读取当前倒计数值 }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达 SysTick->CTRL=0x00; //关闭计数器 SysTick->VAL =0X00; //清空计数器 } void delay_ms(uint16_t nms) { uint32_t temp; SysTick->LOAD = 9000*nms; //此处结合自己系统的时钟 SysTick->VAL=0X00;//清空计数器 SysTick->CTRL=0X01;//使能, do { temp=SysTick->CTRL;//读取当前倒计数值 }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达 SysTick->CTRL=0x00; //关闭计数器 SysTick->VAL =0X00; //清空计数器 }
注意:延时有最大事件限制,具体使用根据实际系统
以上是关于C语言delay函数延时计算的主要内容,如果未能解决你的问题,请参考以下文章