完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
下面请问一个关于任务切换和邮箱的小问题,请大家抽时间看一下。
我定义了一个大小为2的邮箱,并建立了一个reader的task和三个writer的task进行邮箱试验。在执行的过程中,有一个现象不明白,就是在附件图片标注的那里,为什么会突然变成writer2发送数据啊,在这一步并没有进行Task_yield()任务切换啊,请大家在百忙中抽时间回答一下,麻烦了,谢谢! #include #include <ti/sy***ios/BIOS.h> #include #include #include #include #include #include #define NUMMSGS 3 /* number of messages */ #define TIMEOUT 10 typedef struct MsgObj { Int id; /* writer task id */ Char val; /* message value */ } MsgObj, *Msg; Void reader(Void); Void writer(int id_arg); Mailbox_Handle mbox; /* * ======== main ======== */ Void main() { Task_Params taskParams; Task_Handle myTsk0,myTski; Mailbox_Params mboxParams; UInt i; Error_Block eb; Error_init(&eb); /*create 1 reader_task with priority 1*/ Task_Params_init(&taskParams); taskParams.stackSize = 512; taskParams.priority = 2; myTsk0=Task_create((Task_FuncPtr)reader,&taskParams,&eb); if(myTsk0==NULL) System_abort("reader create failed"); Mailbox_Params_init(&mboxParams); mbox = Mailbox_create(8,2,&mboxParams,&eb); if(mbox==NULL) System_abort("Mailbox create failed"); /*Creat 3 tasks with priority 1*/ /*re-uses taskParams */ taskParams.priority=2; for(i=0;i<3;i++) { taskParams.arg0=i; myTski=Task_create((Task_FuncPtr)writer,&taskParams,&eb); if(myTski==NULL) System_abort("writer create failed"); } /*Start SYS/BIOS*/ System_flush(); BIOS_start(); } /* * ======== reader ======== */ Void reader(Void) { MsgObj msg; while(1) { /* wait for mailbox to be posted by writer() */ if (Mailbox_pend(mbox,&msg, BIOS_WAIT_FOREVER) == 0) //BIOS_WAIT_FOREVER { System_printf("timeout expired for MBX_pend()n"); System_flush(); break; } /* print value */ System_printf("read '%c' from (%d).n", msg.val, msg.id); System_flush(); } System_printf("reader done.n"); System_flush(); } /* * ======== writer ======== */ Void writer(int id_arg) { MsgObj msg; Int i; Int id = id_arg;// 0;//ArgToInt (id_arg); for (i=0; i < NUMMSGS; i++) { /* fill in value */ msg.id = id; msg.val = i % NUMMSGS + (Int)('a'); /* enqueue message */ Mailbox_post(mbox,&msg, BIOS_WAIT_FOREVER); System_printf("(%d) writing '%c' ...n", id, (Int)msg.val); System_flush(); } System_printf("writer (%d) done.n", id); System_flush(); Task_yield(); }
|
|
相关推荐
1个回答
|
|
求解答啊
|
|
|
|
只有小组成员才能发言,加入小组>>
TMS320F28377D:新做了以377d为芯片的板子,上电后芯片复位引脚出现方波请问如何解决?
1888 浏览 0 评论
TPS55340通电后输入端保险丝烧断,芯片输入和GND之间短路
3641 浏览 4 评论
5027 浏览 0 评论
请问如何用DM368对RGB格式的图片数据进行编码生成JPEG格式图片?
1732 浏览 1 评论
9353 浏览 8 评论
CC3100BOOST使用CC3200lunchXL进行烧录
664浏览 2评论
707浏览 1评论
TMS320F28034: 利用C2prog通过SCI给TMS320F28034烧录程序,出现错误提示:Bootloading... failed (invalid echo)!
668浏览 1评论
1186浏览 1评论
求DLPC350 Programmer’s Guide User's Guide 中文版说明书
1189浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-19 18:56 , Processed in 0.711103 second(s), Total 91, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号