对于VxWorks 的任务创建可以通过调用 taskSpawn()或是taskInit()/taskActivate()两种方式,以下就对这两种方式进行说明。

taskSpawn() 实现任务的创建分为两步:1、分配任务栈的空间,初始化WIND_TCB; 2、激活任务。taskSpawn()函数的定义,

int  taskSpawn (char *name,              /*任务名称必须惟一的标示*/

                          int priority,                /*任务优先级(0-255)越小标示优先级越高*/

                          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)

函数调用成功时,返回新任务的ID,或者返回ERROR。

参数options任务选项,可以是以下的标志组合:

VX_FP_TASK:标志浮点寄存器是否属于上下文,若函数中使用了浮点数,应带上此标记。

VX_PRIVATE_ENV:支持任务私有环境变量。

VX_NO_STACK_FILL:不进行初始任务栈的填充。

VX_UNBREAKABLE:任务不允许断点调试(忽略断点)。

VX_DSP_TASK:DSP 协处理器支持。

VX_ALTIVEC_TASK:ALTIVEC 协处理器支持。

参数int型的10个,主要传入入口函数的参数,若不足10个,后面剩余的设为0。

taskInit()实现创建任务,必须由taskActivate()来激活。以下就对这两个函数进行分解:

STATUS taskInit (WIND_TCB* Ptcb,     /*任务控制块WIND_TCB地址*/

                          char* name,             /*任务名称必须惟一的标示*/

                          int priority,               /*任务优先级(0-255)越小标示优先级越高*/

                          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)

与taskSpawn() 相比多了两个参数WIND_TCB*和char* pStackBase,任务控制块参数由调用者分配空间,并由其释放;而任务栈也也是由调试者分配与释放,特别留意的是任务栈的起始地址有两种可能,地段地址或高端地址,具体由BSP而定。

STATUS taskActivate (int tid) /*tid = (int )pTcb;*/

参数tid是表示惟一的任务ID。

其实 taskSpawn() 内部调用taskInit()/taskActivate()来完成的。或者提供了更为细致的任务控制而已。而这两种的创建任务的差别:

1、taskSpawn()自动在系统堆上分配任务栈空间,并在任务栈上创建TCB;而taskInit()由调用者分配与释放的,TCB不属于任务栈的空间。

2、taskSpawn()生成任务后进入就绪队列;而taskInit()生成任务后处于挂起状态,不能被直接调用,直到taskActivate()激活。

VxWorks关于任务创建的几个函数的概述相关推荐

  1. 如何在sqlite3连接中创建并调用自定义函数

    #!/user/bin/env python # @Time :2018/6/8 14:44 # @Author :PGIDYSQ #@File :CreateFunTest.py '''如何在sql ...

  2. 创建一个Scalar-valued Function函数来实现LastIndexOf

    昨天有帮助网友解决的个字符串截取的问题,<截取字符串中最后一个中文词语(MS SQL)>http://www.cnblogs.com/insus/p/7883606.html 虽然实现了, ...

  3. Python自定义函数的创建、调用和函数的参数详解

    这篇文章主要介绍了Python自定义函数的创建.调用和函数的参数.变量作用域等常见问题,需要的朋友可以参考下 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性 ...

  4. windows系统中创建线程常用哪几个函数,有什么区别?

    windows系统中创建线程常用哪几个函数? 在windows系统中创建线程的函数有: CreadThread,AfxBeginThread,_beginthread,_beginthreadex. ...

  5. MYSQL中如何创建存储过程和存储函数(上篇)

    存储程序分为存储过程和存储函数.在MySQL中创建存储过程和存储函数的语句分别是create procedure 和create function.使用call语句来调用存储过程,只能用输出变量返回值 ...

  6. 创建线程:pthread_creat() 函数介绍

    创建线程:pthread_creat() 函数介绍 语法 : int pthread_creat(pthread_t *thread,const pthread_attr_t *attr,void * ...

  7. oracle创建索引index,【学习笔记】Oracle索引 创建含sysdate的函数index案例

    天萃荷净 分享一篇运维DBA需求,创建含sysdate的函数index案例 1.模拟Oracle数据库环境 创建表插入数据库 [oracle@node1 ~]$ sqlplus chf/oraclep ...

  8. MYSQL自定义函数 的创建 create、查看函数、修改/更新函数删除函数 以及具体实例

    创建函数 1)使用语法创建 // msyql中的函数一定有返回值 // 创建函数的语法,注意:参数和返回值一定要写长度,避免使用到关键字 create function 函数名([形参列表]) ret ...

  9. 创建健壮的isArray()函数(JavaScript中判断对象类型的种种方法)

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...

最新文章

  1. r-route 命令 显示/配置ip路由表
  2. 《Windows PowerShell实战指南(第2版)》——3.4 使用帮助找命令
  3. Android数据库 之 SQLite数据库
  4. Android 国际化
  5. 【小程序】【Tips】等待服务器的反馈的定时、间隔运行的正确方法
  6. 双赛道20支战队解题思路大公开,线上Poster Session等你来
  7. 单手撸了个springboot+mybatis+druid 1
  8. js中style.display=无效的解决方法
  9. LVS详解(三)——LVS算法简介
  10. Java 设置 JLabel 字体 颜色
  11. iOS 判断机型是否为iPhone Xs Max
  12. 程序员996可还好?某公司强制实行997、007,网友:钱给到位了吗?
  13. 面部捕捉技术_一种基于面部捕捉系统的捕捉点定位系统的制作方法
  14. 【已完美解决】由于找不到MSVCR100.dll,无法继续执行代码。重新安装程序可能会解决此问题。DirectX修复工具下载
  15. 【PPT】连续使用箭头等工具,避免多次重复选择,提升效率
  16. 剪刀石头布java流程图_青岛能源所基于“剪刀石头布”策略实现快速多轮基因编辑...
  17. 【光学】基于矩阵法和等效界面法分析光学薄膜膜对反射率影响附matlab代码
  18. 一键修复手机电池_怎么恢复手机电池寿命(教你一键修复电池损耗)
  19. 遥控视频小车实际应用效果以及功能实现
  20. matplotlib.widgets简单上手

热门文章

  1. 托福试卷真题_托福反复考,反复不过百,你还不知道是谁的问题吗?
  2. ASP.NET 例程完全代码版(5)——通过web.config配置数据库连接池
  3. TortoiseSVN与VisualSVN Server搭建SVN版本控制系统【转】
  4. MVC + AJAX请求失败的问题
  5. Oracle SQL Parsing Flow Diagram(SQL 解析流程图)
  6. linux下clone一直运行,Linux中vgimportclone命令起什么作用呢?
  7. svn authz 授权文件模版
  8. Javascript 解析,格式化日期
  9. python如何使用字典_python字典怎么使用zip
  10. android 悬浮球简书,轻松自制flyme悬浮球