📄 message.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 + -