这两个延时程序的区别是不是一个us一个ms
void_delay_us(uintx){uinti,j;for(j=0;j<x;j++)for(i=0;i<12;i++);}............delay_us(...
void _delay_us(uint x)
{
uint i,j;
for (j=0;j<x;j++)
for (i=0;i<12;i++);
}
............delay_us(100)
void _delay_ms(uint x)
{
uint i,j;
for (j=0;j<x;j++)
for (i=0;i<120;i++);
}
...............delay_ms(100) 展开
{
uint i,j;
for (j=0;j<x;j++)
for (i=0;i<12;i++);
}
............delay_us(100)
void _delay_ms(uint x)
{
uint i,j;
for (j=0;j<x;j++)
for (i=0;i<120;i++);
}
...............delay_ms(100) 展开
1个回答
展开全部
x=100
delay_us(100)-- i循环100次 j循环12 次
delay_ms(100)-- i循环100次 j循环120 次, 多 100 * 10 次
x=100 时,两个程序耗时 为 1比100,像似 微秒 和 毫秒。
如果 x=1 两个程序耗时比 为10.
猜测 delay_us(100)是1微秒,delay_ms(100)是1毫秒。
实际上,计算机速度不同。这个程序的时间精度难说。
精确计时可用 QueryPerformanceCounter()函数返回当时时钟读数,计时开始用它得到开始读数,计时结束用它得到结束读数,两个数相减是时间差读数。读数转换为时间,要用QueryPerformanceFrequency()函数获得时钟频率,读数除以时钟频率,得时间,单位是秒。乘1000得毫秒。
还有一种方法是用Pentium芯片汇编指令 0x0F 和 0x31,读取时钟计数图章,类似QueryPerformanceCounter()函数,计时开始和结束分别调用一次,得读数差,并扣除执行一次调用函数消耗的额外时间。如果知道CPU速度可以算得时间,如果知道时间,可以估算CPU速度。
delay_us(100)-- i循环100次 j循环12 次
delay_ms(100)-- i循环100次 j循环120 次, 多 100 * 10 次
x=100 时,两个程序耗时 为 1比100,像似 微秒 和 毫秒。
如果 x=1 两个程序耗时比 为10.
猜测 delay_us(100)是1微秒,delay_ms(100)是1毫秒。
实际上,计算机速度不同。这个程序的时间精度难说。
精确计时可用 QueryPerformanceCounter()函数返回当时时钟读数,计时开始用它得到开始读数,计时结束用它得到结束读数,两个数相减是时间差读数。读数转换为时间,要用QueryPerformanceFrequency()函数获得时钟频率,读数除以时钟频率,得时间,单位是秒。乘1000得毫秒。
还有一种方法是用Pentium芯片汇编指令 0x0F 和 0x31,读取时钟计数图章,类似QueryPerformanceCounter()函数,计时开始和结束分别调用一次,得读数差,并扣除执行一次调用函数消耗的额外时间。如果知道CPU速度可以算得时间,如果知道时间,可以估算CPU速度。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询