我正在编写一些 C 代码来模拟嵌入式系统的运行。事件从一定数量的设备发生,并被赋予优先级 0-3。我必须服务的事件的优先级主要基于设备编号(设备 0 > 设备 3 > 设备 7),然后每个设备服务的事件的优先级基于它们提供的优先级。
我得出的结论是 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;
}
我想我可以自己发现如何入队。我会使用 while 循环遍历链表,如果当前事件的优先级高于单个设备堆栈上的优先级,我会将其推到顶部。
这是一个漫长而复杂的问题,因此请随时询问您可能需要的任何说明。提前致谢!