📄 mbxtest.c
字号:
/*
* ======== mbxtest.c ========
*/
#include <std.h>
#include <log.h>
#include <mbx.h>
#include <tsk.h>
#include "mbxtestcfg.h"
#define NUMMSGS 3 /*信息的数目 */
#define TIMEOUT 10 /*超时参数*/
typedef struct MsgObj {
Int id; /*用于标记写任务的标号*/
Char val; /* 信息的内容 */
} MsgObj, *Msg;
Void reader(Void);
Void writer(Arg id_arg);
/*
* ======== main ========
*/
Void main()
{
/* Does nothing */
}
/*
* ======== reader ========
*/
Void reader(Void)
{
MsgObj msg;
Int i;
for (i=0; ;i++) {
/* 等待由 writer() 任务所发送的邮箱*/
if (MBX_pend(&mbx, &msg, TIMEOUT) == 0) {
/*
*如果在邮箱有效(有信息)之前发送超时,返回FALSE
*/
LOG_printf(&trace, "timeout expired for MBX_pend()");
break;
}
/* 输出信息的内容*/
LOG_printf(&trace, "read '%c' from (%d).", msg.val, msg.id);
}
LOG_printf(&trace, "reader done.");
}
/*
* ======== writer ========
*/
Void writer(Arg id_arg)
{
MsgObj msg;
Int i;
Int id = ArgToInt (id_arg);
for (i=0; i < NUMMSGS; i++) {
/* 为消息的内容赋值 */
msg.id = id;
msg.val = i % NUMMSGS + (Int)('a');
/* 将消息加入到邮箱之中*/
MBX_post(&mbx, &msg, TIMEOUT);
LOG_printf(&trace, "(%d) writing '%c' ...", id, (Int)msg.val);
/*
*如果在此处调用一个TSK_yield() 将会出现什么情况?后面程序运行结果中将分别给出不执行任务切换(即注释掉该句)和执行任务切换(既保留该句)两种情形下的执行图,分别如图8.18、8.19所示
*/
/* TSK_yield(); */
}
LOG_printf(&trace, "writer (%d) done.", id);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -