久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

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

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

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


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

本文引用地址:http://cqxgywz.com/article/201611/322902.htm


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


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


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


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


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

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



評論


技術專區

關閉