C語言的for循環中執行一次需多少機器周期?
比如
for (i=0;i<100;i++);
此語句執行一百次,每次耗費多少個機器周期?
每個機器周期的長度是否取決於晶振頻率?
如何計算?
最佳回答:
====================================
問題補充:5樓的朋友,如果我改成
for (i=9;i<100;i++)
x=2;
其延時又是多少?
====================================
賦值語句的耗時一般是不計入時間消耗的(就像我們計算時間復雜度時,不考慮賦值的時間消耗一樣)
所以:
for (i=9;i<100;i++)
x=2;
的時間消耗就可以理解為for (i=9;i<100;i++);的時間消耗,
大約就是:
92*8*1us=0.736ms(12M晶振)
=======================================================
12M的晶振的機器周期是1/12M*12,就是1us
其次不同的單片機執行語句的機器周期也不一定一樣(比如:Atmel 51系列及大多數51的一個機器周期是12個時鐘周期,華邦的只需要4個時鐘周期)。不過大體來說,一條for循環大概8個機器周期,在12M晶振下,通常用以下代碼實現1ms的延時:
void delayms(unsigned int ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
大概算一下,120*8*1us=1ms,如果需要精確的定時,還是得用定時器。
如果是for (i=0;i<100;i++);的話,
那麼
大概算一下,100*8*1us=0.8ms