Код должен проверить, заполнена очередь или нет (два состояния).
Код должен проверить, пуста очередь или нет (два состояния).
| 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
Можно использовать две логические переменные вместо трехзначного «enum», но это не изменит количество состояний.
, поскольку, когда очередь имеет состояние «NO_DATA» или «EMPTY», она должна быть доступна
Да, но она также может быть доступна (для очереди)когда queue->queue_status
не относится ни к одному из них.
можно просто использовать, не проверяя, "ДОСТУПНО"
Ах, но вы делаете,Вам просто не нужно использовать константу, чтобы сделать это.
- Очередь доступна для удаления из очереди, когда она находится в состоянии 0 или в состоянии 1.
Это можно проверить с помощью queue->queue_status != LD_QUEUE_EMPTY
- Очередь доступна для постановки в очередь, когда она находится в состоянии 0 или состоянии 2.
Это можно проверить с помощью queue->queue_status != LD_QUEUE_FULL
Обе проверки проверяют, находится ли очередь в состоянии 0потому что отрицание пустого не является полным.Но, как вы можете видеть, проверка состояния 0 может выполняться без использования констант LD_QUEUE_AVAILABLE
и LD_DATA_AVAILABLE
, за исключением случаев установки состояния.
Таким образом, тот факт, что константы не используются где-либо еще, неозначает, что ничего не проверяет это состояние.