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

📄 message.c

📁 是经典的UNIX的部分源代码
💻 C
字号:
#include "message.h"
#include "interrupt.h"

/***********************************************
* 下面是函数的实现部份                         *
***********************************************/

// 初始化消息队列
void message_init_message_queue( struct message_message_queue_struct *message_queue )
{
  message_queue->head = 0 ;
  message_queue->tail = 0 ;
}

// 获得消息,返回 1 表示成功获得,返回 0 表示未获得(消息队列可能为空)
int message_get_message( struct message_message_queue_struct *message_queue , struct message_message_struct *message )
{
  // 先关中断,使得在取消息的同时,中断函数不得操作消息队列,
  // 仅管从理论上分析,我认为此处并不需要互斥,但实际上这必须这样,虽然我还认真分析这其中的原因
  //interrupt_close_interrupt() ;
  //__asm__( "cli" ) ;

  if( message_queue->head == message_queue->tail ){
    return 0 ;
  }

  message_queue->head = ++message_queue->head % 256 ;
  *message = message_queue->message_buffer[ message_queue->head ] ;
  
  return 1 ;
  //__asm__( "sti" ) ;
  //interrupt_open_interrupt() ; 
}

// 放入消息函数
void message_put_message( struct message_message_queue_struct *message_queue , struct message_message_struct message )
{
  int tail = ( message_queue->tail + 1 ) % 256 ;
  if( tail == message_queue->head ){
    // 消息队列以满,直接返回
    return ;
  }

  message_queue->tail = tail ;
  message_queue->message_buffer[ message_queue->tail ] = message ;
}

⌨️ 快捷键说明

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