4825|10

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

keil+uC/OS,是如何实现在任务的堆栈中操作局部变量的? [复制链接]

keil+uC/OS,是如何实现在任务的堆栈中操作局部变量的?
比如在程序中建立了一个任务TASK1,任务中定义了几个局部变量a,b,c,
在任务建立的时候,分配的堆栈是arrStask[500]。
那么程序执行到TASK1的时候,是如何保证把几个局部变量分配到对应的堆栈中的呢?
一直想不明白。
应该对于其他的OS和编译器,原理也差不多吧。
还希望能给个比较通俗的解释。

最新回复

正确  详情 回复 发表于 2010-2-2 13:42
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这个是编译器整的吧
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
局部变量在栈中的分配,其实就是在栈中保留位置,并通过栈指针进行访问.
至于在使用uC/OS-II那样的环境下,你只要在任务初始化的时候配置好它的栈,局部变量自然会分配到那个任务的栈中.
 
 
 

回复

48

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 great_bug 的回复:
局部变量在栈中的分配,其实就是在栈中保留位置,并通过栈指针进行访问.
至于在使用uC/OS-II那样的环境下,你只要在任务初始化的时候配置好它的栈,局部变量自然会分配到那个任务的栈中.


正解!
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
在keil下,因为条件比较一致,有时局部变量始终处于同一位置。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
如果是C51,其实局部变量总是处于同一位置,而且它不是在栈里面分配的.
但LZ说的显然不是51--"arrStask[500]",可能是ARM或其它的MCU
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(高级)

7
 
keil编译器有模拟堆栈,一般来说,keil局部变量放在模拟堆栈或者R0~R7!
(局部变量的内存和寄存器分配可以参考keil用户手册)
ucos任务堆栈只在任务切换的时候把R0~R7和模拟堆栈的内容复制到任务堆栈上,
当任务在切换回来的时候在把R0~R7和模拟堆栈的内容回复就可以了!
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(中级)

8
 
引用 6 楼 xingjidazhan 的回复:
keil编译器有模拟堆栈,一般来说,keil局部变量放在模拟堆栈或者R0~R7!
(局部变量的内存和寄存器分配可以参考keil用户手册)
ucos任务堆栈只在任务切换的时候把R0~R7和模拟堆栈的内容复制到任务堆栈上,
当任务在切换回来的时候在把R0~R7和模拟堆栈的内容回复就可以了!

支持,正解
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

9
 
  学习了,高手!
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

10
 
首先开一段空间,如一个数组,这样就会产生一段被编译器保护起来的空间,作堆栈用,然后在TASK1运行前,将SP指那该空间的首地址,这样,以后申明的变量就会产生在这段被保护且空白的堆栈里了。

以后在任务切换时,再换到其它任务对应的堆栈。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 9 楼 lyj2009 的回复:
首先开一段空间,如一个数组,这样就会产生一段被编译器保护起来的空间,作堆栈用,然后在TASK1运行前,将SP指那该空间的首地址,这样,以后申明的变量就会产生在这段被保护且空白的堆栈里了。

以后在任务切换时,再换到其它任务对应的堆栈。


正确
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表