【uTenux实验】消息缓冲区

【uTenux实验】消息缓冲区

2

TA_USERBUF对象名

一个悲剧的小插曲:

按照习惯性的写法,香港虚拟主机,在接收消息的时候我这样写的:

if(E_OK == tk_rcv_mbf(MbfID_1,(VP)msgrcv,-1)){tm_putstring((UB*));tm_putstring((UB*)msgrcv);}else{tm_putstring((UB*));PutErcd(ercd);}

不仔细看手册函数说明害死人啊!

【实验描述】

然后创建两个消息队列。

开始执行。

。开始执行剩下的代码和循环。

如果没有上面的小插曲,这个实验是相当低简单。可惜疏忽了一下,费了一晚上时间才搞定。

【实验代码及输出】

#include MBF1SIZE200#define MBF2SIZE200#define MBF1MAXMSIZE 80#define MBF2MAXMSIZE 80void MbfSampleTaskA(W stacd,VP exinf);void MbfSampleTaskB(W stacd,VP exinf);static ID TaskID_A;static ID TaskID_B;static ID MbfID_1;static ID MbfID_2;ER MbfSample( void){ T_CTSK ctsk; T_CMBF cmbf;//创建任务TaskA ctsk.bufptr = NULL; ctsk.exinf = (VP)NULL; ctsk.itskpri = 18; ctsk.stksz = 512; ctsk.task = MbfSampleTaskA; ctsk.tskatr = TA_HLNG | TA_RNG0; TaskID_A = tk_cre_tsk(&ctsk);//创建任务TaskB ctsk.itskpri = 20; ctsk.task = MbfSampleTaskB; TaskID_B = tk_cre_tsk(&ctsk);//创建消息缓冲区MbfID_1 cmbf.bufptr = (VP)NULL; //不使用用户缓冲区 cmbf.bufsz = MBF1SIZE; //消息缓冲区200字节 cmbf.exinf = (VP)NULL; cmbf.maxmsz = MBF1MAXMSIZE; //最大消息大小 cmbf.mbfatr = TA_TFIFO; MbfID_1 = tk_cre_mbf(&cmbf);//创建消息缓冲区MbfID_2 cmbf.bufsz = MBF2SIZE; cmbf.maxmsz = MBF2MAXMSIZE; MbfID_2 = tk_cre_mbf(&cmbf);tk_sta_tsk(TaskID_A,5); return TRUE;}void MbfSampleTaskA(W stacd,VP exinf){ UW len; B c; T_RMBF rmbf; W msgsz;B msgsend1[] = ; B msgsend2[] = ; B msgrcv[;tk_sta_tsk(TaskID_B,0); while(1) {tm_putstring((UB*));tm_putstring((UB*));tm_putstring((UB*)msgsend1);if(E_OK == tk_snd_mbf(MbfID_1,(VP)msgsend1,strlen(msgsend1),-1)){tm_putstring((UB*));}else{tm_putstring((UB*));return;}if(E_OK == tk_snd_mbf(MbfID_1,(VP)msgsend2,strlen(msgsend2),-1)){tm_putstring((UB*));}else{tm_putstring((UB*));return;}if(E_OK < tk_rcv_mbf(MbfID_2,(VP)msgrcv,-1)){tm_putstring((UB*));tm_putstring((UB*)msgrcv);}else{tm_putstring((UB*));} }}void MbfSampleTaskB(W stacd,VP exinf){ UW len; B msgsend[] = ; B msgrcv[; B msgrcv2[; while(1) {tk_rcv_mbf(MbfID_1,(VP)msgrcv,-1);tm_putstring((UB*));tm_putstring((UB*)msgrcv);if(E_OK == tk_rcv_mbf(MbfID_1,(VP)msgrcv,-1));tm_putstring((UB*));tm_putstring((UB*)msgrcv2);Delay(0x1000000);tm_putstring((UB*));tm_putstring((UB*)msgsend);if(E_OK == tk_snd_mbf(MbfID_2,(VP)msgsend,strlen(msgsend),-1)){tm_putstring((UB*));}else{tm_putstring((UB*));} }}

输出如下:

—————————————————- micro Tenux Version 1.6.00(build 0180) Supported MCU is ST STM32F407VG Copyright(c) 2008-2013 by Dalian uLoong Co.,Ltd. —————————————————-

所有的胜利,与征服自己的胜利比起来,都是微不足道

【uTenux实验】消息缓冲区

相关文章:

你感兴趣的文章:

标签云: