打印
[开发工具]

UCOS任务中定义的变量是全局还是局部变量

[复制链接]
2075|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaoxu19861116|  楼主 | 2017-7-20 18:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      各位大侠,UCOS任务中定义的变量是全局还是局部变量,如果是局部变量任务切换过程中其值会变成无效值吗, 还是说被保存起来了。
      还有就是定义变量是在什么时候进行的,是任务创建的时候吗
沙发
feelhyq| | 2017-7-20 19:25 | 只看该作者
本帖最后由 feelhyq 于 2017-7-20 20:23 编辑

局部变量,也不叫被保存起来了,因为每个任务都有自己的栈空间。比如说任务A定义了一个局部变量,那么这个局部变量会在内存A中,切换到任务B后,栈指针SP会被改变,指向任务B的栈空间,所以说就不会破坏任务A的栈空间啦。最主要是因为SP被人为改变的原因

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xiaoxu19861116 + 1 赞一个!
板凳
yiyigirl2014| | 2017-7-20 20:56 | 只看该作者
应该都是局部。

使用特权

评论回复
地板
xiaoxu19861116|  楼主 | 2017-7-20 21:19 | 只看该作者
feelhyq 发表于 2017-7-20 19:25
局部变量,也不叫被保存起来了,因为每个任务都有自己的栈空间。比如说任务A定义了一个局部变量,那么这个 ...

      谢谢feelhyq细心的回答我,还有一个问题就是如果我同时创建ABC三个任务,三个任务进入While(1)循环前的初始化部分是同时进行初始化吗?      
      还是谁先创建谁先初始化,比如A初始化完成之后,再进行B初始化工作,依次进行吗,
      或者是ABC三个任务中优先级最高的先初始化,初始化完成之后调用OStimeDly类似的函数退出任务执行其他次优先级的任务初始化过程吗
      对于每个任务的初始化部分什么时候进行,相互之间存在什么联系,有点不太清楚,还有就是不同任务中的局部变量如果变量名一样可以吗?

使用特权

评论回复
5
feelhyq| | 2017-7-21 09:43 | 只看该作者
xiaoxu19861116 发表于 2017-7-20 21:19
谢谢feelhyq细心的回答我,还有一个问题就是如果我同时创建ABC三个任务,三个任务进入While(1)循环 ...

任务的初始化在创建的时候就进行了,只是还没开始执行你说的while(1),你所有的任务创建完后,就相当于所有的任务都初始化完了。接下来就是准备调度执行了,首先会选取这些初始化完成后最高优先级的任务执行。

使用特权

评论回复
6
feelhyq| | 2017-7-21 09:46 | 只看该作者
xiaoxu19861116 发表于 2017-7-20 21:19
谢谢feelhyq细心的回答我,还有一个问题就是如果我同时创建ABC三个任务,三个任务进入While(1)循环 ...

当然  你也可以在你指的while(1) 中去创建一个新的任务,这都是没问题的。所以说不需要去担心谁先初始化,谁后初始化,只要你任务创建的“合理“”他就会执行,合理的因素比较多

使用特权

评论回复
7
feelhyq| | 2017-7-21 09:51 | 只看该作者
xiaoxu19861116 发表于 2017-7-20 21:19
谢谢feelhyq细心的回答我,还有一个问题就是如果我同时创建ABC三个任务,三个任务进入While(1)循环 ...

OStimeDly这个函数用在更多的地方是在线程Awhile(1)的线程里面,这个线程A需要过一会儿才做事情,调用OStimeDly后,这个线程会释放CPU,让比它低一点的优先级线程B去执行。如果线程A等待的时间到了,会在系统时间片(这个时间片就是系统每10ms产生的一次定时器中断)里面进行任务切换,切换到高优先级任务A去执行

使用特权

评论回复
8
Stannis| | 2017-7-21 17:03 | 只看该作者
任务创建完后,就相当于所有的任务都初始化完

使用特权

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

本版积分规则

7

主题

16

帖子

1

粉丝