积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 嵌入式软件 >> VXWORKS
  相关分类: LINUX | WINCE | UC/OS | Bootloader | 下载 | VXWORKS | 网络协议 | JAVA | 汇编 | 驱动设计 | Symbian | XP Embedded | Nucleus | 新产品 | 相关文章 | 综合技术 |
VxWorks下消息、信号量的使用和任务创建
 
作者:未知   来源:本站原创    点击数:119   更新时间:2008-10-13
您可以添加到网摘 让更多人关注此文章:

    //test.c

#include <stdlib.h>
#include <stdio.h>

#include "test.h"
#include <tasklib.h>
#include <msgqlib.h>
#include <semlib.h>


#define max_message_count  100
#define max_message_length 400



int offset;
unsigned char sharedbuf[2*1024];


/*任务1   消息的发送*/
void loop1(msg_q_id id)/*the function for task 1, like a thread under Windows or unix*/
{
unsigned char msg[max_message_length] = {1};
for( ; ;)
{
  taskdelay(10);//快速发送消息,10ms,直至消息队列满
  if (msgqsend(id, msg, max_message_length, wait_forever, msg_pri_normal) == ok)
  {
   printf("longping1!!   send %d\n", msg[0]);
  }
  else
  {
   printf("sending message error!\n");
  }
}

}
/*任务2   消息的接收*/
void loop2(msg_q_id id)/*the function for test 2, like a thread under wondows or unix*/
{
unsigned char msg[max_message_length] = {0};
for( ; ;)
{
  taskdelay(30);//满速取消息,消息队列满了以后,收发达到平衡,发消息的10ms和30ms效果相同
  if (msgqreceive(id, msg, max_message_length, wait_forever) != error)
  {
   printf("looping2!! receive %d\n", msg[0]);
  }
  else
  {
   printf("receiving message error!\n");
  }
}

}
/*任务3          获取信号量,信号量减1操作*/
void loop3(sem_id semid)
{
for ( ; ;)
{
  taskdelay(100);//获取信号量,速度快
  if (semtake(semid, wait_forever) == ok)
  {
   offset = (++offset) % 2048;
   printf("looping3!!  take semid is: %d.now i get one element: %d\n", (int)semid, sharedbuf[offset]);
   
  }
}
}
/*任务4         释放信号量,信号量加1操作*/
void loop4(sem_id semid)
{
for ( ; ;)
{
  taskdelay(200);//释放信号量,速度慢,可以控制获取信号量,虽然获取延时短,但是没有释放信号量,只能等待
  if (semgive(semid) == ok)
  {
  
   printf("looping4!!  gave semid is: %d.now i get one element: %d\n", (int)semid, sharedbuf[offset]);
  }
}
}


void initialsharedbuf()
{
int i;
offset = 0;
for (i=0; i<2048; i++)
{
  sharedbuf = i;
}
}

int main()
{

msg_q_id msgid;
sem_id semid;
signed int taskarray[100] = {0};
char ch;
int i;
/*to build a message queue.*/
initialsharedbuf();
msgid = msgqcreate(max_message_count, max_message_length, msg_q_fifo);
semid = sembcreate(sem_q_fifo, sem_full);

/*下面启动4个任务*/
/*start a task(thread)*/
taskarray[0] = taskspawn("loop1 ", 80, 0, 64*1024, (funcptr)loop1, (msg_q_id)msgid, 0, 0, 0, 0, 0, 0, 0, 0, 0);
/*start another task(thread)*/
taskarray[1] = taskspawn("loop2 ", 80, 0, 64*1024, (funcptr)loop2, (msg_q_id)msgid, 0, 0, 0, 0, 0, 0, 0, 0, 0);

/*start another task(thread)*/
taskarray[2] = taskspawn("loop3 ", 80, 0, 64*1024, (funcptr)loop3, (sem_id)semid, 0, 0, 0, 0, 0, 0, 0, 0, 0);

/*start another task(thread)*/
taskarray[3] = taskspawn("loop4 ", 80, 0, 64*1024, (funcptr)loop4, (sem_id)semid, 0, 0, 0, 0, 0, 0, 0, 0, 0);

/*主任务循环,当接收到'e'结束所有任务*/
for ( ; ;)
{
  ch = getchar();
  if (ch == 'e')
  {
   i = 0;
   while (taskarray)
   {
    taskdelete(taskarray);
    printf("the task: %d is ended.\n", taskarray);
    taskarray = 0;
    i ++;
   }
   break;
  }
}


printf("the main function is ended.\n");
return 0;
}

/**************************************************************************************/

上面演示了消息、信号量和任务的创建,在tornado下编译调试过,没有问题。


相关文章
· VxWorks基于AT91RM9200处理器的中断处理[106]
· VxWorks下MPC860的中断处理机制及其应用[235]
· VxWorks下实时多任务程序的实现[277]
· 基于FPGA的mif文件创建与使用[52]
· VxWorks下的USB驱动程序原理与分析[493]
热门评论排行
·VHDL设计中电路简化问题的
·ARM嵌入式系统基础教程(N
·江苏嵌入式Linux教育培训
·ARM处理器应用开发4步骤
·锐极LINUX驱动培训班定于

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
避免危及半导体业 德出手挽
HP实验室展示集CMOS电路与忆阻器
全球第二大代工巨头伟创力瘦身应对金融
Vishay Silico
奥地利微电子发布全球首款具有嵌入式比
采用 4mm x
未来MEMS产业恐缩水 车
iSuppli发布08年半导体厂商初
飞兆半导体指控英飞凌专利侵权
全球三大晶圆代工巨头齐遇冷 
 
热门下载 [更多]
 
[ PCB设计] Protel99教程下载
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
 
论坛新帖 [更多]
 
嵌入式十三法则...
基于CPLD和单片机的任意波形...
电子行业的发展方向...
单片机-超低价专业PCB打样...
超低价专业PCB打样 双面板...
[原创]主题:移动开发平台的建...
[原创]正弦脉宽调制(SPWM...
[推荐]Agilent8590...
[推荐]HP8591E HP8...
[推荐]Agilent8711...

 
赞助商 [更多]
 

ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网