c - 实现函数队列调度的2D队列

标签 c embedded queue

我正在编写一些 C 代码来模拟嵌入式系统的运行。事件由一定数量的设备发生,并被赋予优先级 0-3。我必须服务的事件的优先级主要基于设备编号(设备 0 > 设备 3 > 设备 7),然后每个设备服务的事件的优先级基于其提供的优先级。

我得出的结论是,2D 队列可能是实现该系统的最佳方式。带有 for 循环的数组被认为是“浪费”,并且大多数 Function Queue 调度都使用像 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 循环来迭代链接列表,如果当前事件的优先级高于单个设备堆栈上的事件,我会将其推到顶部。

这是一个漫长而复杂的问题,因此请随时询问您可能需要的任何说明。提前致谢!

最佳答案

为什么不使用单个链表(队列),然后将任务插入到末尾。当您想选择下一个任务时,只需浏览它并找到优先级最高的任务并从列表中删除即可。

关于c - 实现函数队列调度的2D队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15978678/

相关文章:

embedded - 限制USB电源输出

python - 是否可以在 RabbitMQ 队列之间移动/合并消息?

c++ - 用互联网浏览器的客户区填充窗口的客户区

c - 如何解决 MISRA C :2012 Rule:8. 4?

c - 在 C 中作为函数参数的函数

PHP exec 没有按预期运行我的脚本

algorithm - 我可以在不使用堆栈的情况下反转队列吗?

c - 按名称对队列进行排序不起作用

C、将外部文本插入文本文件,

c - 代码中各行的含义(scanf)