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

📄 quetest.c

📁 DSP系統設計和BIOS編程及應用實例-書籍光碟範例-第8章
💻 C
字号:
/*
 *  ======== quetest.c ========
 */

#include <std.h>

#include <log.h>
#include <mem.h>
#include <que.h>
#include <sys.h>

#include "quetestcfg.h"

#define NUMMSGS     5      /* 消息的数目*/

typedef struct MsgObj {
    QUE_Elem    elem;      /* 结构的第一个域是一个QUE_Elem类型*/
    Char        val;       /* 这里将一个字母作为一个消息加入对列,故定义了一个字符型的变量*/
} MsgObj, *Msg;            /* 定义了一个MsgObj结构体类型的变量MsgObj和指针Msg */


Void reader();   /* 用于将消息加入对列*/
Void writer();   /*用于将消息从对列中读出*/

/*
 *  ======== main ========
 */
Void main()
{
    /*
     * writer()的调用必须在reader()之前,以确保读任务执行之前对列不是空的
     */
    writer();
    reader();
}

/*
 *  ======== reader ========
 */
Void reader()
{
    Msg         msg;
    Int         i;

    for (i=0; i < NUMMSGS; i++) {

        /* 为确保队列不为空首先调用QUE_empty进行检验 */
        if (QUE_empty(&queue)) {
            SYS_abort("queue error\n"); /*如果队列为空系统会输出一条错误信息"queue error"*/
        }

        
        msg = QUE_get(&queue); /*msg用于临时存放从对列queue中读出一条信息*/
        
        /* 输出每一条信息,这里是一个字母 */
        LOG_printf(&trace, "read '%c'.", msg->val);

        /* 释放内存*/
        MEM_free(0, msg, sizeof(MsgObj));
    }
}

/*
 *  ======== writer ========
 */
Void writer()
{
    Msg         msg;
    Int         i;

    for (i=0; i < NUMMSGS; i++) {

        /* 分配内存,一次分配可以存放一条消息的内存空间*/
        msg = MEM_alloc(0, sizeof(MsgObj), 0);
        if (msg == MEM_ILLEGAL) {
            SYS_abort("Memory allocation failed!\n");
        }

         /* 为每一条消息赋值 */
        msg->val = i + 'a';

        LOG_printf(&trace, "writing '%c' ...", msg->val);

        /* 将消息加入队列*/
        QUE_put(&queue, msg);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -