VxWorks全域性變數的保護

2021-04-14 01:16:18 字數 1227 閱讀 6832

vxworks全域性變數的保護

vxworks

作業系統是乙個應用比較多的實時多工作業系統。它提供並支援多任務排程機制,使用者可以將自己對事件的控制通過不同任務的協調而完成。各個任務之間通過全域性變數、訊號量、管道等方式進行資訊交換。

wind ml

是vxworks

上的乙個二維圖形使用者介面,當多個任務都需要作畫圖工作時,可能出現當乙個任務在正在作圖時,被另乙個作圖任務打斷,從而出現意想不到得情況。本文將介紹在

vxworks

作業系統中,編寫應用程式時的兩個技巧。乙個是記憶體變數保護;另乙個是多工間的畫圖保護。

1、全域性變數的保護

各個任務之間通過全域性變數交換資訊時,如果其中某一任務在引用同乙個全域性變數期間,該變數在另一任務中被重新賦值,那麼就可能發生一些意想不到的事情。為了解決這個問題,首先在任務中定義若干個區域性變數,之後將相應的全域性變數賦值這些區域性變數。任務隨後引用的是這些區域性變數,而不是全域性變數,這樣就避免了問題的發生。

具體程式設計流程如下所示:

void task

/ * ugl_forever? */ }

對於陣列等全域性變數採用固定陣列,會有利於防止陣列超界。

4m6h%u j;|'y:n:l,d m2、多工間的畫圖保護

wind ml

在畫圖時,每乙個繪圖指令並不是立即執行,而是首先將指令送到命令緩衝區中,在一定時間間隔後,或接收到乙個指令後,一次性的重新整理圖形顯示卡,從而完成畫圖工作。如果程式中有多個任務需要畫圖,並且在畫圖過程中發生任務切換,就可能得不到預想的結果。由於無法了解

wind ml

和vxworks

在此種情況下的具體處理機制,只有在應用程式這一級,通過避免事件發生的方法解決問題。

可以設定乙個全域性變數,用來標識整個程式執行過程中是否處於正在進行

wind ml

作圖的狀態。當某個任務要作圖時,首先判斷此標識,據此決定是放棄作圖,還是繼續等待。如果此任務開始作圖,就立即改變此標識,供其他任務處理。

下面是具體實施的程式流程:

drawtask_n ()

} }

在程式設計過程中一定要注意

ug1batchstart()

與uglbatchend()

的匹配呼叫。

利用DMZ物件保護全域性變數

今天偶然看到this繫結有個比較例外的例子會直接忽略指定的繫結物件。function foo var a 2 傳入null 2 非嚴格模式下foo函式中的this被預設繫結到全域性物件 只要函式體 不是函式呼叫位置 處於嚴格模式下,會繫結到undefined 自然輸出就是2。如果此時全域性a被篡改就...

static全域性變數 全域性變數

1 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是...

全域性變數和靜態全域性變數

全域性變數和區域性變數是從變數的作用域的角度劃分。靜態變數和動態變數是從變數的記憶體分配的角度劃分。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同,區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原...