在网上看到一个VxWorks的例子。请问怎样在PC上机上运行。

James_ht 2006-09-08 02:12:13

在网上看到一个VxWorks的例子。请问怎样在PC上机上运行.还是有其它执行方法。
他这个上面的运行结果是怎么得到的。
谢谢!!

http://blog.donews.com/21cnbao/archive/2006/03/07/757355.aspx
下面我们以著名的生产者/消费者问题作为例子来说明消息队列的用途:

例2:消息队列
/* includes */
#include "vxWorks.h"
#include "taskLib.h"
#include "msgQLib.h"
#include "sysLib.h"
#include "stdio.h"
/* globals */
#define CONSUMER_TASK_PRI 99 /* Priority of the consumer task */

#define PRODUCER_TASK_PRI 98 /* Priority of the producer task */
#define TASK_STACK_SIZE 5000 /* stack size for spawned tasks */
struct msg { /* data structure for msg passing */
int tid; /* task id */
int value; /* msg value */
};
LOCAL MSG_Q_ID msgQId; /* message queue id */
LOCAL int numMsg = 8; /* number of messages */
LOCAL BOOL notDone; /* Flag to indicate the completion */

/* function prototypes */

LOCAL void producerTask(); /* producer task */
LOCAL void consumerTask(); /* consumer task */
/* user entry */
void msgQDemo()
{

notDone = TRUE; /* initialize the global flag */

/* Create the message queue*/

if ((msgQId = msgQCreate(numMsg, sizeof(struct msg), MSG_Q_FIFO)) == NULL)
{
perror("Error in creating msgQ");
}

/* Spawn the producerTask task */
if (taskSpawn("tProducerTask", PRODUCER_TASK_PRI, 0, TASK_STACK_SIZE, (FUNCPTR)producerTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) == ERROR)
{
perror("producerTask: Error in spawning demoTask");
}

/* Spawn the consumerTask task */
if (taskSpawn("tConsumerTask", CONSUMER_TASK_PRI, 0, TASK_STACK_SIZE, (FUNCPTR)consumerTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) == ERROR)
{
perror("consumerTask: Error in spawning demoTask");
}

/* polling is not recommended. But used to make this demonstration simple*/

while (notDone)
taskDelay(sysClkRateGet());


if (msgQDelete(msgQId) == ERROR)
{
perror("Error in deleting msgQ");

}
}

/* producerTask :发送消息给consumerTask */

void producerTask(void)

{

int count;

int value;

struct msg producedItem; /* producer item - produced data */

printf("producerTask started: task id = %#x \n", taskIdSelf());

/* Produce numMsg number of messages and send these messages */

for (count = 1; count <= numMsg; count++)

{

value = count * 10; /* produce a value */
/* Fill in the data structure for message passing */
producedItem.tid = taskIdSelf();
producedItem.value = value;
/* Send Messages */
if ((msgQSend(msgQId, (char*) &producedItem, sizeof(producedItem),
WAIT_FOREVER, MSG_PRI_NORMAL)) == ERROR)
{

perror("Error in sending the message");

}
else
printf("ProducerTask: tid = %#x, produced value = %d \n", taskIdSelf(),
value);
}
}

/* consumerTask:获取(消费)消息 */

void consumerTask(void)

{

int count;
struct msg consumedItem; /* consumer item - consumed data */

printf("\n\nConsumerTask: Started - task id = %#x\n", taskIdSelf());
/* consume numMsg number of messages */

for (count = 1; count <= numMsg; count++)

{
/* Receive messages */
if ((msgQReceive(msgQId, (char*) &consumedItem, sizeof(consumedItem),
WAIT_FOREVER)) == ERROR)
{
perror("Error in receiving the message");
}
else
printf("ConsumerTask: Consuming msg of value %d from tid = %#x\n",
consumedItem.value, consumedItem.tid);

}
notDone = FALSE; /* set the global flag to FALSE to indicate completion*/

}


