微控制器C語言設計裡說的可重入函式是什麼?和不可重入函式的區別是什麼

時間 2022-04-04 21:45:15

1樓:匿名使用者

一、可重入函式

1)什麼是可重入性?

可重入(reentrant)函式可以由多於乙個任務併發使用,而不必擔心資料錯誤。相反, 不可重入(non-reentrant)函式不能由超過乙個任務所共享,除非能確保函式的互斥(或者使用訊號量,或者在**的關鍵部分禁用中斷)。可重入 函式可以在任意時刻被中斷,稍後再繼續執行,不會丟失資料。

可重入函式要麼使用本地變數,要麼在使用全域性變數時保護自己的資料。

2)可重入函式:

不為連續的呼叫持有靜態資料。

不返回指向靜態資料的指標;所有資料都由函式的呼叫者提供。

使用本地資料,或者通過製作全域性資料的本地拷貝來保護全域性資料。

如果必須訪問全域性變數,記住利用互斥訊號量來保護全域性變數。

絕不呼叫任何不可重入函式。

3)不可重入函式:

函式中使用了靜態變數,無論是全域性靜態變數還是區域性靜態變數。

函式返回靜態變數。

函式中呼叫了不可重入函式。

函式體內使用了靜態的資料結構;

函式體內呼叫了malloc()或者free()函式;

函式體內呼叫了其他標準i/o函式。

函式是singleton中的成員函式而且使用了不使用執行緒獨立儲存的成員變數 。

總的來說,如果乙個函式在重入條件下使用了未受保護的共享的資源,那麼它是不可重入的。

2樓:匿名使用者

可以進行遞迴呼叫,即可以間接或直接呼叫該函式本身的函式稱為可重入函式,例:(僅給出函式部分)

void fac (int n) reentrant

可以明顯地看到,fac這個函式在執行時又會呼叫自身,從而無休止地迴圈呼叫自身,直到n小於1,這就是可重入函式。如果在函式宣告中沒有"reentrant",即"fac"不是可重入函式,雖可以執行,但是每呼叫一次fac,n的值就會消失,從而達不到原先的效果,這就是可重入函式與不可重入函式的區別。

什麼是51微控制器不可重入的函式?

3樓:匿名使用者

讓我來告訴你答案!一、可重入函式

1)什麼是可重入性?

可重入(reentrant)函式可以由多於乙個任務併發使用,而不必擔心資料錯誤。相反,不可重入(non-reentrant)函式不能由超過乙個任務所共享,除非能確保函式的互斥(或者使用訊號量,或者在**的關鍵部分禁用中斷)。可重入函式可以在任意時刻被中斷,稍後再繼續執行,不會丟失資料。

可重入函式要麼使用本地變數,要麼在使用全域性變數時保護自己的資料。

2)可重入函式:

不為連續的呼叫持有靜態資料。

不返回指向靜態資料的指標;所有資料都由函式的呼叫者提供。

使用本地資料,或者通過製作全域性資料的本地拷貝來保護全域性資料。

如果必須訪問全域性變數,記住利用互斥訊號量來保護全域性變數。

絕不呼叫任何不可重入函式。

3)不可重入函式:

函式中使用了靜態變數,無論是全域性靜態變數還是區域性靜態變數。

函式返回靜態變數。

函式中呼叫了不可重入函式。

函式體內使用了靜態的資料結構;

函式體內呼叫了malloc()或者free()函式;

函式體內呼叫了其他標準i/o函式。

函式是singleton中的成員函式而且使用了不使用執行緒獨立儲存的成員變數。

總的來說,如果乙個函式在重入條件下使用了未受保護的共享的資源,那麼它是不可重入的。

什麼是 51微控制器不可重入的函式 ?

4樓:匿名使用者

一、可重入函式

1)什麼是可重入性?

可重入(reentrant)函式可以由多於乙個任務併發使用,而不必擔心資料錯誤。相反, 不可重入(non-reentrant)函式不能由超過乙個任務所共享,除非能確保函式的互斥(或者使用訊號量,或者在**的關鍵部分禁用中斷)。可重入 函式可以在任意時刻被中斷,稍後再繼續執行,不會丟失資料。

