任务共享动态内存问题

2019-07-20 22:33发布

目前使用freertos做操作系统,想在任务之间传递消息,由于系统没有邮箱之类的,所以只能采用队列传递消息指针的方式,这样可以节省内存,但是担心申请的内存,会在异常情况下不能释放造成泄漏,请问谁知道任务间共享内存比较安全的方式,或者指点下ucos消息这块的消息申请和释放模式
还有问下原子你的动态申请内存可靠么,会不会时间长了产生碎片

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
FreeRTOS
1楼-- · 2019-07-21 02:36
 精彩回答 2  元偷偷看……
xsx127
2楼-- · 2019-07-21 03:24
FreeRTOS 发表于 2016-4-30 15:42
freertos的heap_4的内存管理方案有碎片回收功能,不需要担心碎片产生的问题。还有你所说的任务间传递消息, ...

不使用全局变量,不利于模块化
而且我发送的消息不是一条啊,根据程序运行状况发送数目和内容都不同,现在是把消息内容用const写在flash上,使用队列发送对应消息的序号,这样不用占什么内存,也不共享内存这么危险
我现在用的是原子的动态内存,不太会用freertos内部的内存管理,可以指点下
FreeRTOS
3楼-- · 2019-07-21 06:44
xsx127 发表于 2016-4-30 16:21
不使用全局变量,不利于模块化
而且我发送的消息不是一条啊,根据程序运行状况发送数目和内容都不同,现 ...

既然任务间只是传递一个指针,那么用一个长度为4的队列不就好了,至于队列深度是多少也不是大问题了,毕竟队列长度只有4,就算深度是100,那么也就耗费400字节的队列单元。

freertos的内存管理方案我只研究过heap_2和heap_4,指点就不敢了,至于内存管理的使用都大同小异,需要用到时申请内存,使用完后释放内存。heap_2采用的是最适合空闲块的机制,但不具备碎片回收功能,实际项目测试过稳定性一般,尤其是多个任务申请的内存大小不一样时尤其容易出现碎片,这是heap_2的一个致命性缺陷,《freertos中文使用教程》里面有对heap_2的安全使用作详细说明,有兴趣可以看看。至于heap_4,具有内存碎片回收功能,但不具备heap_2的最适合内存块分配功能,目前公司的项目都采用这套方案,稳定性十分强,建议使用这套方案。至于heap_5听说跟heap_4是一样的,只不过是内外部定义内存空间的区别罢了
xsx127
4楼-- · 2019-07-21 10:08
本帖最后由 xsx127 于 2016-4-30 16:48 编辑
FreeRTOS 发表于 2016-4-30 16:40
既然任务间只是传递一个指针,那么用一个长度为4的队列不就好了,至于队列深度是多少也不是大问题了,毕 ...

400字节的内存啊,这还不多啊,
heap_4是你推荐的?有空我也转到4

未完成的工程,这一个地方用400字节真是伤不起的
QQ截图20160430164637.png
FreeRTOS
5楼-- · 2019-07-21 10:11
 精彩回答 2  元偷偷看……

一周热门 更多>