⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mbxtest.c

📁 DSP内核代码
💻 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 + -