【发布时间】:2019-02-28 19:41:29
【问题描述】:
这是一个非常奇怪的问题,因为它应该可以工作,但它没有。 我的任务是做一个延迟程序的简单功能。
使用函数后: time after using 我想要有 1 秒的延迟,所以我增加了 100000(100 之前)的迭代次数,但时间没有改变。 after increasing iteration
为什么?合乎逻辑的是,如果我增加迭代次数,时间应该更长......
编辑:
#include <LPC21xx.H>
void Delay(){
long int i;
for(i=0; i<48000000000;i++){
}
}
int main(){
//set pin 16 P1 as out
IO1DIR = 0x10000;
//set pin 16 P1 on 1
IO1SET = 0x10000;
Delay();
//set pin 16 port P1 on 0
IO1CLR = 0x10000;
}
我使用的是 uVision Keil。
【问题讨论】:
-
请在您的问题中包含程序的源代码,格式为代码(突出显示并使用“{}”按钮)。文字图片的用处要小得多。
-
@KeithThompson 好的。
-
我很确定你的 C 编译器会认为这个循环什么都不做,只是向前跳过。为了确保执行循环,请输入类似 int a=0; 的内容。循环内。这样编译器就不会忽略循环。
-
这里有 2 种方法可以做到这一点: 1. 使用 nop () 函数将一些 NO-OP 指令插入到 C 代码中。计算出目标上单个 NOP 所需的时间,并尽可能多地使用。 2. 创建一个启动定时器的函数,该定时器在溢出时产生中断。中断设置一个标志,函数在启动定时器后等待。当标志被设置时,函数停止计时器并返回。来源:keil.com/support/docs/606.htm 代码:stackoverflow.com/questions/21553964/…