3806|9

27

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

求教:uC/OS-II内存管理在实际使用中的问题 [复制链接]

 uC/OS-II的内存管理中创建的内存块大小都是一样的大小.
如果都块大小是100.
而我们在申请内存的时候使用大小为20的情况加多,这样就会导致内存的使用效率不高
如果定义块大小为20.
那么在使用到大块的数据内存就没办法调用内核函数.


是否有办法创建内存池的时候可以自己定义内存块大小和数目.
如:
大小为20的50块.
大小为100的10块
大小为1000的为2块.
.......

求高手指点下,最好能有源码.谢谢!

最新回复

我还不是很清楚你的修改需求。只要不是想搞成有多种不同大小的存储块,只是想静态的修改这个存储块大小和个数的话,应该只需要找找相关的参数宏,然后跟踪一下这些宏有没有什么特别的要求。UCOS2的定制能力要做到这点该不会是很难的吧。以上都是个人观点,未经考证。 UCOS2内存管理的内核代码我也没有仔细研究过,只是阅读过一些书籍,了解过它的外部特性,内存管理实现的思想也知道一些。具体的细节性问题不敢瞎说,只是依感觉,你找找相关的资料,说不定在那个config的配置文件中有的。代码上,你顺着malloc这个函数往底层找相关内存块大小的代码。 UCOS2确实用的人很多,一般的需求都是可以满足的,至少有些需求转个弯也还是可以满足的。实在不行,Missque提供的资料也可以参考一下,换个OS也可以趁机会扩展一下眼界和思路。希望能帮到你。  详情 回复 发表于 2013-4-3 19:29

点评

ucos不管是ucos-II还是ucos-III里面内存块大小都是一样的,正如2楼所说的。 自己改写ucos会很复杂,而且ucos本身架构设计的时候并没有设计成可变内存块 推荐你换一个操作系统,uTenux可以有可变内存池的功能,能实  详情 回复 发表于 2013-4-2 09:57
UCOS2支持的内存块大小都是一样大的,在编译时决定了块大小和个数。 因为没有MMU支持,不支持块大小的动态改变。 如果你在运行时需要各种不同大小的块的话,需要自己去改写UCOS2的源代码。  详情 回复 发表于 2013-4-1 09:15
点赞 关注
 

回复
举报

27

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
顶起....
 
 
 

回复

436

帖子

5

TA的资源

五彩晶圆(初级)

板凳
 
原帖由 further_away 于 2013-3-25 10:49 发表
uC/OS-II的内存管理中创建的内存块大小都是一样的大小.
如果都块大小是100.
而我们在申请内存的时候使用大小为20的情况加多,这样就会导致内存的使用效率不高
如果定义块大小为20.
那么在使用到大块的数据内存就没 ...


UCOS2支持的内存块大小都是一样大的,在编译时决定了块大小和个数。
因为没有MMU支持,不支持块大小的动态改变。

如果你在运行时需要各种不同大小的块的话,需要自己去改写UCOS2的源代码。

点评

恩,是在编译时候决定快大小和个数,也没打算动态修改内存块大小 高手,能否提供下着方面的源代码?  详情 回复 发表于 2013-4-3 10:44
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 楼主 further_away 的帖子

ucos不管是ucos-II还是ucos-III里面内存块大小都是一样的,正如2楼所说的。
自己改写ucos会很复杂,而且ucos本身架构设计的时候并没有设计成可变内存块
推荐你换一个操作系统,uTenux可以有可变内存池的功能,能实现你要效果

点评

为了内存池换一个系统,我觉得有点过了吧..  详情 回复 发表于 2013-4-3 10:46
 
 
 

回复

272

帖子

0

TA的资源

纯净的硅(初级)

5
 
学习了
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

6
 
原帖由 lr2131 于 2013-4-1 09:15 发表


UCOS2支持的内存块大小都是一样大的,在编译时决定了块大小和个数。
因为没有MMU支持,不支持块大小的动态改变。

如果你在运行时需要各种不同大小的块的话,需要自己去改写UCOS2的源代码。
恩,是在编译时候决定快大小和个数,也没打算动态修改内存块大小

高手,能否提供下着方面的源代码?
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

7
 
原帖由 Missque 于 2013-4-2 09:57 发表
ucos不管是ucos-II还是ucos-III里面内存块大小都是一样的,正如2楼所说的。
自己改写ucos会很复杂,而且ucos本身架构设计的时候并没有设计成可变内存块
推荐你换一个操作系统,uTenux可以有可变内存池的功能,能实 ...

为了内存池换一个系统,我觉得有点过了吧..

点评

我还不是很清楚你的修改需求。只要不是想搞成有多种不同大小的存储块,只是想静态的修改这个存储块大小和个数的话,应该只需要找找相关的参数宏,然后跟踪一下这些宏有没有什么特别的要求。UCOS2的定制能力要做到这  详情 回复 发表于 2013-4-3 19:29
我觉得不为过啊,选择操作系统做设计,首要看得就是他能否实现你需要的功能与性能指标。现在国内80%以上都用ucos,但是ucos的功能并不强。比如你说的内存块大小分配就无法实现,要求功能性能更加强的RTOS。学习一个  详情 回复 发表于 2013-4-3 11:43
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 7楼 further_away 的帖子

我觉得不为过啊,选择操作系统做设计,首要看得就是他能否实现你需要的功能与性能指标。现在国内80%以上都用ucos,但是ucos的功能并不强。比如你说的内存块大小分配就无法实现,要求功能性能更加强的RTOS。学习一个操作系统并不是很困难,很多都可以举一反三
 
 
 

回复

436

帖子

5

TA的资源

五彩晶圆(初级)

9
 

回复 7楼 further_away 的帖子

我还不是很清楚你的修改需求。只要不是想搞成有多种不同大小的存储块,只是想静态的修改这个存储块大小和个数的话,应该只需要找找相关的参数宏,然后跟踪一下这些宏有没有什么特别的要求。UCOS2的定制能力要做到这点该不会是很难的吧。以上都是个人观点,未经考证。

UCOS2内存管理的内核代码我也没有仔细研究过,只是阅读过一些书籍,了解过它的外部特性,内存管理实现的思想也知道一些。具体的细节性问题不敢瞎说,只是依感觉,你找找相关的资料,说不定在那个config的配置文件中有的。代码上,你顺着malloc这个函数往底层找相关内存块大小的代码。

UCOS2确实用的人很多,一般的需求都是可以满足的,至少有些需求转个弯也还是可以满足的。实在不行,Missque提供的资料也可以参考一下,换个OS也可以趁机会扩展一下眼界和思路。希望能帮到你。

点评

嗯,好的,谢谢。  详情 回复 发表于 2013-4-5 08:04
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

10
 

回复 9楼 lr2131 的帖子

嗯,好的,谢谢。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表