前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Task之系统任务

Task之系统任务

作者头像
Taishan3721
发布2019-07-10 15:25:09
9850
发布2019-07-10 15:25:09
举报
文章被收录于专栏:这里只有VxWorks这里只有VxWorks

根据配置的不同,VxWorks系统在启动时,会同步启动一些系统任务,其中有的任务在完成自己的工作后就会退出,而有的会一直运行下去。常见的系统任务如下:

任务名称:tRootTask

优先级:0

栈尺寸:ROOT_STACK_SIZE,具体数值与CPU架构有关,详见configAll.h

触发条件:系统启动

组件:无

描述:这是内核启动的第一个任务,随后它会启动其它系统任务。任务入口是函数usrRoot(),在这个函数里初始化了系统的大部分功能。通常情况下,在初始化完其它功能后,这个任务就自己退出了。为了查看它,我们在这个任务的最后位置添加一个taskSuspend(),把它挂起来

注意:实际产品里不要挂起、删除,或调整这些系统任务的优先级。否则会导致系统行为不可预测

任务名称:tLogTask

优先级:0

栈尺寸:5000

触发条件:中断或任务里调用logMsg()

组件:INCLUDE_LOGGING

描述:用于记录系统信息,不使用当前任务的IO

最多排队消息数量:MAX_LOG_MSGS,默认值50

格式化参数数量:6

任务名称:tExcTask

优先级:0

栈尺寸:EXC_TASK_STACKSIZE,默认值8192

触发条件:中断里调用excJobAdd()

组件:INCLUDE_EXC_TASK

描述:这个任务用于执行中断里不方便执行的工作,因此必须使用最高优先级。可以在这个任务上排队的工作的最多为MAX_ISR_JOBS,取值必须为2的幂,默认值为16。如果中断里需要排队的工作超过这个限制,就会有溢出警告"messages from interrupt levellost"

任务名称:tJobTask

优先级:启动时为0,根据执行的工作而动态调整

栈尺寸:JOB_TASK_STACK_SIZE,默认8000

触发条件:其它任务提交工作

组件:INCLUDE_JOB_TASK

描述:这个任务用于执行其它任务提交的工作。它使用优先级0等待工作,在执行工作时,动态调整为提交工作的任务的优先级。主要作用之一是处理任务的自我删除

任务名称:tIsrN

优先级:0

栈尺寸:8192

触发条件:设备中断调用isrDeferJobAdd()

组件:INCLUDE_ISR_DEFER

描述:这个(组)任务用于执行设备驱动通过isrDeferJobAdd()提交的工作。名称中的字母N表示这个任务所使用的CPU的序号,在单核环境里,那就只有tIsr0了。这组任务创建时,每个都绑定到相应序号的CPU上。多核模式的设备驱动将需要推迟的工作绑定到当前的CPU上,用于避免跨CPU调度

任务名称:tNet0

优先级:NET_TASK_PRIORITY,默认值50

栈尺寸:NET_TASK_STACKSIZE,默认值10000

触发条件:数据包到达,传输完成,网络协议里的定时器到时,socket应用的请求,等等

组件:INCLUDE_NET_DEAMON

描述:这是网络驱动和网络协议的守护线程

任务名称:tWdbTask

优先级:WDB_TASK_PRIORITY,默认值3

栈尺寸:WDB_STACK_SIZE,默认值0x2000

触发条件:无

组件:INCLUDE_WDB

描述:WDB的target agent程序,用于处理host tool通过target server发送的请求

任务名称:tShellN

优先级:SHELL_TASK_PRIORITY,默认值1

栈尺寸:SHELL_STACK_SIZE,默认值0x10000

触发条件:系统启动

组件:INCLUDE_SHELL

描述:kernel shell以任务形式存在的,可以同时启动多个,不同的shell使用不同的序号N为名称后缀,名称”tShell”是通过SHELL_TASK_NAME_BASE定义的。在shell里再调用的函数会使用这个shell的上下文。

任务名称:ipcom_telnetd

优先级:50

栈尺寸:6144

触发条件:新的Telnet连接

组件:INCLUDE_IPTELNETS

描述:这个守护线程允许远程用户通过Telnet登陆VxWorks的kernel shell。它会为每个Telnet连接启动一组任务,包括ipcom_telnetspawn,tStdioProxyhexNum,tLoginhexNum,tShellRemdecNum

等介绍了任务调度之后,我们就会发现这些系统任务的优先级都是比较高的,我们自己应用程序的优先级尽量要低一些。

等介绍了VxWorks系统的启动流程后,我们就会知道嵌入式硬件上电后,先是执行汇编语言的初始化程序,然后跳转到C语言的程序,然后启动第一个任务tRootTask,然后逐步加载其它系统任务。

这些高优先级的系统任务通常都是处于Pend状态,只有外界(应用程序或外设)需要它们时,它们才会提供相应的功能。它们整体对外的表现就是一个提供了很多功能的强大的实时操作系统。

套用老子《道德经》中的思想,这正是:

(第四十二章)道生一,一生二,二生三,三生万物。

(第二十五章)人法地,地法天,天法道,道法自然。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这里只有VxWorks 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档