国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

不可重入函數(shù)匯總 單片機(jī)C語言設(shè)計里說的可重入函數(shù)是什么?和不可重入函數(shù)的區(qū)別是什么?

單片機(jī)C語言設(shè)計里說的可重入函數(shù)是什么?和不可重入函數(shù)的區(qū)別是什么?1、可重入函數(shù)1)什么是可重入函數(shù)?可重入函數(shù)可由多個任務(wù)同時使用,無需擔(dān)心數(shù)據(jù)錯誤。相反,非可重入函數(shù)不能由多個任務(wù)共享,除非它們

單片機(jī)C語言設(shè)計里說的可重入函數(shù)是什么?和不可重入函數(shù)的區(qū)別是什么?

1、可重入函數(shù)

1)什么是可重入函數(shù)?

可重入函數(shù)可由多個任務(wù)同時使用,無需擔(dān)心數(shù)據(jù)錯誤。相反,非可重入函數(shù)不能由多個任務(wù)共享,除非它們相互排斥(或者使用信號量,或者在代碼的關(guān)鍵部分禁用中斷)。可重入函數(shù)可以隨時中斷,以后繼續(xù)運(yùn)行而不會丟失數(shù)據(jù)??芍厝牒瘮?shù)要么使用局部變量,要么在使用全局變量時保護(hù)其數(shù)據(jù)。

2)可重入函數(shù):

不保留連續(xù)調(diào)用的靜態(tài)數(shù)據(jù)。

不返回指向靜態(tài)數(shù)據(jù)的指針;所有數(shù)據(jù)由函數(shù)的調(diào)用者提供。

通過使用本地數(shù)據(jù)或制作全局?jǐn)?shù)據(jù)的本地副本來保護(hù)全局?jǐn)?shù)據(jù)。

如果必須訪問全局變量,請記住使用互斥信號量保護(hù)它們。

切勿調(diào)用任何不可重入函數(shù)。

3)不可重入函數(shù):

函數(shù)中使用靜態(tài)變量,無論是全局變量還是局部變量。

函數(shù)返回一個靜態(tài)變量。在函數(shù)中調(diào)用不可重入的函數(shù)。

在函數(shù)體中使用靜態(tài)數(shù)據(jù)結(jié)構(gòu);

在函數(shù)體中調(diào)用malloc()或free()函數(shù);

在函數(shù)體中調(diào)用其他標(biāo)準(zhǔn)I/O函數(shù)。

函數(shù)是單例中的成員函數(shù),它使用的成員變量不是由線程獨(dú)立存儲的。

一般來說,如果一個函數(shù)在可重入的條件下使用不受保護(hù)的共享資源,那么它是不可重入的

當(dāng)使用Keil C51編譯器在51核MCU上編寫C程序時,這個問題可能更嚴(yán)重。因為keil通過覆蓋技術(shù)優(yōu)化變量,相同的內(nèi)存地址可能會被重復(fù)分配給不同的函數(shù)。例如,在主函數(shù)中調(diào)用的延遲函數(shù)的變量可以被中斷函數(shù)調(diào)用的相同延遲函數(shù)的變量所覆蓋。因此,在keilc51中編寫可能同時被多個函數(shù)調(diào)用的子函數(shù)時,最好將其聲明為可重入函數(shù)。

單片機(jī)用的軟件的可重入函數(shù)與非可重入函數(shù)有啥區(qū)別?

可重入函數(shù):主要用于多任務(wù)環(huán)境。可重入函數(shù)只是一個可以中斷的函數(shù)。換言之,當(dāng)函數(shù)被執(zhí)行時,它可以在任何時候被中斷,然后轉(zhuǎn)移到操作系統(tǒng)調(diào)度以執(zhí)行另一段代碼。返回控件時不會出錯。