不知道为什么,STM32运行自己写的队列就死机,大佬帮我看看

2019-07-21 02:47发布

只要连续入队就导致32死机,我队列只创建40字节的数据领,不可能内存不够,会不会是队列的操作有错,可是我在VC中试过正常啊。

#include <stdio.h>
#include <stdlib.h>

#define   uint8_t   unsigned char

typedef struct queue
{
  uint8_t *data;  //数据域
  uint8_t head;   //队首
  uint8_t tail;   //队尾
  uint8_t len;    //队列长度
}*pQueue,Queue;
/*********队列是否为空************/
uint8_t Empty(pQueue p)
{
   if(p->head==p->tail)
   {
     return 1;
   }
     return 0;
}
/*********队列是否为满************/
uint8_t Impletion(pQueue  p)
{
   if( (p->tail+1)%p->len == p->head)
   {
     return 1;
   }
     return 0;
}
/*********创建队列************/
pQueue QueueCreate(uint8_t len)
{
  pQueue  newQueue = (pQueue)malloc(sizeof(Queue));
          newQueue->data=(uint8_t*)malloc(len);
          newQueue->len=len;
          newQueue->head=0;
                  newQueue->tail=0;
     return newQueue;
}

/*********入队***************/
uint8_t Enqueue(pQueue p,uint8_t data)
{
   if(Impletion(p)) //判断队列是否为满
   {
     return 0; //入队失败
   }
   p->data[p->tail]=data;
   p->tail=(p->tail+1)%p->len;
   return   1; //入队成功
}
/*********出队***************/
uint8_t Dequeue(pQueue p,uint8_t *data)
{
  if(Empty(p))
  {
    return 0;//失败,队列空
  }
  *data=p->data[p->head];
  p->head=(p->head+1)%p->len;
    return 1;
}

0条回答

一周热门 更多>