欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
整理STC單片機延時函數時遇到的玄學問題
[打印本頁]
作者:
lhhtyid1
時間:
2019-4-28 20:27
標題:
整理STC單片機延時函數時遇到的玄學問題
void Delay
{
unsigned char i, j;
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
void Delay
{
unsigned char i, j;
i = 11;
j = 190;
while(i--)
{
while (--j);
}
}
復制代碼
以上兩段代碼,第一段為STCISP提供的1ms延時函數,第二段為改編版。按照個人對C語言的理解,這兩種寫法所得到的結果應該是一致的,最起碼在Dev-C++上以下兩端代碼輸出結果相同,均為2739:
int main(int argc, char *argv[])
{
unsigned char i, j;
int num = 0;
i = 11;
j = 190;
while(i--)
{
while (--j)
{
num++;
}
}
printf("num=%d\n",num);
return 0;
}
int main(int argc, char *argv[])
{
unsigned char i, j;
int num = 0;
i = 11;
j = 190;
do
{
while (--j)
{
num++;
}
} while (--i);
printf("num=%d\n",num);
return 0;
}
復制代碼
但開頭提到的兩段代碼,在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 )
{
body of loop;
}
/****while 語句 assembly language *******/
while:
; code to set FLAGS based on condition
jxx endwhile
; body of loop
jmp while
endwhile:
/****while 語句 assembly language (end) ***/
/**** Do while 語句 pseudo-code ********/
do
{
body of loop;
}while ( condition )
/****Do while 語句 assembly language *******/
do_while:
; body of loop
; code to set FLAGS based on condition
jxx do_while
/****Do while 語句 assembly language (end) ***/
復制代碼
作者:
hantu
時間:
2019-4-29 08:30
樓主提到Dev-C++,你這是在PC上編譯且運行的吧。
你得在51上把那兩個delay調試轉成匯編,認認真真計算它們的具體所用指令周期,相信你會有所發現的。
作者:
tigerlyt
時間:
2019-4-29 09:56
摘錄了一本書中的內容,應該可以很好解釋你的問題,至少,是你的代碼產生差別的主要原因,你找的原因可能有影響,但應該不是主因。
QQ截圖20190429094931_副本.jpg
(133.84 KB, 下載次數: 32)
下載附件
2019-4-29 09:55 上傳
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1