標(biāo)題: 菜鳥(niǎo)請(qǐng)教C51問(wèn)題 上面的這個(gè)寫(xiě)法和下面的這種寫(xiě)法有什么區(qū)別? [打印本頁(yè)]

作者: bfdz    時(shí)間: 2024-7-1 09:17
標(biāo)題: 菜鳥(niǎo)請(qǐng)教C51問(wèn)題 上面的這個(gè)寫(xiě)法和下面的這種寫(xiě)法有什么區(qū)別?
void delay(uint n){     
   while(n--)
     {         
          Delay1ms();
     }
}
請(qǐng)教老師上面的這個(gè)寫(xiě)法和下面的這種寫(xiě)法有什么區(qū)別?
void delay()
{   
       uint n;
      while(n--)
     {         
          Delay1ms();
     }
}




作者: j1ason    時(shí)間: 2024-7-1 15:34
第二種方式主要是n賦值問(wèn)題,如果實(shí)際運(yùn)用中,第一種方式是可行的。
作者: zyftank    時(shí)間: 2024-7-1 17:43
上面帶參,n是在調(diào)用的時(shí)候被賦值了,下面這個(gè)函數(shù)最好別用,在函數(shù)里定義個(gè)變量,還不初始化,被調(diào)用的時(shí)候,n還不知道被賦值多少。
作者: bfdz    時(shí)間: 2024-7-2 08:29
感謝老師!!

有些明白了,是不是上面的那個(gè) n 可以在全局使用  ,下面的那個(gè) n 只是在自己的子函數(shù)使用,而且 n 的值還容易不明確,

最好還是用上面的那個(gè)。
謝謝了
作者: 123156fsadf    時(shí)間: 2024-7-2 17:24
bfdz 發(fā)表于 2024-7-2 08:29
感謝老師。!

有些明白了,是不是上面的那個(gè) n 可以在全局使用  ,下面的那個(gè) n 只是在自己的子函數(shù)使 ...

兩個(gè)函數(shù)的n都是局部變量,都只能在delay函數(shù)中使用,另外就是最好不要用這種軟延時(shí),嚴(yán)重破壞程序?qū)崟r(shí)性;建議用定時(shí)器方式做延時(shí)
作者: xiaobendan001    時(shí)間: 2024-7-3 08:06
上面那個(gè)是參數(shù),是被調(diào)用者賦值的,就是調(diào)用者可以控制這個(gè)數(shù)的大小。下面那個(gè)只是局部變量,調(diào)用者無(wú)法掌控,即使在函數(shù)里面被準(zhǔn)確賦值,也只能實(shí)現(xiàn)固定的值。何況你都不賦值,大概率是不確定的。
作者: cy009    時(shí)間: 2024-7-3 09:09
上面的靈活,下面的呆板
作者: bfdz    時(shí)間: 2024-7-3 11:03
xiaobendan001 發(fā)表于 2024-7-3 08:06
上面那個(gè)是參數(shù),是被調(diào)用者賦值的,就是調(diào)用者可以控制這個(gè)數(shù)的大小。下面那個(gè)只是局部變量,調(diào)用者無(wú)法掌 ...

多謝!多謝!感覺(jué)這下徹底想通了
作者: xxxevery    時(shí)間: 2024-7-4 11:02
下面的這種寫(xiě)法沒(méi)法達(dá)到目的啊,n只被聲明了一下,當(dāng)然在keil中會(huì)默認(rèn)初始化為零,后面也不再賦值,結(jié)果就是進(jìn)while馬上退出來(lái),當(dāng)然也不會(huì)出錯(cuò),總可以延時(shí)幾個(gè)微秒吧
作者: @西風(fēng)    時(shí)間: 2024-7-5 16:37
帶參數(shù)的函數(shù),和不帶參數(shù)的函數(shù)區(qū)別啊
作者: rayin    時(shí)間: 2024-7-6 08:06
建議用第一種方法, 可以設(shè)定延時(shí)時(shí)間.
第二種方式有問(wèn)題:n是局部變量, 局部變量不賦值,n的值就不確定,會(huì)導(dǎo)致執(zhí)行結(jié)果不確定.
作者: bfdz    時(shí)間: 2024-7-6 08:11
多謝各位老師!

我再重新學(xué)習(xí)一下帶參數(shù)和不帶參數(shù)函數(shù)的課程
作者: 飛云居士    時(shí)間: 2024-7-15 10:01
下面的延時(shí)是固定的(從32768減到0的時(shí)間)。上面的延時(shí)可以有調(diào)用者設(shè)定延時(shí)時(shí)間。
作者: 青草麥田    時(shí)間: 2024-7-17 00:22
一個(gè)傳參,一個(gè)是局部變量

作者: 鄉(xiāng)海峰    時(shí)間: 2024-7-17 14:14
以上大神講的太好了
作者: ankangyu    時(shí)間: 2024-7-18 14:04
第二種內(nèi)部應(yīng)該給n賦初始值,是一個(gè)固定值,第一種是調(diào)用時(shí)賦值,是一個(gè)靈活賦值。
作者: 1853403148    時(shí)間: 2024-7-18 17:58
這兩個(gè)程序函數(shù)在功能和預(yù)期行為上有很大的區(qū)別。

第一個(gè)函數(shù) void delay(uint n)
這個(gè)函數(shù)是帶參數(shù)的。它接受一個(gè)無(wú)符號(hào)整數(shù) n 作為輸入,并循環(huán) n 次,每次循環(huán)中調(diào)用 Delay1ms() 函數(shù)來(lái)產(chǎn)生大約1毫秒的延遲。因此,這個(gè)函數(shù)的總延遲時(shí)間大致是 n 毫秒(假設(shè) Delay1ms() 函數(shù)確實(shí)產(chǎn)生了精確的1毫秒延遲)。

第二個(gè)函數(shù) void delay()
這個(gè)函數(shù)沒(méi)有參數(shù)。它試圖使用一個(gè)未初始化的局部變量 n,并在 while 循環(huán)中遞減 n。但是,由于 n 沒(méi)有被初始化,它的值是不確定的,可能是任何數(shù)字
作者: a399288395    時(shí)間: 2024-7-19 08:32
一個(gè)帶形參一個(gè)不帶,第一種寫(xiě)法更實(shí)用,方便函數(shù)的調(diào)用
作者: Jun默默淡定    時(shí)間: 2024-7-19 10:40
上面的delay()函數(shù)是帶形參的,調(diào)用的時(shí)候可以設(shè)置形參的值來(lái)修改延時(shí)的長(zhǎng)短,調(diào)用該函數(shù)的時(shí)候更加的靈活自由;下面的的相對(duì)來(lái)說(shuō)就死板一些,但是在一些場(chǎng)合,比如說(shuō)編寫(xiě)模擬IIC之類的時(shí)候,這樣要固定延時(shí)長(zhǎng)短的會(huì)比較合適




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1