1. 程式人生 > >51可重入函式的陷阱

51可重入函式的陷阱

     函式一旦定義為可重入, 引數就會通過堆疊傳遞。 不要忘記的是, 區域性變數也會在堆疊上分配。 更不能忽略的是, 51的堆疊空間大小是在2^8以內的, 所以堅決不能在可重入函式的區域性變數中分配過大的緩衝區。 有一次我 犯了這個錯誤造成了堆疊溢位, 微控制器的反應是reboot.

相關推薦

51函式陷阱

     函式一旦定義為可重入, 引數就會通過堆疊傳遞。 不要忘記的是, 區域性變數也會在堆疊上分配。 更不能忽略的是, 51的堆疊空間大小是在2^8以內的, 所以堅決不能在可重入函式的區域性變數中分配過大的緩衝區。 有一次我 犯了這個錯誤造成了堆疊溢位, 微控制器的反應是r

Linux函式和執行緒安全的區別與聯絡(轉)

*****可重入函式      函式被不同的控制流程呼叫,有可能在第一次呼叫還沒返回時就再次進入該函式,這稱為重入。      當程式執行到某一個函式的時候,可能因為硬體中斷或者異常而使得在使用者正在執行的程式

keilc51函式及模擬棧淺析 (1)

1、關於可重入函式(可再入函式)和模擬堆疊(模擬堆疊)   “可重入函式可以被一個以上的任務呼叫,而不必擔心資料被破壞。可重入函式任何時候都可以被中斷,一段時間以後又可以執行,而相應的資料不會丟失。”(摘自嵌入式實時作業系統uC/OS-II)   在理解上述概念之前,必須先說一下keilc5

Linux 環境程式設計——淺談函式與不可函式

在實時系統的設計中,經常會出現多個任務呼叫同一個函式的情況。如果有一個函式不幸被設計成為這樣:那麼不同任務呼叫這個函式時可能修改其他任務呼叫這個函式的資料,從而導致不可預料的後果。這樣的函式是不安全的函式,也叫不可重入函式。 相反,肯定有一個安全的函式,這個安全的函式又叫可重入函式。那麼什麼是可

什麼是函式和不可函式

1.可重入函式 在實時系統的設計中,經常會出現多個任務呼叫同一個函式的情況。如果這個函式不幸被設計成為不可重入的函式的話,那麼不同任務呼叫這個函式時可能修改其他任 務呼叫這個函式的資料,從而導致不可預料的後果。那麼什麼是可重入函式呢?所謂可重入是指一個可以被多個任務呼叫的過程,任務在呼叫時不必擔

Linux系統程式設計——淺談函式與不可函式

在實時系統的設計中,經常會出現多個任務呼叫同一個函式的情況。如果有一個函式不幸被設計成為這樣:那麼不同任務呼叫這個函式時可能修改其他任務呼叫這個函式的資料,從而導致不可預料的後果。這樣的函式是不安全的函式,也叫不可重入函式。 相反,肯定有一個安全的函式,這個安全的函式又叫可重入函式。那

Linux:函式與不可函式

可重入函式          一個函式在執行的過程中被打斷,然後會再被從頭執行一次,執行完後,再回來把剛才沒執行完的部分執行完。這就相當於巢狀的執行了。函式是公共程式碼,這樣的執行是允許的。函式的執行可以被打斷,打斷之後還可以再從頭執行,執行完後接著執行剛才沒有執行的程式

對比執行緒安全和函式

1.什麼叫執行緒安全 如果你的程式所在的程序中有多個執行緒在同時執行,而這些執行緒可能同時執行一段程式碼或同時訪問一個物件,如果每次執行完這段程式碼或訪問完這個物件之後,所得到的結果和單執行緒執行的

函式,SIGCHILD訊號

一、 可重入函式 概念:一個函式被多個執行流進入,不會出錯,這就叫可重入函式;否則,就叫不可重入函式。 1.如果一個函式只訪問自己的區域性變數或引數,當有多個執行流執行時,就不會互相影響。 2.首先它意味著這個函式可以被中斷,其次意味著它除了使用自己棧上的

