首页 ucos消息队列通信

ucos消息队列通信

举报
开通vip

ucos消息队列通信嵌入式实时操作系统实验报告 《实验三消息队列与任务间通信》 班级嵌入式11002班 姓名朱杰 学号    1004681224 指导教师      谢治平          一实验要求 本次通过设计两个实验任务,了解嵌入式实时操作系统μC/OS-II中消息队列机制的基本原理和使用方法。 二实验目的 掌握嵌入式实时操作系统μC/OS-II中消息队列机制的基本原理和使用方法。 三操作系统配置 #define OS_MAX_TASKS           3    /*最多可以创建3个任务*/ #define OS...

ucos消息队列通信
嵌入式实时操作系统 实验报告 化学实验报告单总流体力学实验报告观察种子结构实验报告观察种子结构实验报告单观察种子的结构实验报告单 《实验三消息队列与任务间通信》 班级嵌入式11002班 姓名朱杰 学号    1004681224 指导教师      谢治平          一实验要求 本次通过 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 两个实验任务,了解嵌入式实时操作系统μC/OS-II中消息队列机制的基本原理和使用方法。 二实验目的 掌握嵌入式实时操作系统μC/OS-II中消息队列机制的基本原理和使用方法。 三操作系统配置 #define OS_MAX_TASKS           3    /*最多可以创建3个任务*/ #define OS_LOWEST_PRIO        16        /*任务优先级不可以大于14*/ #define OS_TASK_CREATE_EN          1    /*允许使用OSTaskCreate()*/ #define OS_TASK_SUSPEND_EN     1    /*允许使用OSTaskSuspend() and OSTaskResume()*/ 四.μC/OS-II相关 关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函 数 OSTaskCreate():建立一个新任务 OSQCreate():建立一个消息队列 OSQPend():等待消息 OSQPostFront() :向消息队列发送消息 OSQPost():向消息队列发送消息 五相关系统调用 ·OSTaskCreate():建立一个新任务 ·OSTaskSuspend():无条件挂起一个任务 ·OSTaskResume():唤醒一个挂起的任务 ·OSTimeDly():将一个任务延时若干个时钟节拍 六应用任务 实验设计I (1)设计I要求 ● 通过消息队列在任务间传递数据: 任务TA1以随机(或固定)时间间隔依次将数据1、2、3、...发送至消息队列q1,每次发送一个数据。 TA2以随机(或固定)时间间隔将随机数据发送至q1。 TA3从消息队列q1中每次接收一个数据: 如果数据来自TA1,则计算出所有已接收的来自TA1的数据之和,然后延时; 如果数据来自TA2,则将数据输出到屏幕,然后延时(模拟处理数据所需的时间); ● 调整发送数据和处理数据的速度,观察发送速度大于处理速度的结果 (2)实验代码 #include    "../ucos-ii/includes.h"              /* uC/OS interface */ #include    "string.h" //#include "includes.h" #define    TASK_STK_SIZE        512 #define  N_MESSAGES 128 OS_STK    TaskStartStk[TASK_STK_SIZE];    /* TaskStart任务堆栈 */ OS_STK    TA1Stk[TASK_STK_SIZE]; OS_STK    TA2Stk[TASK_STK_SIZE]; OS_STK    TA3Stk[TASK_STK_SIZE]; OS_EVENT *Str_Q; void  TaskStart(void *data); void TA1(void *pdata);  void TA2(void *pdata);  void TA3(void *pdata); INT8U err; INT8U total=0; charbuf[128]; void * ql[N_MESSAGES] ; typedefstruct{ int list; intnum; }Mess; void Main(void) {  //Target_Init(); ARMTargetInit();    OSInit(); Str_Q=OSQCreate(&ql[0],N_MESSAGES); OSTaskCreate(TaskStart,(void*)0, &TaskStartStk[TASK_STK_SIZE - 1], 0); ARMTargetStart(); OSStart(); while(1); } voidTaskStart(void *pdata){  OSTaskCreate(TA1,(void*)0, &TA1Stk[TASK_STK_SIZE - 1],1);    /* 创建任务TA1 */ OSTaskCreate(TA2,(void*)0, &TA2Stk[TASK_STK_SIZE - 1],2);    /* 创建任务TA2 */ OSTaskCreate(TA3,(void*)0, &TA3Stk[TASK_STK_SIZE - 1],3);    /* 创建任务TA3 */ while(1) OSTimeDly(1000); } void TA1(void *pdata){ INT8U err;    for(;;){ INT32U t; INT32U r; Mess mess; t = OSTime; r = srand(t); mess.list=1; mess.num=3; OSQPostFront(Str_Q,&mess); sprintf(buf, "TA1 post\n"); armulPrintf(buf); OSTimeDlyHMSM(0,0,2,0); } } void TA2(void *pdata){ for(;;){ INT32U t; INT32U r; Mess mess; t = OSTime; r = srand( t ); mess.list=2; mess.num=2; OSQPostFront(Str_Q,&mess); sprintf(buf, "TA2 post\n"); armulPrintf(buf); OSTimeDlyHMSM(0,0,3,0); } } void TA3(void *pdata){ for(;;){ Mess* receive; receive=OSQPend(Str_Q,0,&err); if(receive->list==1) { total+=receive->num; sprintf(buf,"TA1 Post %d...,total=%d \n", receive->num,total); armulPrintf(buf); } else { sprintf(buf, "TA2 Post %d... \n", receive->num); armulPrintf(buf); } OSTimeDlyHMSM(0,0,1,0); } } (3) 实验运行效果 实验设计二 (1)实验要求 ◆ 在设计I的基础上,要求保证在任何情况下,在任一时刻消息队列q1中来自任务TA2的数据不超过一个。 (2)实验代码 #include    "../ucos-ii/includes.h"              /* uC/OS interface */ #include    "string.h" //#include "includes.h" #define    TASK_STK_SIZE        512 #define  N_MESSAGES 128 OS_STK    TaskStartStk[TASK_STK_SIZE];    /* TaskStart任务堆栈 */ OS_STK    TA1Stk[TASK_STK_SIZE]; OS_STK    TA2Stk[TASK_STK_SIZE]; OS_STK    TA3Stk[TASK_STK_SIZE]; OS_EVENT *sem1; OS_EVENT *Str_Q; void  TaskStart(void *data); void TA1(void *pdata);  void TA2(void *pdata);  void TA3(void *pdata); INT8U err; INT8U total=0; charbuf[128]; void * ql[N_MESSAGES] ; typedefstruct{ int list; intnum; }Mess; void Main(void) {  //Target_Init(); ARMTargetInit();    OSInit(); sem1 = OSSemCreate(1); Str_Q=OSQCreate(&ql[0],N_MESSAGES); OSTaskCreate(TaskStart,(void*)0, &TaskStartStk[TASK_STK_SIZE - 1], 0); ARMTargetStart(); OSStart(); while(1); } voidTaskStart(void *pdata){  OSTaskCreate(TA1,(void*)0, &TA1Stk[TASK_STK_SIZE - 1],1);    /* 创建任务TA1 */ OSTaskCreate(TA2,(void*)0, &TA2Stk[TASK_STK_SIZE - 1],2);    /* 创建任务TA2 */ OSTaskCreate(TA3,(void*)0, &TA3Stk[TASK_STK_SIZE - 1],3);    /* 创建任务TA3 */ while(1) OSTimeDly(1000); } void TA1(void *pdata){ INT8U err;    for(;;){ INT32U t; INT32U r; Mess mess; t = OSTime; r = srand(t); OSSemPend(sem1,0,&err); mess.list=1; mess.num=3; OSQPostFront(Str_Q,&mess); sprintf(buf, "TA1 post,\n"); armulPrintf(buf); OSTimeDlyHMSM(0,0,2,0); } } void TA2(void *pdata){ for(;;){ INT32U t; INT32U r; Mess mess; t = OSTime; r = srand( t ); mess.list=2; mess.num=2; OSQPostFront(Str_Q,&mess); sprintf(buf, "TA2 post\n"); armulPrintf(buf); OSTimeDlyHMSM(0,0,3,0); } } void TA3(void *pdata){ for(;;){ Mess* receive; receive=OSQPend(Str_Q,0,&err); if(receive->list==1) { total+=receive->num; sprintf(buf,"TA1 Post %d...,total=%d TA1读出\n", receive->num,total); armulPrintf(buf); OSSemPost(sem1); } else { sprintf(buf, "TA2 Post %d...TA2读出 \n", receive->num); armulPrintf(buf); } OSTimeDlyHMSM(0,0,1,0); } } (3) 实验运行效果
本文档为【ucos消息队列通信】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_215732
暂无简介~
格式:doc
大小:33KB
软件:Word
页数:15
分类:互联网
上传时间:2019-03-18
浏览量:7