新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于51單片機(jī)C編程 return語(yǔ)句的使用

關(guān)于51單片機(jī)C編程 return語(yǔ)句的使用

作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
案例:

函數(shù)寫法1:

本文引用地址:http://butianyuan.cn/article/201611/322146.htm

u8is_timeout(tickstart_time,tickinterval)

{

return(get_diff_tick(get_tick(),start_time)>interval);

}

函數(shù)寫法2:
u8is_timeout(tickstart_time,tickinterval)

{

u8status;

status=get_diff_tick(get_tick(),start_time)>interval);

returnstatus;

}

函數(shù)調(diào)用方式:

if(is_timeout(start_time,1000))

{

do_something();

}

問(wèn)題:在有中斷應(yīng)用的平臺(tái)上,使用函數(shù)寫法1可能會(huì)造成if語(yǔ)句判斷不正確。明明不到1000ms時(shí)間,卻進(jìn)入了do_something()。

分析:在51平臺(tái),默認(rèn)情況下函數(shù)的調(diào)用、中斷的切換,并不會(huì)將被打斷函數(shù)的參數(shù)、局部變量壓入棧,而是存儲(chǔ)在固定存儲(chǔ)區(qū)中。如果在執(zhí)行return之前恰好需要去執(zhí)行中斷,則51的參數(shù)和局部變量值是可以被保存在固定存儲(chǔ)區(qū)的,而中間數(shù)據(jù)(如return方式1中,需要返回的值)是不能被保存的,當(dāng)中斷返回后,無(wú)法正確獲得先前的中間數(shù)據(jù),而直接將不定數(shù)據(jù)返回,造成程序邏輯出錯(cuò)。而我們將return方式改為方式二,則可以保留參數(shù)、局部變量,返回正確的值,保證程序邏輯正確。



評(píng)論


技術(shù)專區(qū)

關(guān)閉