打印
[uCOS/RTOS]

关于UCOS II任务堆栈的使用

[复制链接]
2309|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Miltonliu2010|  楼主 | 2013-10-28 14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 假设我给UCOS 的一个任务指定2K字节的堆栈,当运行任务时任务中使用的堆和栈都是在这个2KB空间中划分吗?
2. UCOS指定的堆栈是一个未初始化的数组,那么他应该分配在内存中的.bss段?
3. 在启动文件或者scf文件中指定的堆栈基址应该指向何处?

求大神解答!!!

相关帖子

沙发
JasonWangSE| | 2013-10-28 21:03 | 只看该作者
我也是刚开始研究uCOS,这几个问题也参与进来一起讨论一下吧。
1. 您指的任务中使用的堆是在什么情况下使用的呢?我刚开始看uCOS,但是还没有发现里面有实现了的malloc和free接口,是不是也就意味着这个操作系统没有对堆的管理做实现呢?如果要说它自己的内存管理OSMemXXX(),那应该是系统初始化的时候给OSMemCreate提供的地址就是堆吧。看书中给的例子也是通过全局数组创建内存池,应该也是在bss段中。所以我觉得这2K就是专门分给任务做桟用的。
2. 按书中的例子和任务创建的代码来看,任务的桟应该也是在bss段中了,如上,内存池也应该是在bss段中吧
3. 这个问题就不太了解了,您是移植到哪个平台上呢?是生成exe在Windows上跑DOS虚拟机吗?我的感觉是如果在一块开发板上跑uCOS,应该还需要一个bootloader,将单板起来之后通过运行uCOS的bin文件,或者加载uCOS的可执行镜像(比如elf)才能起这个操作系统,如果是这样的话,这些文件中应该是没有配置堆栈地址的地方的,只有链接文件中可以指定bss的地址。
求大神详解。。。

使用特权

评论回复
板凳
yyql008| | 2013-10-29 11:13 | 只看该作者

1. 假设我给UCOS 的一个任务指定2K字节的堆栈,当运行任务时任务中使用的堆和栈都是在这个2KB空间中划分吗?
2. UCOS指定的堆栈是一个未初始化的数组,那么他应该分配在内存中的.bss段?
3. 在启动文件或者scf文件中指定的堆栈基址应该指向何处?
--------------------------------------------------------
1栈用的是2k,堆还是用默认的
2 UCOS的栈就是全局变量数组.对编译器而言,这个数组并无特殊意义,和别的全局数组同等对待.
3 ...

使用特权

评论回复
地板
airwill| | 2013-10-29 12:05 | 只看该作者
研究这么一大通内存分配问题, 其实你打开编译生成的 .map 文件看一下就知道了

使用特权

评论回复
5
Miltonliu2010|  楼主 | 2013-10-29 17:25 | 只看该作者
airwill 发表于 2013-10-29 12:05
研究这么一大通内存分配问题, 其实你打开编译生成的 .map 文件看一下就知道了 ...

就是看了才这么问的。

使用特权

评论回复
6
NWPU_CHEN| | 2014-1-10 16:42 | 只看该作者
Miltonliu2010 发表于 2013-10-29 17:25
就是看了才这么问的。

栈肯定是在定义的这2K中,你定义了2K,没用动态分配,只要2K够用,任务执行时候当然在你这2K中分配一个连续的默认大小内存。数组没有什么特殊,内存应该是.stack段。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

87

帖子

3

粉丝