{ }
semGive(semFree); return; }
/*memDel()删除内存块*/ void memDel(void) {
void* mem;
blockHead* blockHeadPtr; mem = (void*)(initialPtr); free(mem);
while(mallocPtr->frontBlock != 0) { }
semDelete(semMalloc); /*删除信号量*/ semDelete(semFree); }
5. 无信号量(互斥)支持的临界资源访问方式
有一个server任务,有10个client任务,10个client任务定时给server的消息队列发送消息,server任务接收到消息后,发送ACK消息到client的消息队列,如图:
mem = (void*)(mallocPtr); free(mem);
mallocPtr=mallocPtr->frontBlock ; blockHeadPtr = mallocPtr;
mallocPtr = blockHeadPtr->frontBlock; free((char*)mem - sizeof(blockHead));
Timer0Timer1Timer9ClientMsgQ0ClientMsgQ1……ClientMsgQ9Client0Client1Client9ServerMsgQserver6. zero copy
消息队列存储的是指向消息的指针,从而实现了零拷贝。 #define MAX_MSG_LEN sizeof(MESSAGE*) MESSAGE* rxMsg; /* 用于从消息队列中接收消息 */ MESSAGE* txMsg; /* 用于向消息队列中发送消息 */
msgQReceive(msgQIdServer,(char*)&rxMsg,MAX_MSG_LEN,WAIT_FOREVER);
msgQSend(msgQIdClient[mSendId],(char*)&txMsg,MAX_MSG_LEN,WAIT_FOREVER,MSG_PRI_NORMAL);
三、运行结果
在shell中输入progStart,观察VxSim,输入progStop结束。
四、心得
实验中遇到了各种各样的问题,特别是代码调试,对报错的分析,定位错误,但是通过不懈努力,完成了本次实验,让我对课堂上所讲的内容有了更深刻的认识,对嵌入式实时操作系统有了更深的理解。
由于正值期末,考试任务繁重,时间紧迫,自身水平有限,难免会有疏漏,请老师指正。
相关推荐: