打印

问一个关于uc/os堆栈使用的基础问题

[复制链接]
1420|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
feifan570|  楼主 | 2008-1-15 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用uc/os的任务生成函数OSTaskCreate()生成一个任务时,它会给这个任务传递一个地址(一般是一个数组的地址)作为此任务的“堆栈”。其实这个“堆栈”是不是应该理解成“栈”?因为它是SP的值,保存着任务切换时的上下文和函数调用的PC返回地址。
现在假设生成了两个任务:
void task1(void *pdata)
{
    int data1[100];
    while(1)
    {
     ...
    }
}
void task2(void *pdata)
{
    int data2[100];
    while(1)
    {
     ...
    }
}
现在我想问一下:这两个任务的局部变量data1,data2是保存在那里,是各自任务的“堆栈”里面(也就是任务生成是传递的“堆栈”)吗?如果是这样好像有点问题:有些编译器是可以随时生成局部变量的,或者使用malloc()申请内存,会不会把这个“堆栈”给搞乱了?

表达得不是很清楚,希望得到大家可以看懂并回答!

相关帖子

沙发
feifan570|  楼主 | 2008-1-15 19:26 | 只看该作者

刚发完才发现论坛里早已经有了答案

看到了“编译器对作为局部变量的数组是怎么管理的?放在堆栈中”贴,特别是DB10大侠的精彩回帖,发现自己问得很多余。

使用特权

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

本版积分规则

92

主题

195

帖子

1

粉丝