专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VxWorks

寻求:taskSpawn( )函数 和semBCreate()函数详解解决方案

发布时间:2010-06-14 16:35:19 文章来源:www.iduyao.cn 采编人员:星星草
寻求:taskSpawn( )函数 和semBCreate()函数详解
帮帮忙,哪位能告诉我这两个函数的作用,和其中各个参数的含义与作用。
  我看了好久都不是很懂,谢谢大家了
------解决方案--------------------
int taskSpawn
    (
    char          *name,        /*任务名*/
    int           priority,     /*任务优先级,vxWorks好像共255个,而且调度采用优先级抢占式,同优先级轮换式的调度方式*/
    int           options,      /*任务的一些特性,例如VX_SUPERVISOR_MODE 0x0001                               OBSOLETE: tasks always in sup mode*/
    int           stackSize,    /* 需要申请堆栈的大小*/
    FUNCPTR       entryPt,      /*任务处理函数*/
    int           arg1,         /*任务处理函数需要的参数*/
    int           arg2,
    int           arg3,
    int           arg4,
    int           arg5,
    int           arg6,
    int           arg7,
    int           arg8,
    int           arg9,
    int           arg10 
    )

------解决方案--------------------
SEM_ID semBCreate
    (
    int         options,  /*信号量的特性,例如信号量的阻塞队列类型为优先级优先行还是FIFO*/
    SEM_B_STATE initialState /* 信号量的初始状态:empty or full,用来同步或者资源互斥*/
    )
返回的值就是改信号量的ID,实际上就是指向信号量的指针啦
------解决方案--------------------
taskSpawn:创建并激活任务,有点类似于VC下的启动线程函数:
int taskSpawn
  (
  char *name, /*你要创建的任务名:比如说task1,在Shell下可以用命令:i 来查看当前系统中所有的任务*/
  int priority, /*任务优先级,*/
  int options, /*一般为0*/
  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("CANR1", 230, 0, 1024*32, (FUNCPTR)RecvProc,cardNo,1,0,0,0,0,0,0,0,0);


/************************************************************************/
/* CAN板卡接收数据任务                                                  */
/* 参数: cardNo - CAN板卡序号,0表示第一块板卡,1表示第二块板卡           */
/*       portNo - 端口号,0表示第一端口,1表示第二端口                    */
/************************************************************************/
void RecvProc(int cardNo, int portNo)
{
CANMSG rece_msg;
int    ret = 0;
int    i   = 0;

memset(&rece_msg, 0, sizeof(CANMSG));

printf("Recv CAN(%d) task ok.\n",cardNo);

/* 置CAN控制器为正常工作模式*/
if(cardNo==0)
{
canNormalRun(portNo);
}
else
{
canNormalRun2(portNo);
}

while(1)
{
/************************************************************************/
/* 接收数据                                                             */
/************************************************************************/
if(cardNo==0)
{
ret = canReceiveMsg(portNo,&rece_msg);
}
else
{
ret = canReceiveMsg2(portNo,&rece_msg);
}

if(ret==1)
{
/* success */
printf("Receive Data: ");
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: