我试图通过C语言中的数组和指针实现队列。队列 被C结构C指针队列中的指针
// Circular Buffer
typedef struct{
main_controller_req_t buffer[BUFFER_SIZE]; // buffer
uint16_t size; // length of the queue
uint16_t count; // number of elements present in the queue
main_controller_req_t *p_head; // pointer to head of the queue (read end)
main_controller_req_t *p_tail; // pointer to tail of the queue (write end)
}circular_buffer_t;
我已经实现功能,用于队列初始化
void init_cb(circular_buffer_t *p_cb){
p_cb->p_head = p_cb->buffer;
p_cb->p_tail = p_cb->buffer;
p_cb->count = 0;
p_cb->size = BUFFER_SIZE;
}
和功能,用于插入到所述队列建模
BOOL enqueue_cb(circular_buffer_t *p_cb, main_controller_req_t *p_enq_elem){
if(p_cb->count < p_cb->size){
// queue contains at least one free element
taskENTER_CRITICAL();
// insert the element at the tail of queue
*(p_cb->p_tail) = *p_enq_elem;
// incrementing modulo size
p_cb->p_tail = (((p_cb->p_tail++) == (p_cb->buffer + p_cb->size)) ? (p_cb->buffer) : (p_cb->p_tail));
// one element added
p_cb->count++;
taskEXIT_CRITICAL();
return TRUE;
}else{
// queue is full
return FALSE;
}
}
的enqueue_cb功能运作良好,直到尾部达到BUFFER_SIZE。然后 程序崩溃,uC重置。问题是在p_tail指针更新,但我不明白为什么 。请任何人都可以帮助我?提前致谢。
我建议你在你的电脑(Visual Studio或类似的)上执行所有不依赖于CPU的库。它将减轻您的调试并产生更少的问题。 – tilz0R
请提供您的使用导致崩溃的主要功能的一小部分。 –
@Steve>你不能在同一语句中分配p_cb-> p_tail **和**使用'++'。 (很公平,你可以,你只是让你的代码难以理解,即使是你自己也是如此) – spectras