UCOS局部变量任务切换时的保存问题

假设有A1,到A30个变量,这30个变量都是有用的,但是这30个变量都是局部变量,比如有式子MAX=A1+A2+...+A30;我看了下堆栈跟寄存器,他不是基本上只保存R... 假设有A1,到A30个变量,这30个变量都是有用的,但是这30个变量都是局部变量, 比如有式子MAX=A1+A2+...+A30; 我看了下堆栈跟寄存器,他不是基本上只保存R0到R15跟CPRS等,他翻译成汇编后肯定是先把两个相加得到结果再去跟第三个相加, 然后比如我现在切换任务了,那切换后回来,后面这些A的数值字还在吗? 如果还在,那他是通过哪一步保存的,帮忙说些嘛,谢谢啦
问题提问结束,是我对软硬件不够了解造成的 ,我以为这是硬件干的,呵呵,结果是软件干的,软件在进入一个程序时,会先申请对应变量空间,同时SP指针移动,然后任务切换时,这个空间并不释放
展开
 我来答
星蝶偶成阁
推荐于2016-01-04 · 嵌入式开发路上的偶成
星蝶偶成阁
采纳数:166 获赞数:1138

向TA提问 私信TA
展开全部
加法运算应当也是在任务中或者在中断中,任务切换当然是执行完成后再切换,加法在切换前就执行了。如果是中断,会有进入中断的标志给OS,加法也就是在中断中执行完了。所以没必要保存A的数值,因为不可能在加法进行过程中进行任务切换。
更多追问追答
追问
程序转换为汇编的话(示意性)应该是
MAX=A1+A2;
MAX+=A3,
MAX+=A4;
....

等等这样的啊,假设,在第二步,中断来了,那不是后面的都没处理吗?
追答
第一,如果在任务中响应另一个任务,任务执行后才执行下一个优先级的任务,或用堆栈响应优先级的任务,数值不会有变化。
第二,如果在任务或中断中响应一个中断,进入中断时会保存当前的寄存器,退出后再继续执行加法,对数值不会有影响
goehome
2018-09-08
知道答主
回答量:7
采纳率:0%
帮助的人:7098
展开全部
我看了汇编部分的,我的理解如下:
1)对于导入寄存器部分的,特别是通用寄存器部分的。这一部分直接入栈就可以了,是数据断点。
2) 对于局部变量非常大,比如128个,这样通用寄存器不够,肯定要涉及到RAM区的数据,我没有找到解决的源码。如果能解决,估计是编译过程的临界问题。不释放内存空间。
你找到源码了,我们可以一起讨论。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
宁静致远见卓识
2015-04-24 · TA获得超过149个赞
知道小有建树答主
回答量:367
采纳率:0%
帮助的人:145万
展开全部
临时变量是保存在任务堆栈中的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
苏6浪跡人物
2018-01-26
知道答主
回答量:2
采纳率:0%
帮助的人:2220
展开全部
以下均为个人想法,如有异议还请不吝赐教:
系统中存在任务A和任务B,假设系统在运行任务A。
任务A的C函数中的局部变量要么被优化成寄存器,要么直接在任务堆栈中被分配;
第一种情况:局部变量被优化成寄存器。那么在任务切换时(A-->B),寄存器会被入栈,也就是说A的局部变量被保存至任务堆栈中去了。
第二种情况:直接在任务堆栈中分配,那么任务切换时(A-->B),局部变量仍然存在于当前任务的堆栈中。
因此无论是哪种情况A的局部变量的值都会存在于A的堆栈中,数据不会丢失。当然如果堆栈空间不够存储这么多的局部变量的话,程序应该会跑飞,无法正常执行的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陈小花鸭
2014-01-10
知道答主
回答量:71
采纳率:0%
帮助的人:22.7万
展开全部
这个问题有难度
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式