voiddelay
while (--i);
}
void
delay
}
以上兩段**,第一段為stcisp提供的1ms延時函式,第二段為改編版。按照個人對c語言的理解,這兩種寫法所得到的結果應該是一致的,最起碼在dev-c++上以下兩端**輸出結果相同,均為2739:
int main(int argc, char *ar**)}printf(
"num=%d\n
",num);
return0;
}int main(int argc, char *ar**)
} while (--i);
printf(
"num=%d\n
",num);
return0;
}
但開頭提到的兩段**,在stc15f104(11.0592m)微控制器上跑起來其延時結果卻截然不同。實測在預設延時500ms時(即重複執行上述函式500次),第一段**比較符合實際,第二段要比第一段要慢一倍左右,即將第二段**中的11改為6後可以得到大體相同的延時結果。
造成這種現象的原因,到現在也沒搞清楚,我發表在開源電子網的提問貼截止到目前也沒有收到合理的解釋。我不打算再耗下去
,只能強行解釋一波了:
造成延時結果不同的原因是微控制器在執行 while()...; 和 do...while(); 時的效率不同。
這解釋很有道理,因為在while()...; 和 do...while();在彙編**中的長度的確相差一倍左右。但仍不能很好解釋延時結果相差之大。因為無論是 while()...; 和 do...while(); ,在延時函式中僅僅執行了11次而已,真正起決定性作用的應該是中間那段
while (--j); ,在如此大基數的迴圈下, while()...; 和 do...while(); 相差的那點時間應該顯得微不足道才對啊。
算了,這件事告一段落了,不打算再在這上面浪費時間了。下面附上 while()...; 和 do...while(); 的彙編**。****於網路,其實我也不懂。
/**** while 語句 pseudo-code *******
*/while
( condition ) /*
***while 語句 assembly language ******
*/while
: ; code to
setflags based on condition
jxx endwhile
; body of loop
jmp
while
endwhile:
/****while 語句 assembly language (end) **
*//*
*** do while 語句 pseudo-code *******
*/do
while
( condition )
/****do while 語句 assembly language ******
*/do_while:
; body of loop
; code to
setflags based on condition
jxx do_while
/****do while 語句 assembly language (end) **
*/
分享下常用函式 工作時遇到的
工作幾個月了,現在暫時做測試,理由就是開發在思維上有一定侷限性,暫時做一段時間的測試吧,但是php一直還在看,總結下自己曾經用到過的函式有興趣的可以自己去查查 數字 ctype digit is numeric intval 看看ctype digit與is numeric過濾數字時候的 區別,in...
分享下常用函式 工作時遇到的
工作幾個月了,現在暫時做測試,理由就是開發在思維上有一定侷限性,暫時做一段時間的測試吧,但是php一直還在看,總結下自己曾經用到過的函式有興趣的可以自己去查查 數字 ctype digit is numeric intval 看看ctype digit與is numeric過濾數字時候的 區別,in...
C語言 使用函式時遇到的問題
函式是一段 塊,由 返回型別 函式名 函式引數 構成。定義函式有兩種方式。一種是宣告與函式體放在一起,另一種是在main函式之前進行宣告,把函式塊放在 最後。我們通常使用後者 如下所示 include intfunction int a,int b int main intfunction int ...