程序运行输出:
producerTask started: task id = 0x1010f20
ProducerTask: tid = 0x1010f20, produced value = 10
ProducerTask: tid = 0x1010f20, produced value = 20
ProducerTask: tid = 0x1010f20, produced value = 30
ProducerTask: tid = 0x1010f20, produced value = 40
ProducerTask: tid = 0x1010f20, produced value = 50
ProducerTask: tid = 0x1010f20, produced value = 60
ProducerTask: tid = 0x1010f20, produced value = 70
ProducerTask: tid = 0x1010f20, produced value = 80

ConsumerTask: Started - task id = 0x100c840
ConsumerTask: Consuming msg of value 10 from tid = 0x1010f20
ConsumerTask: Consuming msg of value 20 from tid = 0x1010f20
ConsumerTask: Consuming msg of value 30 from tid = 0x1010f20
ConsumerTask: Consuming msg of value 40 from tid = 0x1010f20
ConsumerTask: Consuming msg of value 50 from tid = 0x1010f20
ConsumerTask: Consuming msg of value 60 from tid = 0x1010f20
ConsumerTask: Consuming msg of value 70 from tid = 0x1010f20
ConsumerTask: Consuming msg of value 80 from tid = 0x1010f20
我们以WINDVIEW捕获上述程序运行时的状态, 表示发送消息,而 表示任务接收消息:
从程序运行的输出结果和上图可以看出,生产者“生产”了numMsg个(即8个)消息,消费者也“消费”了numMsg个消息
...全文
610 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
色郎中 2006-11-01
  • 打赏
  • 举报
回复
哪个都无所为啊
你应该在VXSIM 上跑吧

不是很烦的 那个是真对你 开发板的芯片
zhtuan 2006-10-28
  • 打赏
  • 举报
回复
要有target,开发板或是建vxsim
zhenyuzeta 2006-10-23
  • 打赏
  • 举报
回复
破解方法好像在风河[vxworks].zinc.6.0.for.tornado.2.0.iso 62.54MB 里面
zhenyuzeta 2006-10-23
  • 打赏
  • 举报
回复
[风河vxworks].windriver.tornado.v2.2.for.pentium.cd1.iso 259.57MB
[风河vxworks].windriver.tornado.v2.2.for.pentium.cd2.iso 61.61MB
naive_lin 2006-10-19
  • 打赏
  • 举报
回复
请问tornado 2.2 for all到底该安装其中哪一个在windows xp 上?
有:
[风河vxworks].windriver.tornado.v2.2.for.arm.cd1.iso 216.8MB
[风河vxworks].windriver.tornado.v2.2.for.arm.cd2.iso 144.13MB
[风河vxworks].windriver.tornado.v2.2.for.powerpc.cd1.iso 291.27MB
[风河vxworks].windriver.tornado.v2.2.for.powerpc.cd2.iso 293.47MB
[风河vxworks].t22-cp1-arm.tar 19.92MB
[风河vxworks].windriver.tornado.v2.2.for.xscale.cd1.iso 281.55MB
[风河vxworks].windriver.tornado.v2.2.for.xscale.cd2.iso 115.91MB
[风河vxworks].windriver.tornado.v2.2.for.pentium.cd1.iso 259.57MB
[风河vxworks].windriver.tornado.v2.2.for.pentium.cd2.iso 61.61MB
[风河vxworks].zinc.6.0.for.tornado.2.0.iso 62.54MB
[风河vxworks].zinc.programmer%26%2339%3bs.guide.6.0.beta.pdf 1.31MB
[风河vxworks].zinc60t22.tar 不到1MB
[风河vxworks].zinc6-cp1.tar 23.59MB
[风河vxworks].vxworks.windriver.tornado.ver2.2.for.coldfire.zip

到底该下载哪个装?
yxd216 2006-09-28
  • 打赏
  • 举报
回复
1、首先你得安装一个tornado的软件(这里包含了vxWorks的OS),这个软件在网上好像可以找到。

2、要配置好那些cdkey之类的。

3、启动软件,建立一个工程,在里面加入一个.c文件,把上面的代码copy进去。

4、编译运行,就可以在输出的地方看到结果。

2,179

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