queue_status){ /* prcess queue tail */ if ((LD_QUEUE_EMPTY == queue->que-6ren">
gpt4 book ai didi

c - 为什么使用此代码中的 "LD_QUEUE_AVAILABLE"状态

转载 作者:太空宇宙 更新时间:2023-11-04 07:46:12 26 4
gpt4 key购买 nike

  if (LD_QUEUE_FULL != queue->queue_status){
/* prcess queue tail */
if ((LD_QUEUE_EMPTY == queue->queue_status)|| (LD_NO_DATA == queue->queue_status)){
/* Set status of queue */
if (TRANSMISSION == direction)
queue->queue_status = LD_QUEUE_AVAILABLE;
else
queue->queue_status = LD_DATA_AVAILABLE;
} else {
/* Check if queue size equal to queue tail */
if (queue->queue_max_size == queue->queue_tail + 1){
queue->queue_tail = 0;
} else {
queue->queue_tail++;
}
}
/* copy data to queue */
for (i=0; i<8; i++){
queue_data[queue->queue_tail][i] = data[i];
}
/* update queue status */
queue->queue_current_size++;
if (queue->queue_current_size >= queue->queue_max_size){
queue->queue_status = LD_QUEUE_FULL;
}

Tx 队列具有“LD_QUEUE_AVAILABLE”状态并且Rx 队列具有“LD_DATA_AVAILABLE”状态。

在这个代码示例中,我认为没有理由使用“可用”状态

因为当队列状态为“NO_DATA”或“EMPTY”时,它必须可用,并且某些任务可以只使用它而不检查它是否“可用”(其实这两个状态(LD_QUEUE~,LD_DATA~)并没有出现在整个项目中,而是刚刚被定义。)

是否有任何理由要求队列必须具有“可用性状态”???

最佳答案

代码需要检查队列是否已满(两种状态)。

代码需要检查队列是否为空(两种状态)。

                 | Full            |
+--------+--------+
| No | Yes |
--------+--------+--------+--------+
Empty | No | 0 | 1 |
+--------+--------+--------+
| Yes | 2 | 3 |
--------+--------+--------+--------+

总共有四种状态(0、1、2、3)。

如果队列不可能既是满的又是空的,那么其中一个状态 (3) 是不可能的,所以我们剩下三个状态。

                            | queue->queue_status
+--------------------+-------------------
State | Tx queue | Rx queue
----------------------------+--------------------+-------------------
0 (Not full and not empty) | LD_QUEUE_AVAILABLE | LD_DATA_AVAILABLE
1 (Full and not empty) | LD_QUEUE_FULL | ?
2 (Not full and empty) | LD_QUEUE_EMPTY | LD_NO_DATA

可以使用两个 bool 变量而不是三值“枚举”,但这不会改变状态的数量。


because when queue has state of "NO_DATA" or "EMPTY" then it must be available

是的,但当 queue->queue_status 两者都不是时,它也可以(用于排队)。

can just use it not checking if it is "AVAILABLE"

啊,但你知道。您只是不必使用常量即可。

  • 当处于状态 0 或状态 1 时,队列可用于出队。
    这可以使用 queue->queue_status != LD_QUEUE_EMPTY 进行检查
  • 当处于状态 0 或状态 2 时,队列可用于排队。
    这可以使用 queue->queue_status != LD_QUEUE_FULL
  • 进行检查

两项检查都检查队列是否处于状态 0,因为空的否定未满。但正如您所见,检查状态 0 可以在不使用常量 LD_QUEUE_AVAILABLELD_DATA_AVAILABLE 的情况下完成,设置状态时除外。

因此,常量未在其他任何地方使用的事实并不意味着没有任何检查该状态。

关于c - 为什么使用此代码中的 "LD_QUEUE_AVAILABLE"状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56815287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com