重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
小编给大家分享一下vxworks中如何控制任务,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
在阿克苏等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站制作、成都网站建设、外贸营销网站建设 网站设计制作按需网站设计,公司网站建设,企业网站建设,品牌网站制作,营销型网站建设,外贸营销网站建设,阿克苏网站建设费用合理。
任务被taskSpawn()创建或taskActivate()激活后,直接进入Ready队列。但实际运行时,任务大部分时间处于其它状态,并不是Ready态,不然CPU的占用率就很高了,功耗也就上去了,那肯定是软件架构的设计出问题了。
VxWorks的taskLib库里关于控制任务状态的一些函数
taskSuspend()是将任务放到Suspend队列,taskResume()是将任务放到Ready队列,这两个API通常只是在调试时才会使用。taskSuspend(0)就是挂起任务本身,就像我们在《Task之常见系统任务》里观察tRootTask时所作的。不过taskResume(0)就是无效操作了,想想为啥?
taskRestart()的主要作用是重启发生严重错误的任务。既然它只有一个参数,说明重启的任务使用的是原有的属性,包括ID、优先级、选项、入口地址、栈尺寸。其中优先级和选项可能被动态改变过,那就使用最新的值。
taskDelay()通常用在轮询操作之中,它会让当前任务进入Delay队列,期限到时之后,再返回Ready队列中同优先级任务的尾部。其参数单位是tick,也就是系统时钟的频率。例如delay两秒,通常这样写:
sysClkRateGet()的作用就是返回系统时钟每秒钟的tick数。每个VxWorks版本的系统时钟频率默认都是60,但taskDelay(120),不一定是Delay两秒。因为可以通过sysClkRateSet()修改时钟频率
要注意的是,每个tick到来时,都会触发系统时钟中断,所以不建议把系统时钟频率设置得太快,否则会降低系统性能。
taskDelay()的参数是整型值,所以使用时要注意整除的问题。例如,使用默认的系统时钟频率时,就不可能精确延时1/7秒。
sysClkRateGet()/7 = 60/7 = 8,8个tick,只是8/60秒了。
当taskDelay()的参数为0时,任务并不会进入Delay状态,而是直接把CPU让给同优先级的任务(如果有的话),自己排到同优先级任务的尾部,这就相当于Linux系统的sched_yield()操作。
我们在《Task之任务的创建》里提到过,使用taskPriorityGet()/taskPrioritySet(),可以查询/调整任务的优先级。另外还有几个API可以查询任务的状态信息
从名字就可以看出来taskInfoGet()最为强大,它可以获得TCB里的大部分信息
以上是“vxworks中如何控制任务”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!