关于STM32F103使用MALLOC函数申请动态内存持续写入系统死机问题

2019-07-21 08:20发布

本人与使用循环队列对串口接收到的数据进行处理,但是在数据持续入队2300多个字节数据后单片机死了,00字节数据内入队出队均无问题,打印出内存地址也能循环写入,如果把系统堆区大小放大,数据入队能多一些,求大神帮忙。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
冲天菜鸟
1楼-- · 2019-07-21 09:51
等=============
旺仔奶豆
2楼-- · 2019-07-21 15:45
 精彩回答 2  元偷偷看……
板板
3楼-- · 2019-07-21 20:49
最好申请了就不要释放,一直用那点内存
冲天菜鸟
4楼-- · 2019-07-21 23:16
板板 发表于 2017-12-22 09:43
最好申请了就不要释放,一直用那点内存

就是一直用的 ,没释放,就用了一次
申请固定结构体大小
冲天菜鸟
5楼-- · 2019-07-21 23:31
本帖最后由 冲天菜鸟 于 2017-12-22 09:47 编辑
冲天菜鸟 发表于 2017-12-22 09:45
就是一直用的 ,没释放,就用了一次
申请固定结构体大小

//结构体
typedef struct
{
    u8 data[N];  //±£′æ½óêÕμÄêy¾Y
    u8 front;
    u8 rear;  
}sequeue_t;
//申请内存
sequeue_t * create_empty_sequeue()
{
    sequeue_t * sq;
    //sq = (sequeue_t *)malloc(sizeof(sequeue_t));
          sq = mymalloc(sramx,sizeof(sequeue_t));
    sq->front = sq->rear = 0;
    return sq;
}//判断队列是否空
u8 check_seqeue_empty(sequeue_t * sq)
{
    return (sq->front == sq->rear);
}
//入队
u8 enqueue(sequeue_t *sq ,u8 val)
{
    sq->rear = (sq->rear+1) % (N-1);
    sq->data[sq->rear] = val;
         
    return 0;
}
//出队
u8 dequeue(sequeue_t * sq)
{
    u8 val = 0;
    sq->front = (sq->front+1) % (N-1);
    val = sq->data[sq->front] ;
          printf("p| %p ",&(sq->data[sq->front]));
    return val;
}
冲天菜鸟
6楼-- · 2019-07-22 01:28
顶顶顶顶顶

一周热门 更多>