函式(reentrant function)

由於用到了strtok函式,順便搜了一下reentrant,看這篇講的不錯,貼來~~ 原帖地址:http://blog.chinaunix.net/u/27708/showart_322733.html 可重入函式這一概念早有接觸,但一直未有系統的理解,最近閱讀《 APUE

函式的深入理解以及printf的

 這個概念在嵌入式作業系統中比較重要,由於存在任務的排程,它實時系統,可剝奪型核心中是危險的,如同一個安靜的水雷。可能會被觸發,也可能安然無恙。由於它執行結果的不可預期性,會使系統帶來隱患。 printf()經常有重入解釋 不可重入函式不可以在它還沒有返回就再次被呼叫。例如printf,malloc

淺談函式與不可函式

在實時系統的設計中,經常會出現多個任務呼叫同一個函式的情況。如果有一個函式不幸被設計成為這樣:那麼不同任務呼叫這個函式時可能修改其他任務呼叫這個函式的資料,從而導致不可預料的後果。這樣的函式是不安全的函式,也叫不可重入函式。 相反,肯定有一個安全的函式,這個安全的函式又叫

執行緒安全與函式之間的區別

今天,學到了兩個概念。執行緒安全、與可重入函式 這個都是關於多執行緒的,下面我們來看看這兩個概念到底有什麼不同之處。 先來看看這兩個概念 1、什麼是可重入函式 函式被不同的控制流程呼叫,有時會在之前的

什麼是函式和不可函式(轉)

可重入函式      在 實時系統的設計中,經常會出現多個任務呼叫同一個函式的情況。如果這個函式不幸被設計成為不可重入的函式的話,那麼不同任務呼叫這個函式時可能修改其他任 務呼叫這個函式的資料,從而導致不可預料的後果。那麼什麼是可重入函式呢?所謂可重入是指一個可以被多

Java多執行緒01_函式

測試環境 OS:windows7_X64 JDK:jdk1.8.0_20 IDE: eclipse_neon 一、可重入函式 相信很多人都聽說過可重入函式,可重入函式最重要的兩條法則就是: 只

關於執行緒安全與函式

一、執行緒安全 一個函式被稱為執行緒安全的,當且僅當被多個併發執行緒反覆地呼叫時,它會一直產生正確的結果。如果一個函式不是執行緒安全的,我們就說它是執行緒不安全的。 四個(不相交的)執行緒不安全函式類

深入理解執行緒安全和函式

執行緒安全 基本定義 執行緒安全:簡單來說執行緒安全就是多個執行緒併發同一段程式碼時,不會出現不同的結果,我們就可以說該執行緒是安全的; 執行緒不安全:說完了執行緒安全,執行緒不安全的問題就很好解

函式與不可函式概念以及編寫規範

1、定義 一個可重入的函式簡單來說就是可以被中斷的函式,也就是說,可以在這個函式執行的任何時刻中斷它,轉入OS排程下去執行另外一段程式碼,而返回控制時不會出現什麼錯誤;而不可重入的函式由於使用了一些系統資源,比如全域性變數區,中斷向量表等,所以它如果被中斷的話,可能會出現

訊號之函式、競態條件

一、可重入函式 1.基本概念  當捕捉到訊號時,不論程序的主控制流程當前執行到哪兒,都會先跳到訊號處理函式中執行,從 訊號處理函式返回後再繼續執行主控制流程。訊號處理函式是一個單獨的控制流程,因為它 和主控制流程是非同步的,二者不存在調⽤用和被調⽤用的關係,並且使用不同的

C語言之函式 && 不可函式 函式

在 實時系統的設計中,經常會出現多個任務呼叫同一個函式的情況。如果這個函式不幸被設計成為不可重入的函式的話,那麼不同任務呼叫這個函式時可能修改其他任 務呼叫這個函式的資料,從而導致不可預料的後果。那麼什麼是可重入函式呢?所謂可重入是指一個可以被多個任務呼叫的過程,任務在呼叫時不必擔心資料是否