首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > VxWorks >

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

2012-12-16 
某段代码在vxsim下正常运行,下到板子上不能正确运行各位好,有一段代码我在vxsim和VC下都运行正常,但下到PP

某段代码在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;


  ordmsg_r[0].dest_addr=2;

ordmsg_r[0].PRI=1;
strcpy(ordmsg_r[0].data,"数据发送成功!");
Push(ordmsg_r[0]);
//Push(ordmsg[i]);
Pop(2,1);
       }
}

}


这是我初步整理的,可能还不能上机调,大家帮我看看,当运行到最后一行出问题
[解决办法]
请各位高手指点?
[解决办法]
望各位高手指点

热点排行