可重入函式要麼使用本地變數,要麼在使用全域性變數時保護自己的資料。

2)可重入函式:

不為連續的呼叫持有靜態資料。

不返回指向靜態資料的指標;所有資料都由函式的呼叫者提供。

使用本地資料,或者通過製作全域性資料的本地拷貝來保護全域性資料。

如果必須訪問全域性變數,記住利用互斥訊號量來保護全域性變數。

絕不呼叫任何不可重入函式。

3)不可重入函式:

函式中使用了靜態變數,無論是全域性靜態變數還是區域性靜態變數。

函式返回靜態變數。

函式中呼叫了不可重入函式。

函式體內使用了靜態的資料結構;

函式體內呼叫了malloc()或者free()函式;

函式體內呼叫了其他標準i/o函式。

函式是singleton中的成員函式而且使用了不使用執行緒獨立儲存的成員變數 。

總的來說,如果乙個函式在重入條件下使用了未受保護的共享的資源,那麼它是不可重入的。

5樓:匿名使用者

不能自己呼叫自己的函式。

有哪位朋友能講講c語言是何時應用在微控制器程式開發中的,應用的歷程發展是什麼樣的? 5

6樓:匿名使用者

我家裡有一本。你找《電子製作》雜誌社郵購一本吧!說實話,這本書寫的不怎麼樣,邏輯性不強,用了許多術語,又沒有解釋。

我為了搞清那裡乙個「可重入函式」的意思,非了老大的勁!有問題給hychyc_2008傳送訊息。

7樓:

看書c與511開發。。。。。裡面講的很清楚

keil-c51中關於微控制器多個函式巢狀和可重入的問題

8樓:

我不太清楚你這個函式(以及它的子函式們)具有什麼功能、有什麼如此刻不容緩的緊迫性,以至於要所有的中斷都來呼叫它……從系統架構設計來說,如果你對系統實時性有高要求、開了多重中斷巢狀,那麼就應當仔細考慮把每個中斷裡要做的事情最簡化,不要把洗奶瓶換尿布這種工作交給駕駛賽車的賽車手來做!

回到你問的這個問題:

① 是的,被這個巢狀母函式呼叫的子函式也必須宣告為巢狀函式。因為有可能執行至該子函式時產生中斷呼叫母函式、繼而呼叫該子函式的實體產生工作空間重疊。

② 如果你將這個母函式做出多個副本,那麼子函式要麼宣告成重入、要麼對應於每個母函式建立乙個子函式副本、專門給對應的母函式呼叫。

用51微控制器C語言版設計秒錶倒計時

要分析乙個微控制器 c 語言程式設計的秒錶程式,需要考慮以下幾個方面 硬體平台 需要了解秒錶程式所執行的微控制器型別,以及硬體平台上可用的硬體資源,如定時器 顯示器等。時間計數方式 需要確定秒錶程式使用的時間計數方式,是通過定時器實現週期性計時,還是通過程式每隔一段時間手動計時。顯示方式 需要確定秒...

51微控制器c語言程式設計標頭檔案的問題

矮子根 不知你是怎麼弄的,我照你的樣式重複了一遍也沒有報錯,請照下圖認真檢查 另外注意 你在兩個檔案裡定義的beep 和 beep 是不一樣的,這才是錯誤的原因。 這個告警是告訴你沒有實現函式吧。你應該把這個函式的主體在.c裡實現。 微控制器的戰鬥機 你看看定義的函式名一樣嗎? 對於c語言的標頭檔案...

51微控制器C51語言的幾個問題,c51微控制器控制12864程式(c語言),顯示幾個字,或一些簡單的圖片就行!先謝謝了!

1.把psw中的第二位用乙個名字a來表示,只要後面使用到a,就是使用psw的第二位。2.sfr是用來給特殊暫存器區的乙個位址命名的,假設在特殊暫存器區有個位址0xac,將其命名為xaf暫存器,就用 sfr xaf 0xac。sbit是針對特殊暫存器區的位位址命名的。因此sbit和sfr都是針對特殊暫...