欢迎来到天天文库
浏览记录
ID:55356373
大小:263.00 KB
页数:14页
时间:2020-05-11
《邝坚_北邮入式实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、嵌入式系统期末实验一、实验要求题目:支持消息驱动模式的实时软件框架目的:在充分理解嵌入式处理器特点、RTOS及强实时嵌入式系统软件设计规范的基础上,构建自己的实时系统软件框架基本功能,并在其上自拟应用(如部分模拟TCP的C/S两端通信流程),测试软件框架的相关功能。环境:VxWorks的VxSim仿真环境或2440(ARM920T)内容:必选功能:1.消息驱动的Task统一框架,包含统一消息格式定义及使用规范;2.支持消息驱动模式的软定时器的机制;3.Task启动同步功能;4.体现前次实验中实现的自定义内存管理机制,最大限度降低外部碎片对系统可靠性的威胁。可选功能(加分)
2、:其它有利于实时处理的有效机制,如:无信号量(互斥)支持的临界资源访问方式,zerocopy等;二、实现的功能1.消息驱动的Task统一框架,包含统一消息格式定义及使用规范;STATUSTask(){Initialization(MBox,DataStructure,Timer,etc.)Forever{MsgReceiveIf(…){……}elseif(…){……}……}}typedefstruct_MESSAGE{intmType;/*消息类型0:timer->client*1:client->server2:server->client*/intmSendId;/*
3、发送任务的MESSAGEID*/intmRecvId;/*接收任务的MESSAGEID*/intmData;/*消息中传递的数据*/}MESSAGE;2.支持消息驱动模式的软定时器的机制;/*timer(id)向客户端消息队列定时发送的定时器*/STATUStimer(intid){MESSAGE*txMsg;/*用于从消息队列中接收消息*/inttick;/*创建一个定时,用于提醒发送者任务定时发送消息*/tick=sysClkRateGet();semTake(semSynStart,WAIT_FOREVER);FOREVER{taskDelay((int)(tick
4、*DELAY_SECOND));txMsg=(MESSAGE*)memMalloc(MAX_MSG_LEN);txMsg->mType=0;txMsg->mSendId=MID_TIMER(id);txMsg->mRecvId=MID_CLIENT(id);txMsg->mData=0;printf("tTimer%dsendmessagetotClient%d!",id,id);if(msgQSend(msgQIdClient[id],(char*)&txMsg,MAX_MSG_LEN,WAIT_FOREVER,MSG_PRI_NORMAL)==ERROR){ret
5、urn(ERROR);}}return(OK);}3.Task启动同步功能;由manager()创建的任务优先级最高,先创建timer()、server()、client()的任务,让他们都在等待信号量semSynStart而被阻塞,最后创建manager()的任务,占据CPU,等待其他所有任务都被阻塞,解锁所有等待信号量的任务,让它们同时启动。/*progStart()启动实例程序*/STATUSprogStart(void){intid;/*用来区分不同的定时器或者客户任务*/mallocPtr=&sysMalloc;mallocPtr->frontBlock=0;i
6、nitialPtr=initial();tidServer=tidManager=0;for(id=0;id7、MSG_Q_EVENTSEND_ERR_NOTIFY);if(msgQIdServer==NULL){return(ERROR);}for(id=0;id8、d++){msgQIdClient[id]=msgQCreate(MAX_MSGS,MAX_MSG_LEN,MSG_Q_FIFO9、MSG_Q_EVENTSEND_ERR_NOTIFY);if(msgQIdClient[id]==NULL){return(ERROR);}}semSynStart=semBCreate(SEM_Q_FIFO10、SEM_EVENTSEND_ERR_NOTIFY,SEM_EMPTY);semMalloc=semBCreate(SEM_Q_PRIORITY,SEM_FULL);semFree=semBCr
7、MSG_Q_EVENTSEND_ERR_NOTIFY);if(msgQIdServer==NULL){return(ERROR);}for(id=0;id8、d++){msgQIdClient[id]=msgQCreate(MAX_MSGS,MAX_MSG_LEN,MSG_Q_FIFO9、MSG_Q_EVENTSEND_ERR_NOTIFY);if(msgQIdClient[id]==NULL){return(ERROR);}}semSynStart=semBCreate(SEM_Q_FIFO10、SEM_EVENTSEND_ERR_NOTIFY,SEM_EMPTY);semMalloc=semBCreate(SEM_Q_PRIORITY,SEM_FULL);semFree=semBCr
8、d++){msgQIdClient[id]=msgQCreate(MAX_MSGS,MAX_MSG_LEN,MSG_Q_FIFO
9、MSG_Q_EVENTSEND_ERR_NOTIFY);if(msgQIdClient[id]==NULL){return(ERROR);}}semSynStart=semBCreate(SEM_Q_FIFO
10、SEM_EVENTSEND_ERR_NOTIFY,SEM_EMPTY);semMalloc=semBCreate(SEM_Q_PRIORITY,SEM_FULL);semFree=semBCr
此文档下载收益归作者所有