VxWorks系统里如何创建任务
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,这篇文章主要介绍VxWorks系统里如何创建任务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!VxWorks系统里如何创建任务。常用的函数是taskSpawn(),32位系统里
千家信息网最后更新 2025年02月22日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安全错误
数据库的锁怎样保障安全
浙江通信网络技术服务价格
织梦初始化数据库
校园网络安全检查总结报告
h1z1选什么服务器
怀旧服如何重新连接服务器
链接到服务器时出现问题
浪潮服务器raid5
网络技术原理与应用
联想服务器管理口ip进不去
数据库为什么会有空表
唐山软件开发王冲
数据库中怎么计算学分总和
无法访问服务器倩女幽魂
南京苏宁易购软件开发师
asp数据库连接文件
璧山网络安全中心奇安信
中心化网络技术
沧州疫情数据库
新乡市国家网络安全宣传
湖北中学生网络安全教育视频
西城区网络技术咨询热线
儿童软件开发培训
刀云免流服务器下载
软件开发成功后怎么做账
上海通讯网络技术供应
摩尔庄园和塞尔号连接不到服务器
计算机网络安全的相关对策有哪些
数据库软件的步骤
赛季服那个服务器预约人多
小手拉大手网络安全教育美篇