野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7076|回复: 12

[ucos] uCOS任务切换 任务堆栈问题

[复制链接]
发表于 2015-10-12 15:32:20 | 显示全部楼层 |阅读模式
1、任务堆栈是用定义全局变量数组的方式给出
2、全局变量存储在静态存储区,不在堆栈中
3、任务切换时SP指向要执行任务的任务堆栈
问题:sp会指向静态存储区?任务堆栈和通常所说的堆栈是一样的吗?
回复

使用道具 举报

 楼主| 发表于 2015-10-13 08:17:07 | 显示全部楼层
各位大神帮帮忙啊!
回复 支持 反对

使用道具 举报

发表于 2015-10-13 08:39:38 | 显示全部楼层
本帖最后由 野草 于 2015-10-13 08:57 编辑
Dream_Chaser 发表于 2015-10-13 08:17
各位大神帮帮忙啊!

SP可以指向静态存储区。任务堆栈和通常的堆栈工作原理是一样的,都是后进先出,有利于还原数据。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-13 09:01:42 | 显示全部楼层
野草 发表于 2015-10-13 08:39
任务切换时会将任务堆栈的数据装载到cpu堆栈

任务切换时会将任务堆栈的数据弹出到CPU寄存器,那么CPU寄存器SP指向任务堆栈?还是说任务堆栈只是临时存储CPU寄存器的内容,任务运行时还有另外的堆栈?
回复 支持 反对

使用道具 举报

发表于 2015-10-13 09:11:30 | 显示全部楼层
Dream_Chaser 发表于 2015-10-13 09:01
任务切换时会将任务堆栈的数据弹出到CPU寄存器,那么CPU寄存器SP指向任务堆栈?还是说任务堆栈只是临时存 ...

每个任务都有自己的堆栈SP,这个SP不共用。所有任务堆栈存的都是CPU的一样的寄存器。每个任务都有自己的堆栈。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-13 09:57:42 | 显示全部楼层
野草 发表于 2015-10-13 09:11
每个任务都有自己的堆栈SP,这个SP不共用。所有任务堆栈存的都是CPU的一样的寄存器。每个任务都有自己的 ...

你的意思是说任务堆栈就是复制CPU寄存器中的内容?它跟任务运行时存放局部变量的堆栈不一样?那么在创建任务时用OS_STK TASK_STK[STK_SIZE];创建的任务堆栈大小是不是一样就行了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-13 09:59:09 | 显示全部楼层
野草 发表于 2015-10-13 09:11
每个任务都有自己的堆栈SP,这个SP不共用。所有任务堆栈存的都是CPU的一样的寄存器。每个任务都有自己的 ...

谢谢你的耐心,我很想搞明白这一点,多谢了!!
回复 支持 反对

使用道具 举报

发表于 2015-10-13 15:41:51 | 显示全部楼层
本帖最后由 野草 于 2015-10-13 15:43 编辑
Dream_Chaser 发表于 2015-10-13 09:57
你的意思是说任务堆栈就是复制CPU寄存器中的内容?它跟任务运行时存放局部变量的堆栈不一样?那么在创建 ...

不是的,除了CPU寄存器外,任务堆栈也要存放局部变量,这就导致了堆栈大小不同。任务堆栈的作用跟裸机时的堆栈的作用是一样,就是中断时要保护现场。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-13 16:01:47 | 显示全部楼层
野草 发表于 2015-10-13 15:41
不是的,除了CPU寄存器外,任务堆栈也要存放局部变量,这就导致了堆栈大小不同。任务堆栈的作用跟裸机时 ...

任务堆栈跟启动文件初始化的堆栈又有什么区别?他们是不是一个在静态区一个在堆栈区?既然有任务堆栈那么初始化的堆栈还有没有作用?
回复 支持 反对

使用道具 举报

发表于 2015-10-13 18:05:06 | 显示全部楼层
Dream_Chaser 发表于 2015-10-13 16:01
任务堆栈跟启动文件初始化的堆栈又有什么区别?他们是不是一个在静态区一个在堆栈区?既然有任务堆栈那么 ...

有,只要主函数存在,它就有用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-13 20:12:27 | 显示全部楼层
野草 发表于 2015-10-13 18:05
有,只要主函数存在,它就有用。

任务堆栈和通常所说的堆栈不同且同时存在,它们分别在内存的静态区和堆栈区,运行任务时sp指向的是静态区,我这样理解对吗?
回复 支持 反对

使用道具 举报

发表于 2015-10-14 08:41:40 | 显示全部楼层
Dream_Chaser 发表于 2015-10-13 20:12
任务堆栈和通常所说的堆栈不同且同时存在,它们分别在内存的静态区和堆栈区,运行任务时sp指向的是静态区 ...

回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-14 08:51:01 | 显示全部楼层

多谢!!!多谢!!!!!!!!!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-12-4 01:27 , Processed in 0.034461 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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