码迷,mamicode.com
首页 > 其他好文 > 详细

STM32中vPortFree()出现异常的问题解决(未完成)

时间:2018-01-10 20:10:53      阅读:1942      评论:0      收藏:0      [点我收藏+]

标签:机制   amp   题解   疑问   pre   sizeof   需要   ==   const   

1. 先从常见的vPortFree()出现异常有那几种可能性?本次使用FREERTOS系统,

从发送的源头开始找起

 1 static void sendToQueue(const char *data,uint16_t len){
 2   //这是个临时变量,是否OK?
 3   NB_Raw_Data *send = NULL;
 4 //  send=(NB_Raw_Data *) malloc(sizeof(NB_Raw_Data));
 5   //分配的空间是512+2个字节
 6   send=(NB_Raw_Data *) pvPortMalloc(sizeof(NB_Raw_Data));
 7   if(!send){
 8     return ;
 9   }
10   send->len=len;
11   if(len > 514)
12   {
13     vPortFree(send);
14     return;
15   }
16   memcpy(send->data,data,len);
17   send->data[len]=0;
18   if(sendToSendQueue(send)==false){
19     vPortFree(send);
20   }
21 }

看下发送的函数,既然是2级指针,那么创建的队列是什么?

1 BaseType_t  sendToSendQueue(NB_Raw_Data  *data){
2   bool state=false;
3   if(sendQueue){
4   //这里使用的2级指针,是否OK?
5     state =  xQueueSend(sendQueue,( void * ) &data,SEND_MAX_WAIT); 
6   }
7   return state;
8 }

看下接收的函数,不过这里的2个疑问,其中一个是NB_Raw_Data 是否需要字节对齐?

 1 void dealQueueRecieve(){
 2   NB_Raw_Data   *recieve=NULL;
 3   if(sendQueue){
 4     //这样的写法,是否能完成对recieve的赋值?2级指针的机制是什么?
 5     BaseType_t  xResult = xQueueReceive(sendQueue,                   
 6                                         (void *)&recieve, 
 7                                         (TickType_t)RECIEVE_MAX_WAIT);
 8     if((xResult == pdPASS)&&(recieve!=0)) //优先级是否OK?
 9     {
10       uart_bc95_send( recieve->data,  recieve->len);
11       vPortFree(recieve);
12     }
13   }
14 }

2. 从系统栈的入栈空间进行分析?

3. 在释放函数局部临时变量指向的地址,是否会有问题?

4. STM32是怎么记录分配的内存,机制是什么?

5. STM32的内存分配是否和heap4.c有关?

STM32中vPortFree()出现异常的问题解决(未完成)

标签:机制   amp   题解   疑问   pre   sizeof   需要   ==   const   

原文地址:https://www.cnblogs.com/429512065qhq/p/8260115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!