OpenEdv-开源电子网

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

求教uCOSII消息邮箱的变量为局部静态变量,邮箱什么时候占用RAM和释放RAM

[复制链接]

11

主题

28

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1600
金钱
1600
注册时间
2013-5-2
在线时间
131 小时
发表于 2015-3-30 14:05:35 | 显示全部楼层 |阅读模式
5金钱
ucosii启动两个任务分别在不同的.c中,两个任务通过邮箱传递数据,uCOSII消息邮箱的变量为.c局部静态变量,求教邮箱什么时候占用RAM和释放RAM?

最佳答案

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

你定义邮箱的时候只占用一个消息邮箱结构体的ram,UCOS中的消息引用是指针引用,传递的是你消息的首地址,UCOS不管你的消息释放,你可以自己决定什么时候申请和释放
早起的鸟儿有虫吃,早起的虫儿被鸟吃
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-3-30 14:05:36 | 显示全部楼层
你定义邮箱的时候只占用一个消息邮箱结构体的ram,UCOS中的消息引用是指针引用,传递的是你消息的首地址,UCOS不管你的消息释放,你可以自己决定什么时候申请和释放
开往春天的手扶拖拉机
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-3-30 14:05:36 | 显示全部楼层
回复【3楼】天之玄幻:
---------------------------------
使用消息邮箱的时候一定要确保你的消息可见性,你的消息如果是用了static设置为静态的话应该是不会出问题的。发送消息的时候一般都是使用动态内存管理申请一段内存存放消息,等消息被发送并且正确的处理以后在释放掉这部分内存。当然你也可以做一个全局数组来存放数据。
开往春天的手扶拖拉机
回复

使用道具 举报

11

主题

28

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1600
金钱
1600
注册时间
2013-5-2
在线时间
131 小时
 楼主| 发表于 2015-3-30 15:10:20 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
那么邮箱中的变量呢,因为我邮箱发送的是静态变量,那么邮箱等待中的任务查询消息的变量岂不是会消失,消息邮箱的变量一定得是全局变量吗?
早起的鸟儿有虫吃,早起的虫儿被鸟吃
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2015-3-30 15:45:34 | 显示全部楼层
推荐选择系统管理的内存块,可以排除手动管理内存的风险。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

11

主题

28

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1600
金钱
1600
注册时间
2013-5-2
在线时间
131 小时
 楼主| 发表于 2015-3-30 16:17:43 | 显示全部楼层
回复【4楼】zuozhongkai:
---------------------------------
请问一下,什么是消息的可见性?为什么设置static就不会有问题呢?
早起的鸟儿有虫吃,早起的虫儿被鸟吃
回复

使用道具 举报

11

主题

28

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1600
金钱
1600
注册时间
2013-5-2
在线时间
131 小时
 楼主| 发表于 2015-3-30 16:23:55 | 显示全部楼层
回复【5楼】styleno1:
---------------------------------
ucos的内存块是静态变量还是全局变量呢?用系统的内存块RAM的开销是不是增大了很多?ucos的内存以前也是用static开辟空间,没发现什么问题。
static OS_MEM   *MemCB;                //内存块
static uint8_t  Mem_Buff[10][100];   //内存分区
早起的鸟儿有虫吃,早起的虫儿被鸟吃
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-3-30 16:36:08 | 显示全部楼层
回复【6楼】天之玄幻:
---------------------------------
消息的可见性就是你的消息在被最终处理完成都是在ram中实际存在的,不会被释放掉,static就是将一变量定义为静态变量,这样在退出函数的时候不会释放掉这个变量的内存。
开往春天的手扶拖拉机
回复

使用道具 举报

11

主题

28

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1600
金钱
1600
注册时间
2013-5-2
在线时间
131 小时
 楼主| 发表于 2015-3-30 16:41:40 | 显示全部楼层
回复【8楼】zuozhongkai:
---------------------------------
谢谢指点!那么说ucos消息邮箱的变量必须是全局变量或者静态变量,只是他比全局变量多了一个同步而已?
早起的鸟儿有虫吃,早起的虫儿被鸟吃
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-3-30 17:13:29 | 显示全部楼层
回复【9楼】天之玄幻:
---------------------------------
可以用全局变量或静态变量,但不是绝对的。最好使用动态内存管理,要发送数据的时候申请一段内存,当处理完以后在释放掉这部分内存。
开往春天的手扶拖拉机
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-6-7
在线时间
41 小时
发表于 2016-7-30 22:33:03 | 显示全部楼层
zuozhongkai 发表于 2015-3-30 17:13
回复【9楼】天之玄幻:
---------------------------------
可以用全局变量或静态变量,但不是绝对的。最好 ...

凯哥,你说的释放内存是在发送消息的任务还是接收到消息的任务释放?如果是发送方任务释放内存,那怎么样才能知道接收消息的任务处理了数据?
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-8-2 10:26:17 | 显示全部楼层
要释放一个消息的内存,肯定要等到这个消息被处理掉才能释放的。所以一般都是在接受任务中释放的。
开往春天的手扶拖拉机
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 21:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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