新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 什么是可重入函數和不可重入函數

        什么是可重入函數和不可重入函數

        作者: 時間:2016-11-28 來源:網絡 收藏
        可重入函數


        在 實時系統的設計中,經常會出現多個任務調用同一個函數的情況。如果這個函數不幸被設計成為不可重入的函數的話,那么不同任務調用這個函數時可能修改其他任 務調用這個函數的數據,從而導致不可預料的后果。那么什么是可重入函數呢?所謂可重入是指一個可以被多個任務調用的過程,任務在調用時不必擔心數據是否會 出錯。不可重入函數在實時系統設計中被視為不安全函數。

        本文引用地址:http://www.104case.com/article/201611/322902.htm


        滿足下列條件的函數多數是不可重入的:


        (1)函數體內使用了靜態的數據結構;


        (2)函數體內調用了malloc()或者free()函數;


        (3)函數體內調用了標準I/O函數。


        如何寫出可重入的函數?在函數體內不訪問那些全局變量,不使用靜態局部變量,堅持只使用缺省態(auto)局部變量,寫出的函數就將是可重入的。如果必須訪問全局變量,記住利用互斥信號量來保護全局變量。或者調用該函數前關中斷,調用后再開中斷。

        可重入函數可以被一個以上的任務調用,而不必擔心數據被破壞。可重入函數任何時候都可以被中斷,一段時間以后又可以運行,而相應的數據不會丟失。可重入函數或者只使用局部變量,即保存在CPU寄存器中或堆棧中;或者使用全局變量,則要對全局變量予以保護。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 安宁市| 平顺县| 栾川县| 安康市| 双峰县| 建昌县| 资中县| 都匀市| 阜平县| 根河市| 当涂县| 凉城县| 宜城市| 上高县| 大同市| 东丽区| 马尔康县| 昆明市| 洛阳市| 香港 | 尼玛县| 乡宁县| 仪陇县| 松江区| 久治县| 麻城市| 方正县| 资源县| 沽源县| 大关县| 乳源| 崇阳县| 台南县| 登封市| 灵台县| 泰顺县| 成武县| 蓬溪县| 四川省| 玛沁县| 仙居县|