關於任務鎖和中斷鎖 關於如何改變網路設定

2021-05-25 15:54:42 字數 1259 閱讀 7770

昨天看書看見一段關於鎖的內容,覺得應該記一下:

禁止任務排程:tasklock 

允許任務排程:taskunlock

呼叫tasklock的任務會一直執行,而不會被其他任務搶占(除了中斷,當然可以禁止中斷),除非任務自己呼叫系統函式被阻塞,另一任務才能被調入執行。

禁止中斷:intlock

重新允許中斷:intunlock

為了保護臨界**不被中斷打斷,可以用上面兩函式實現。

用intlock閉鎖中斷後,當前的執行程序可一直繼續,任何任務和中斷都不會插入執行,直到使用intunlock主動解鎖,才能恢復任務排程和中斷處理。注意不要在中斷閉鎖期間呼叫vxworks系統函式,否則有可能意外開啟中斷閉鎖。

中斷處理函式的**限制:

由於中斷處理函式不是在通常的任務上下文中執行,沒有任務控制塊,所以中斷處理共享同一棧空間,所以中斷處理函式不能呼叫會引起阻塞的系統函式,如取訊號量,記憶體操作,io操作,硬浮點操作等。

這裡再引用別人的一段和中斷有關的:

__interrupt double compute_area (double radius)

double area = pi * radius * radius;

printf("/narea = %f", area);

return area;

這個函式有太多的錯誤了,以至讓人不知從何說起了:

1)isr 不能返回乙個值。如果你不懂這個,那麼你不會被雇用的。

2) isr 不能傳遞引數。如果你沒有看到這一點,你被雇用的機會等同第一項。

3) 在許多的處理器/編譯器中,浮點一般都是不可重入的。有些處理器/編譯器需要讓額處的暫存器入棧,有些處理器/編譯器就是不允許在isr中做浮點運算。此外,isr應該是短而有效率的,在isr中做浮點運算是不明智的。

4) 與第三點一脈相承,printf()經常有重入和效能上的問題。如果你丟掉了第三和第四點,我不會太為難你的。不用說,如果你能得到後兩點,那麼你的被雇用前景越來越光明了。

下面來列舉下vxworks下更改網路設定的api:

ipattach(0,"motfec");

ifaddrset("motfec0","192.168.2.166"); //改變ip位址

ifmaskset("motfec0", 0xff000000);        //改變子網掩碼

routeadd("192.168.2.0","192.168.1.1");//增加路由項

FreeRTOS 排程鎖,任務鎖和中斷鎖

以下 自安富萊電子 排程鎖排程鎖就是 rtos 提供的排程器開關函式,如果某個任務呼叫了排程鎖開關函式,處於排程鎖開和調 度鎖關之間的 在執行期間是不會被高優先順序的任務搶占的,即任務排程被禁止。這一點要跟臨界段的 作用區分開,排程鎖只是禁止了任務排程,並沒有關閉任何中斷,中斷還是正常執行的。而臨界...

關於鎖(悲觀鎖與樂觀鎖)

鎖 locking 業務邏輯的實現過程中,往往需要保證資料訪問的排他性。如在金融系統的日終結算 處理中,我們希望針對某個 cut off 時間點的資料進行處理,而不希望在結算進行過程中 可能是幾秒種,也可能是幾個小時 資料再發生變化。此時,我們就需要通過一些機 制來保證這些資料在某個操作過程中不會被...

關於互斥鎖

顧名思義,在多執行緒下,用來鎖定資源使用許可權。我們先看一段 include include include includeint count 0 void func void argc pthread exit null return null int main t1 t2兩個執行緒可以同時修改c...