《用UC0SII实现任务间共享变量的无冲突访问及任务间的消息邮箱通信和队列通信。》由会员分享,可在线阅读,更多相关《用UC0SII实现任务间共享变量的无冲突访问及任务间的消息邮箱通信和队列通信。(6页珍藏版)》请在金锄头文库上搜索。
1、实验项目名称:实验项目名称:用 UC0SII 实现任务间共享变量的无冲突访问及任务间的消息邮箱通信 和队列通信。实验目的:实验目的:1、实现任务之间共享变量无冲突的访问2、实现任务之间消息邮箱的通信3、实现任务之间的消息队列的通信实验内容实验内容( (实验过程及问题的解决实验过程及问题的解决) ):实验主要参照了例题 4.7、4.8、4.9,将 3 个例题合成一个任务,满足题目的要求。首先,设置了 5 个任务,oneTask 和 foTask 2 个任务建立了互斥信号*Mutexp,用OSMutexPend(Mutexp,0,和 OSMutexPost(Mutexp),并延时等待一秒,进行 2
2、 个任务的共享变量无冲突访问控制。然后在 hertask 任务中,显示 times 的次数,并使用消息邮箱 OSMboxPost(Str_Box,s)给 twoTask 任务邮箱消息,twoTask 接收到消息后,根据OSTimeGet()获得系统时间范围来判断要传送给 stwoTask 任务的字符,并使用OSQPost(Str_Q,s4)和 OSQPend(Str_Q,0,进行消息队列的通信。调试与结果测试分析:调试与结果测试分析:字符 oneTask running 和 foTask running 在互斥信号的条件下,一直循环配对出现,而 屏幕上的数字就是消息邮箱传递消息的次数,而 tw
3、oTask running 和 stwoTask running 各出 现了 2 次,是由于在消息队列邮箱中设置了在 100OSEventPtr,/s, DISP_BGND_BLACK+DISP_FGND_WHITE );*/ Times+;OSTimeDlyHMSM(0, 0,1, 0);/等待 1 秒 /*任务 twoTask*/ void twoTask (void *pdata) #if OS_CRITICAL_METHOD = 3OS_CPU_SR cpu_sr; #endifpdata = pdata; for (;) ss=OSMboxPend(Str_Box,10, PC_Di
4、spStr(10,+y,ss, DISP_BGND_BLACK+DISP_FGND_WHITE ); if(OSTimeGet()100 /发送消息 OSTimeDlyHMSM(0, 0, 1, 0);/等待 1 秒 /*任务 stwoTask*/ void stwoTask (void *pdata) #if OS_CRITICAL_METHOD = 3OS_CPU_SR cpu_sr; #endifpdata = pdata;for (;) ss=OSQPend(Str_Q,0, /请求消息队列 PC_DispStr(10,+y, ss, DISP_BGND_BLACK+DISP_FGND_WHITE );OSTimeDlyHMSM(0, 0, 1, 0);/等待 1 秒