VxWorks系统里如何创建任务
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要介绍VxWorks系统里如何创建任务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!VxWorks系统里如何创建任务。常用的函数是taskSpawn(),32位系统里
千家信息网最后更新 2025年01月18日VxWorks系统里如何创建任务常用的函数是taskSpawn(),32位系统里(以下同)函数原型如下: Task可以看作是Stack和TCB组成的。因此taskSpawn()的第一步就是为Stack和TCB分配内存,然后初始化它们,最后将这个任务放入Ready队列。 任务的名字,主要只是开发者在Shell中调试时才使用它。名字中的字符和长度没有什么限制,甚至可以直接使用NULL,那么系统会自动给它分配为tN,N是从1开始递增的十进制数。甚至不同任务的名字可以是相同的,所以通过名字来管理任务的话,要注意一下。而操作系统或应用程序在管理任务时,通常使用的是它们的ID。名字和ID可以通过这两个函数互相转换 任务的优先级,VxWorks调度任务时就是基于它。优先级的取值范围是0-255,可以动态改变或查询 注意:多个任务间,优先级的高低是相对的。假如系统里只有两个任务A和B,优先级分别是1和10,或者分别是1和100,这两种情况下的调度是一模一样的。都是高优先级的会抢占,必须等它退出Ready队列,低优先级的才有可能占用CPU。不像有的操作系统采用分时调度,优先级的高低会影响时间片的长短。 任务选项,以Bit为单位,每个版本的选项不尽相同,因此代码中尽量使用选项的宏定义,而不要使用对应的数值。例如6.9里可用的选项如下。 任务的栈,单位是Byte,从系统内存池分配。一经分配,尺寸就固定不变了。如果分配的数值过大,就会增加一点点初始化时间,并浪费部分内存空间,影响倒是不大;而分配的过小,就有栈溢出的风险,这可是致命的了。因此,开发过程中,要评估一下具体的数值。那如何才能知道分配的是否合适呢?可以在Shell里使用checkStack()来检查。 任务主函数的入口地址,最多可以包含10个int型参数,arg1- arg10。 taskSpawn()的返回值就是Kernel分配给任务的ID,它是一个32Bit的数值,是全局唯一的。不过任务退出后,这个ID值是可以再次分配给其它任务的,也就是可以重复使用的。任务可以通过taskIdSelf()查询自己的ID,通过taskIdVerify()验证某任务是否存在,通过taskIdListGet()获取当前的任务列表。taskLib中很多API使用task ID为参数,这个参数取值为 0 的话,一般就是表示当前任务自己了。 另外,创建任务还可以使用taskCreate(),它只是初始化任务,需要taskActivate()把它放到Ready队列。 这样分成两步做的好处就是可以在整个系统初始化时就把任务也初始化好,需要使用的时候,再进行激活,相当于减少了激活时间。其实 taskSpawn() 就是它俩的合成 taskSpawn() 中初始化 Stack 和 TCB 的操作就是在 taskCreate() 中完成的,下图是很多年前的一段 Benchmark 数据 可以看到在当时的软硬件 (Pentium3) 配置下, Kernel 操作的耗时一般都是微秒级的,但是 taskSpawn() 比其它函数要慢很多。因此,当项目的实时性需求非常高时,可以考虑使用 taskCreate() 和 taskActivate() 的组合。 还有一个POSIX风格的API可以用来创建任务或者获得任务句柄,taskOpen()。这个函数多数是在支持进程时使用,因为它可以把任务创建为公共对象,以便于多进程与Kernel间相互访问。我们在介绍RTP通信时,再详细介绍它
这篇文章主要介绍VxWorks系统里如何创建任务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
VxWorks系统里如何创建任务。
这个函数的参数比较多,我们挨个看一下
name
priority
那在我们自己的应用程序里,优先级设置为多少合适呢?很多人习惯于将内核任务设置为100,用户态任务的稍低一些,150或200,这个并没有什么限制,只要平衡好多个应用任务之间的关系即可。不过建议应用任务的优先级不要高于系统任务的。例如,在《Task之常见系统任务》里,我们提到过WDB任务的优先级默认为3,所以我们应用任务尽量不要高于4,否则可能会影响到调试了。
options
lVX_FP_TASK - 使用浮点协处理器,否则含有浮点操作的任务在切换时不会保存浮点寄存器的值,导致浮点异常。特例是C++语句被编译后,会产生浮点指令,因此任务中调用C++语句时,就一定要使能这个选项
lVX_NO_STACK_FILL - 不填充Stack
lVX_NO_STACK_PROTECT - 不提供Stack的上溢和下溢保护
lVX_ALTIVEC_TASK - 使用Altivec指令集(仅PowerPC)
lVX_SPE_TASK - 使用SPE引擎(仅PowerPC)
lVX_DSP_TASK - 使用DSP(仅SuperH )
lVX_PRIVATE_ENV - 支持私有环境变量(6.9中实际已取消,仅是为了兼容)
stackSize
entryPt
返回值
以上是"VxWorks系统里如何创建任务"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
任务
系统
优先级
分配
函数
就是
名字
浮点
应用
参数
数值
内存
时间
队列
影响
调度
合适
相同
操作系统
两个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
北京超大规模服务器虚拟化报价
数据库表格设置字母排序
网络安全产业发展方面
数据库中心管理
点线面网络技术有限公司
软件开发中模块
数据库日期取月日
建立www服务器
网站里如何建立数据库
网络安全兴趣小组相关制度
ps4辐射4女捏脸数据库
网络安全性开放是啥意思
邯郸市尔文网络技术服务有限公司
360网络安全验证如何取消
关系型数据库所使用的标准语言是
网络安全责任制实施办法大学生
如何改变数据库字符集
无锡进口服务器生产商
做服务器需要多少电脑
服务器管理权限帐号
大学网络技术协会
河南现代软件开发制造价格
歌莉娅软件开发
触摸屏软件开发用什么
与网络安全视频
网络技术岗位工资
中职计算机网络技术专业建设
惠州金融软件开发市场价
数据库导数据到hdfs的命令
poklng服务器