FRTOS_ERR_QUEUE_CORRUPT
embedded
runtime_error
ai_generated
true
FreeRTOS:队列发送因内部损坏而失败,pxQueue->uxMessagesWaiting = 0xDEAD
FreeRTOS: Queue send failed due to internal corruption, pxQueue->uxMessagesWaiting = 0xDEAD
ID: embedded/freertos-queue-overflow-corruption
75%修复率
90%置信度
1证据数
2024-06-12首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| FreeRTOS v10.4.6 | active | — | — | — |
| ARM GCC v12.2.1 | active | — | — | — |
根因分析
队列控制块内存损坏,通常由其他任务的缓冲区溢出或释放后使用导致。
English
Memory corruption in the queue control block, often caused by a buffer overflow or use-after-free in another task.
官方文档
https://www.freertos.org/implementation/a00011.html解决方案
-
Add assertions to check queue integrity before each send: `configASSERT(pxQueue->uxMessagesWaiting <= pxQueue->uxLength);` and debug the memory overwrite source
-
Use a memory protection unit (MPU) to guard queue control block memory, e.g., `mpu_set_region(MPU_REGION_QUEUE, (uint32_t)queue_cb, MPU_RW_PRIVILEGED);`
无效尝试
常见但无效的做法:
-
80% 失败
Increasing queue length does not fix memory corruption; the control block is still overwritten by the same bug.
-
75% 失败
Timing changes may mask the corruption temporarily but do not eliminate the root cause (e.g., buffer overflow).