OpenEdv-开源电子网

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

关于freeRTOS heap_4.c报错

[复制链接]

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
发表于 2018-3-3 20:46:44 | 显示全部楼层 |阅读模式
1金钱
在使用freeRTOS系统时,系统总是会报错,
Error:...\FreeRTOS\portable\MemMang\heap_4.c,320
Error:...\FreeRTOS\portable\MemMang\heap_4.c,321

我看了是在vPortFree()里的一个断言抛出的错误,主要是判断是否真正分配
        /* Check the block is actually allocated. */
        configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 );
        configASSERT( pxLink->pxNextFreeBlock == NULL );

我的任务里面也只分配了没多大的空间啊,而且任务堆栈我都设置了  4096了,还是会报错
char *pntr = pvPortMalloc(20);
...
...

...
if(pntr != NULL)
vPortFree(pntr);
实在是搞不懂,有遇到过这种情况的嘛

最佳答案

查看完整内容[请看2#楼]

这个问题和你的任务堆栈没关系,首先看你的错误地方。 你可到heap4.c里面去看看320行和321行,发现是内存释放函数的位置,说明内存释放出问题。 而你的内存申请是成功的,说明释放的时候释放错地址了。 你可以打印出申请内存后的地址add1,释放内存前的地址add2,对比一下就知道了。 如果方便,把涉及到FreeRTOS内存申请和释放的代码贴出来,特别是红色方框里面的代码,我觉得问题就出在你红方框里面的代码,这部分代码应该 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

48

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6222
金钱
6222
注册时间
2018-12-2
在线时间
112 小时
发表于 2018-3-3 20:46:45 | 显示全部楼层
本帖最后由 Sanjay 于 2018-12-17 22:19 编辑

这个问题和你的任务堆栈没关系,首先看你的错误地方。
你可到heap4.c里面去看看320行和321行,发现是内存释放函数的位置,说明内存释放出问题。
而你的内存申请是成功的,说明释放的时候释放错地址了。
你可以打印出申请内存后的地址add1,释放内存前的地址add2,对比一下就知道了。

如果方便,把涉及到FreeRTOS内存申请和释放的代码贴出来,特别是红色方框里面的代码,我觉得问题就出在你红方框里面的代码,这部分代码应该将你的地址改变了。
20181217220329.png
20181217221158.png
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-3-5 01:20:44 | 显示全部楼层
帮顶
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
 楼主| 发表于 2018-3-5 15:17:27 | 显示全部楼层

感谢原子哥
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
 楼主| 发表于 2018-3-5 15:18:07 | 显示全部楼层
现在的问题是,我把所有的任务都删掉了,只留一个简单的LED任务,还是会报同样的错误,不知道为什么
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
 楼主| 发表于 2018-3-5 15:22:23 | 显示全部楼层

请问原子哥,
在你们的F4  FreeRTOS实验17-1 FreeRTOS内存管理实验

        my_mem_init(SRAMIN);                    //初始化内部内存池

这里初始化内部内存池是必要的嘛?我怎么觉得跟实际的没有多大关系呢
freeRTOS我们不是选择动态分配得嘛
回复

使用道具 举报

9

主题

53

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-21
在线时间
226 小时
发表于 2018-3-5 16:19:42 | 显示全部楼层
BJTT 发表于 2018-3-5 15:22
请问原子哥,
在你们的F4  FreeRTOS实验17-1 FreeRTOS内存管理实验

整个工程看下!
https://shop286328453.taobao.com/
回复

使用道具 举报

28

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2018-1-11
在线时间
64 小时
发表于 2018-6-4 14:20:26 | 显示全部楼层
BJTT 发表于 2018-3-5 15:18
现在的问题是,我把所有的任务都删掉了,只留一个简单的LED任务,还是会报同样的错误,不知道为什么

楼主,您好,我遇到了和您差不多的问题。我是在Freertos中有出现重复的删除和创建同一个任务,结果出现了和您一样的错误,请问下您当时的问题找到原因了么?
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
 楼主| 发表于 2018-6-8 16:18:27 | 显示全部楼层
JImLu 发表于 2018-6-4 14:20
楼主,您好,我遇到了和您差不多的问题。我是在Freertos中有出现重复的删除和创建同一个任务,结果出现了 ...

应该是某个任务的栈分配太小了,你都先调大试试看,写个1024什么的,之后再改小
回复

使用道具 举报

2

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2018-4-29
在线时间
21 小时
发表于 2018-7-27 21:08:18 | 显示全部楼层
我也遇到了这个问题,我的内存是申请过的
[mw_shl_code=c,true]t = pvPortMalloc(256);
                                printf("point(t) = %p\r\n", t);
                                sprintf(t, "%s:%s", serverhost, serverport);                                                                                        // Cache Host
                                content = pvPortMalloc(256);
                                sprintf(content, GET, p, t);
                                printf("%s\r\n", content);
                                esp8266_send_data((u8*)content, (u8*)"200 OK", 400);
                                // printf("%s\r\n", USART3_RX_BUF);
                                t = strstr((char*)USART3_RX_BUF, "{");
                                switchUtf8ToGbk(t, content);
                                vPortFree(t);
                                t = NULL;[/mw_shl_code]

回复

使用道具 举报

2

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2018-4-29
在线时间
21 小时
发表于 2018-7-27 21:08:53 | 显示全部楼层
堆栈大小应该是没有什么问题的
回复

使用道具 举报

6

主题

48

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6222
金钱
6222
注册时间
2018-12-2
在线时间
112 小时
发表于 2019-1-29 16:28:42 | 显示全部楼层
本帖最后由 Sanjay 于 2019-1-29 16:34 编辑
轩辕文 发表于 2018-7-27 21:08
我也遇到了这个问题,我的内存是申请过的
[mw_shl_code=c,true]t = pvPortMalloc(256);
                 ...

很明显你的地址t被修改了,释放的地址和原来的不一样,估计楼主也是这样的问题

1.jpg
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 13:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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