我正在編寫一些C代碼來模擬嵌入式系統的運行。事件發生在一定數量的設備上,優先級爲0-3。我必須服務的事件的優先級主要基於設備編號(設備0>設備3>設備7),然後每個設備提供的事件優先級基於它們提供的優先級。實現函數隊列調度的2D隊列
我得出結論,2D隊列可能是實現這個系統的最佳方式。帶有for循環的數組被認爲是「浪費的」,並且大多數函數隊列調度使用循環while(notEmpty)。
我粗略的計劃是創建兩個「節點」結構,看起來是這樣的:
struct events{
Event curEvent; //the "node"
struct events *next; //leads to event of lower priority
};
struct devices { //a linked list of Devices
int deviceNumber; //the "node"
struct devices *next;//leads to next device in order 0->max
struct events *headEevent; //a linked list of events per device
};
我提供服務的設備的數量和每個設備事件的命令行的最大數量。
我想我的問題是雙重的。首先是,我在正確的軌道上?第二個(也許更重要的)是「什麼是初始化這個2D隊列的最佳方式,以及事件發生的最佳方式?」
現在我的初始化代碼是錯誤的,我的感受:
curDevice = (struct device *) malloc (sizeof (struct device));
deviceHead = curDevice;//sets head to first that's initialized
for (i = 0; i< Number_Devices; i++) {
curDevice -> deviceNumber = i;
curEvent = (struct event *) malloc (sizeof (struct event));
curDevice -> headEvent = curEvent; //sets head event to the empty curEvent
for (j = 0; j<Q; j++) { //Q is max queue size
newEvent = (struct event*) malloc (sizeof struct event));
curEvent -> next = newEvent;
curEvent = newEvent;
}
new_device = (struct device *) malloc (sizeof (struct device));
curDevice -> next = newDevice;
curDevice = newDevice;
}
我想我可以瞭解如何對我自己enqueque。我會使用while循環遍歷鏈表,如果當前事件的優先級高於單個設備堆棧上的優先級,那麼我會將它推到頂端。
這是一個漫長而複雜的問題,請隨時索取您可能需要的任何說明。提前致謝!
你有任何操作系統,比如說信號量? –