新聞中心

        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://www.104case.com/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)閉
        主站蜘蛛池模板: 蒙城县| 辽阳县| 石林| 马公市| 桑日县| 河源市| 平度市| 信丰县| 禹州市| 万宁市| 神农架林区| 濮阳县| 个旧市| 巴塘县| 洪雅县| 永平县| 阿瓦提县| 乌鲁木齐县| 湖口县| 嵊泗县| 太仆寺旗| 澄城县| 临沭县| 沁源县| 广水市| 溧阳市| 定安县| 海林市| 江永县| 寻甸| 双鸭山市| 德江县| 同仁县| 永清县| 赤壁市| 皮山县| 容城县| 东乌| 屏东县| 甘德县| 若羌县|