当前位置: 代码迷 >> VxWorks >> 某段代码在vxsim上正常运行,上到板子下不能正确运行
  详细解决方案

某段代码在vxsim上正常运行,上到板子下不能正确运行

热度:2673   发布时间:2013-02-26 00:00:00.0
某段代码在vxsim下正常运行,下到板子上不能正确运行
各位好,有一段代码我在vxsim和VC下都运行正常,但下到PPC板子上运行就只显示结果(我在该代码段后加printf(“end”);“end” 能显示出来),不能打印value=...,将该代码嵌入到系统中后,系统就卡在这儿,不能执行后面的程序
------解决方案--------------------------------------------------------
#include "vxWorks.h"
#include "stdio.h"
#include "inetLib.h"
#include "stdioLib.h"
#include "strLib.h"
#include "semLib.h"
#include "taskLib.h"
#include "msgQLib.h"
#define SELF_ID 2
typedef unsigned short  BYTE;
typedef unsigned char   CHAR;
typedef unsigned int    INT;
typedef unsigned long   LONG;

typedef struct 
{
CHAR  MSG_Type; //消息类型
BYTE  sor_addr; //源节点地址
BYTE  next_addr; //下一跳节点地址
BYTE  sor_addr2; //源节点地址(最初发起节点)
BYTE  dest_addr; //目的节点地址
CHAR  teamNUM; //目的节点编队号
CHAR  PRI:2;
char data[600]; //数据
}ordMsg_R;
typedef struct
{
ordMsg_R elem[MAXSize];
int head,tail;
}queue;
void Clear(int address,int pri) //清空
{
if(address<SELF_ID)
{
qu[address-1][pri-1].head=qu[address-1][pri-1].tail=0;
}
    else if(address>SELF_ID)
{
qu[address-2][pri-1].head=qu[address-2][pri-1].tail=0;
}
}
int IsFull(queue q) //队列是否为空
{
if(q.head==MAXSize)
return 1;
else
return 0;
}
int IsEmpty(queue q) //队列是否满
{
if(q.tail==q.head)
return 1;
else
return 0;
}

void Push(ordMsg_R e) //进队列
{
 if(e.dest_addr<SELF_ID)
 {
if(IsFull(qu[e.dest_addr-1][e.PRI-1]))
{
printf("this queue is full!\n");
return ;
}
qu[e.dest_addr-1][e.PRI-1].elem[qu[e.dest_addr-1][e.PRI-1].head++]=e;
 }
 else if(e.dest_addr>SELF_ID)
 {
   if(IsFull(qu[e.dest_addr-2][e.PRI-1]))
{
printf("this queue is full!\n");
return ;
}
qu[e.dest_addr-2][e.PRI-1].elem[qu[e.dest_addr-2][e.PRI-1].head++]=e;
 }
}
ordMsg_R Pop(int address,int pri) //出队列
{
ordMsg_R temp;
temp.dest_addr=0;
temp.PRI=0;
strcpy(temp.data,"");
 if(address<SELF_ID)
 {
if(IsEmpty(qu[address-1][pri-1]))
{
printf("this queue is empty!\n");

return temp;  //队列为空,返回的是一个无效的值
}
qu[address-1][pri-1].tail++;
return qu[address-1][pri-1].elem[qu[address-1][pri-1].tail-1];
 }
 else //if(address>SELF_ID)
 {
 if(IsEmpty(qu[address-2][pri-1]))
{
printf("this queue is empty!\n");

return temp;  //队列为空,返回的是一个无效的值
}
qu[address-2][pri-1].tail++;
return qu[address-2][pri-1].elem[qu[address-2][pri-1].tail-1];
 }
}

int NumberOfQueue(int addre,int pr) //取队列元素个数
{
int num;
if(addre<SELF_ID)
{
num=qu[addre-1][pr-1].head-qu[addre-1][pr-1].tail;
}
    else if(addre>SELF_ID)
{
num=qu[addre-2][pr-1].head-qu[addre-2][pr-1].tail;
}
return num;
}
void queueInitial()
{
int i,j;
queue qu[MAXAddress][MAXPri];
ordMsg_R ordmsg_r[100];
//ordMsg_R temp,temp1;
   ordmsg_r[0].sor_addr=1;
  相关解决方案