VxWorks任务控制API
来源:互联网 发布:创意文字设计软件 编辑:程序博客网 时间:2024/05/30 02:25
VxWorks中与任务控制有关的API有两个:taskSpawn()和taskInit()。前者将创建的任务置于就绪状态,可以直接运行。后者将创建的任务置于休眠状态,需要使用taskActivate将其激活以后才能转为就绪状态。两个API的原型为:
int taskSpawn ( char *name, /*新任务的名称*/ int priority, /*新任务的优先级*/ int options, /*任务选项*/ int stackSize, /*任务堆栈字节数*/ FUNCPTR entryPt, /*任务函数的入口*/ int arg1, int arg2, int arg3, /*任务函数的十个参数*/ int arg4, int arg5, int arg6, int arg7,int arg8, int arg9, int arg10);
STATUS taskInit ( WIND_TCB *pTcb, /*新任务的TCB地址*/ char *name, /*新任务的名称*/ int priority, /*新任务的优先级*/ int options, /*任务选项*/ char *pStackBase, /*任务堆栈基地址*/ int stackSize, /*任务堆栈字节数*/ FUNCPTR entryPt, /*任务函数的入口*/ int arg1, int arg2, int arg3, /*任务函数的十个参数*/ int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10);使用taskInit生成的任务必须经过taskActivate才能运行,taskActivate的声明如下:
STATUS taskActivate (int tid);这里的tid指任务ID。对于由taskInit生成的任务来讲,pTcb的地址就是其对应的任务ID。也就是说,任务的ID指向了任务控制块。
删除任务的API:taskDelete和taskDeleteForce。声明如下:
STATUS taskDelete (int tid); STATUS taskDeleteForce (int tid);区别就是,taskDeleteForce可以删除那些出于保护中的任务,即使某个任务使用taskSafe也可以被该函数删除。然而,这样的删除可能会使任务所保护的资源不能正确地释放。因此,最好的方式还是等待被删除任务用taskUnsafe解除保护之后,在使用taskDelete删除任务。
这里讲到的taskSafe和taskUnsafe是任务在访问资源时用来保护自身的手段,用于资源保护。两者必须一一对应,每一个taskSafe都会使任务的保护计数器加1,只有调用相同次数的taskUnsafe才会使保护计数器处于0的状态。删除保护计数器处于非0状态的任务时,调用删除函数的任务将会被阻塞,直到被删除任务处于非保护状态时才可以继续执行删除动作。
控制任务状态切换的API:
STATUS taskDelay (int ticks);该函数可以将任务由执行态转换为延迟态,延迟时间由ticks决定。通常是为了让出CPU资源,或者等待一个固定的时间。一般情况下,使用sysClkRateGet配合taskDelay以延迟真实时间长度。sysClkRateGet获取系统中1秒所对应的时间片个数,例如,使任务延迟半秒:taskDelay(sysClkRateGet () >>1);
taskLock和taskUnlock是一对阻止任务被调度的函数,同样用于保护关键区域,属于任务保护。两者也需要一一对应来使用。
taskSuspend和taskResume分别将任务挂起和恢复,都是用任务ID为参数。如果任务ID为0,taskSuspend会将调用它的函数挂起。
taskPrioritySet用于改变任务的优先级,声明为:
STATUS taskPrioritySet (int tid, int newPriority);
- VxWorks任务控制API
- VxWorks 任务
- VxWorks 任务
- VxWorks 任务
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(2) ――任务控制
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(2) ――任务控制
- VxWorks系统任务
- [转帖]VxWorks任务调度
- VxWorks异常任务检测
- vxworks任务调度
- vxWorks任务异常
- VxWorks的系统任务
- VxWorks任务钩子示例
- VxWorks的任务状态
- vxworks任务异常处理
- vxWorks多任务编程
- vxworks任务间通信
- Vxworks系统学习----任务
- git for c#,文件更名
- 《深入理解linux内核》学习笔记2 --- 图解外部中断处理过程
- Java代码在Window或Linux系统下使用通用分割符来分割路径
- 以毙览是钠是揪趁闷藏让春
- 判断一个表达式是否正确
- VxWorks任务控制API
- LAMP 搭建
- 机器学习的一些很好的博客
- 一个40岁程序员的经历
- Qt 内存管理与布局管理器
- Java中的数据存储(堆、栈、常量池),不敢独享
- 总结OC中数组排序3种方法
- NYOJ202 红黑树 【中序遍历】
- 博弈论(比较全的)【转】