- #define u8 unsigned char
- #define uchar unsigned char
- #define u16 unsigned int
- #define uint unsigned int
- typedef u8 message;
- //定义消息
- #define MSG_NONE 0 //无消息的消息
- #define MSG_TASK1_RUN 1
- #define MSG_TASK1_STOP 2
- #define MSG_TASK2_RUN 3
- #define MSG_TASK2_STOP 4
- /*=============消息处理机制定义=================*/
- //定义消息
- #define QUEUELEN 5 //消息队列缓冲区大小
- u8 Messages[QUEUELEN]; //消息队列缓冲区
- u8 MessageHead = 0; //消息队头
- u8 MessageTail = 0; //消息队尾
- //消息发布
- void PutMessage(message m)
- {
- Messages[MessageTail] = m ;
- if(++MessageTail>=QUEUELEN) MessageTail=0;
- }
- //获取消息缓冲区的消息
- message GetMessage(void)
- {
- message m = Messages[MessageHead];
- if(++MessageHead>=QUEUELEN) MessageHead=0;
- return m ;
- }
- //判断队列是否空或者错
- bit QueueEmptyOrError(void)
- {
- return (MessageHead==MessageTail)?1:0;
- }
- void main(void)
- {
- u8 RandTaskGene;
- while(1)
- {
- RandTaskGene = rand();
- RandTaskGene %=2;
- if(RandTaskGene)
- {
- PutMessage(MSG_TASK1_RUN);
- }
- else
- {
- PutMessage(MSG_TASK1_STOP);
- }
- RandTaskGene = rand();
- if(RandTaskGene>1000)
- {
- PutMessage(MSG_TASK2_RUN);
- }
- else
- {
- PutMessage(MSG_TASK2_STOP);
- }
- while(!QueueEmptyOrError())
- {
- switch (GetMessage())
- {
- case MSG_TASK1_RUN:
- //...
- break;
- case MSG_TASK1_STOP:
- //...
- break;
- case MSG_TASK2_RUN:
- //...
- break;
- case MSG_TASK2_RUN:
- //...
- break;
- }
- }
- }
- }
单片机应用消息队列
猜你喜欢
转载自blog.csdn.net/u012210286/article/details/83313099
今日推荐
周排行