一題一講 中斷(ISR)與可重入性

2021-08-17 02:29:53 字數 925 閱讀 1200

interrupt double compute_area(double radius)

分析:1、isr不能有返回值,必須用void;

2、isr不能傳遞引數,必須用void;

3、isr應該是短而高效的,所以不推薦在isr中做浮點運算,應該只由中斷發出訊息或置位標誌然後由應用層去處理其他工作。且

在許多處理器編譯器中,浮點一般都是不可重入的。有些處理器編譯器需要讓額外的暫存器入棧,有些處理器編譯器就不允許在isr中做浮點運算;

4、isr中不應該有重入和效能上的問題,因此使用pintf()函式也是不好的

擴充套件:重入性可重入函式主要用於多工環境中,乙個可重入的函式簡單來說就是可以被中斷的函式,也就是說,可以在這個函式執行的任何時刻中斷它,轉入os排程下去執行另外一段**,而返回控制時不會出現什麼錯誤;而不可重入的函式由於使用了一些系統資源,比如

全域性變數

區,中斷向量表

等,所以它如果被中斷的話,可能會出現問題,這類函式是不能執行在多工環境下的

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

(1)函式體內使用靜態的資料結構;

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

(3)函式體內呼叫標準i/o函式  下面舉例加以說明 可重入函式

void strcpy(char* lpszdest, char* lpszsrc)

非可重入函式1

char ctemp; // 全域性變數

void swapchar1(char* lpcx, char* lpcy)

非可重入函式2

void swapchar2(char* lpcx, char* lpcy)

如何寫出可重入的函式?在函式體內不訪問那些全域性變數,不使用靜態區域性變數,堅持只使用區域性變數,寫出的函式就將是可重入的。如果必須訪問全域性變數,記住利用mutex訊號量來保護全域性變數。

第一講與第二講

進入這個新的家庭後,第一感覺是 這是乙個新的開始,所有人的臉上都充滿了希望。我希望自己沒有後悔來這裡。今日結果 就我個人來言,我認為老師講的課程很精細,而且也很豐富,有時候老師還會帶一點小幽默,這讓我理解起來很容易,作業老師布置的很完整,能讓課堂學到的知識充分得以應用,並且把作業在第二天進行詳細的講...

說一說ST表 講一講水題

如何快速求解rmq問題呢?暴力複雜度o n 線段樹複雜度o n o logn 要是資料規模達到10 7或者更高呢?我們需要一種可以做到o 1 查詢的演算法,這時就可以用到st表。我們用f i j 表示從 j 位置開始往右 2 i 個數內的最大值,用 g i j 表示從j位置開始往左 2 i 個數內的...

網路測試與分析 第一講

第一講 網路測試概述及原理 線纜,光纖品質問題,不斷增加的網路使用者,網路擁塞,網路崩潰,攻擊,網路裝置超負荷執行 測試方式的不同 1.使用測試裝置單獨對網路裝置進行測試 單品測試 2.將網路裝置放在具體的網路環境中進行測試 根據測試目的 功能測試 主要是對裝置的介面 通訊協議 資料報 等多方面的功...