OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2410|回复: 3

释放内存free出现错误,请各位大佬指点指点

[复制链接]

10

主题

40

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2873
金钱
2873
注册时间
2020-4-30
在线时间
218 小时
发表于 2020-4-30 08:58:34 | 显示全部楼层 |阅读模式
2金钱
别人交接的代码,在跑的时候出现HardFault,如图 123.PNG
图中的函数
int8_t  delete_item_to_queue_list(p_queue_cmd_buf_tcb ptr_queue_list_tcb)                          //删除队列中的一项消息
{
        if(ptr_queue_list_tcb != NULL)
        {
                if(ptr_queue_list_tcb->queue_list_cur_len > 0)                                            //当前消息队列长度大于0
                {
                        free(ptr_queue_list_tcb->queue_list[ptr_queue_list_tcb->queue_list_tail].cmd_pbuf);   //释放消息数据内存
                        ptr_queue_list_tcb->queue_list[ptr_queue_list_tcb->queue_list_tail].cmd_pbuf = NULL;  //将当前指针清0
                        ptr_queue_list_tcb->queue_list[ptr_queue_list_tcb->queue_list_tail].cmd_dlen = 0x0;   //长度清零
                        ptr_queue_list_tcb->queue_list_tail++;                                                //释放队列空间
                        ptr_queue_list_tcb->queue_list_tail %= ptr_queue_list_tcb->queue_list_len;
                        ptr_queue_list_tcb->queue_list_cur_len--;                                             //当前队列长度减1
                }
                else
                {
                        return -1;
                }
        }
        else
        {
                return -2;
        }
        return 0;
}
对应的结构体
typedef struct
{
        uint8_t  *cmd_pbuf;
        uint16_t  cmd_dlen;
}cmd_buf_t,*p_cmd_buf_t;

typedef struct
{
        p_cmd_buf_t  queue_list;
    void (*handle)(const char *pbuf,uint16_t dlen);
        volatile uint8_t queue_list_len;
        volatile uint8_t queue_list_head;
        volatile uint8_t queue_list_tail;
        volatile uint8_t queue_list_running;
        volatile uint8_t queue_list_cur_len;
        volatile uint8_t queue_list_overflow;
}queue_cmd_buf_tcb, *p_queue_cmd_buf_tcb;


搞了几天都没有搞定,请各位大佬指点指点,感谢!!



最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

40

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2873
金钱
2873
注册时间
2020-4-30
在线时间
218 小时
 楼主| 发表于 2020-4-30 08:58:35 | 显示全部楼层
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2020-4-30 21:25:07 | 显示全部楼层
不用malloc和free函数呢
一分耕耘一分收获。
回复

使用道具 举报

0

主题

130

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1876
金钱
1876
注册时间
2016-10-23
在线时间
262 小时
发表于 2020-5-1 11:59:42 | 显示全部楼层
产生 hardfault 中断原因, 这个 BaiDu 有很多 解释,你可以仿真跑到free,然后看下 入口 的结构体 有多少数据,你的这个内存释放是一定要准的,free函数 里 删除 了多少个长度 的数据, 你的free 函数有没 贴出来
6年嵌入式老玩家 深圳
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-28 01:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表