当前位置: 首页 > news >正文

网站建设师百度百科软文案例大全300字

网站建设师百度百科,软文案例大全300字,wordpress宠物主题,网上服务大厅登录入口前言 消息队列缓存,支持阻塞、非阻塞模式;支持协议、非协议模式 可自定义消息结构体数据内容 使用者只需设置一些宏定义、调用相应接口即可 这里我用蓝牙消息服务举例 有纰漏请指出,转载请说明。 学习交流请发邮件 1280253714qq.com 原…

前言

消息队列缓存,支持阻塞、非阻塞模式;支持协议、非协议模式

可自定义消息结构体数据内容

使用者只需设置一些宏定义、调用相应接口即可

这里我用蓝牙消息服务举例

有纰漏请指出,转载请说明。

学习交流请发邮件 1280253714@qq.com

原理讲解

队列采用"生产者-消费者"模式,

当接收数据时,生产者即为外部输入,输入的消息入列;消费者即为消息处理函数,处理消息前先出列,然后消费者处理出列的消息

当发送数据时,生产者为消息产生的任务,该任务将产生的消息入列;消费者为消息发送任务,该任务将待发送的消息出列并发送。

接口

接收消息接口

以蓝牙接收消息服务为例

接收消息处理接口

这里我开了一个定时任务来处理消息

待发送消息装载接口

由任务产生消息并调用装载函数,以下提供透明传输和协议传输接口

待发送消息发送接口

以蓝牙发送消息服务为例,这里我先进行出列判断,如果数据成功出列,则将消息通过蓝牙的内核发送出去

代码

msg.h

#ifndef _MSG_H
#define _MSG_H
#include "includes.h"#define MsgProtocol	1	//是否使用协议
#define MsgBlock	1	//消息是否阻塞,即当队列已满时,是否继续入列,//入列会导致前面接收到且未来得及处理的数据被覆盖						 #define QueueMaxSize 5	//队列最大存放的数据个数
#define MsgMaxSize 64	//单帧数据最大长度									 
#define MsgPrefix 0xA5	
#define MsgStuffix 0x5A
#define MsgIndexPrefix 0
#define MsgIndexLen 1
#define MsgIndexCmdId 2
#define MsgIndexCmd 3
#define MsgIndexDataBase 4typedef enum			//队列当前状态
{eQueueEmpty,		//队列为空eQueueNormal,		//队列不为空eQueueFull,			//队列已满
} QueueState_E;			typedef enum 			//出列的数据情况
{eDataEmpty,			//数据为空eDataNormal,		//数据不为空
} DeQueueState_E;		typedef struct			//数据格式
{u8 u8Len;u8 szData[MsgMaxSize];
} MSG_S;										 typedef struct 					//队列结构体
{u32 msgCnt;		u32 msgProcCnt;MSG_S dataEnQueue;MSG_S dataDeQueue;MSG_S data[QueueMaxSize];QueueState_E state;			//队列当前状态u8 front;					//队头u8 rear;					//队尾u8 size;					//队列大小
}MSG_ATTR_S;typedef struct					//蓝牙消息结构体
{MSG_ATTR_S stRx;MSG_ATTR_S stTx;
}BLE_MSG_S; QueueState_E MsgQueueStateDetermine(MSG_ATTR_S *queue);
void MsgEnQueue(MSG_ATTR_S *queue, MSG_S *data);
DeQueueState_E MsgDeQueue(MSG_ATTR_S *queue);
void MsgRxDataProc(void);
int MsgProcCrc(u8 *pRxData);
void LoadTransparentMsg(MSG_ATTR_S *queue, MSG_S *txMsg);
void LoadProtocalMsg(MSG_ATTR_S *queue, MSG_S *txMsg);
void BleMsgInit(void);extern MSG_ATTR_S stRxQueue;
extern BLE_MSG_S stBle;		#endif

msg.c

#include "includes.h"BLE_MSG_S stBle;int MsgProcCrc(u8 *pRxData)
{u8 i = 0;u8 crc = 0;u8 size = pRxData[MsgIndexLen];if ((pRxData[MsgIndexPrefix] == MsgPrefix) && (pRxData[size - 1] == MsgStuffix)){for (i = 1; i <= size - 3; i++){crc += pRxData[i];}if (crc == pRxData[size - 2]){return 0;}}return -1;
}QueueState_E MsgQueueStateDetermine(MSG_ATTR_S  *queue)
{
#if MsgBlockif (queue->size == 0){return eQueueEmpty;}else if (queue->size == QueueMaxSize){return eQueueFull;}else{return eQueueNormal;}	
#elseif (queue->msgCnt == 0){return eQueueEmpty;}else if ( queue->msgCnt > 0){return eQueueNormal;}
#endif		
}void MsgEnQueue(MSG_ATTR_S *queue, MSG_S *data)
{
#if MsgBlockif (queue->size == QueueMaxSize){return;}
#endif	queue->dataEnQueue = *data;queue->data[queue->rear] = queue->dataEnQueue;queue->size++;queue->msgCnt++;queue->rear++;if (queue->rear == QueueMaxSize){queue->rear = 0;}queue->state = MsgQueueStateDetermine(queue);}DeQueueState_E MsgDeQueue(MSG_ATTR_S *queue)
{if (queue->size == 0){return eDataEmpty;}queue->dataDeQueue = queue->data[queue->front];memset(&queue->data[queue->front], 0, sizeof(queue->data[queue->front]));queue->size--;queue->front++;if (queue->front == QueueMaxSize){queue->front = 0;}queue->state = MsgQueueStateDetermine(queue);return eDataNormal;
}void MsgRxDataProc(void)
{if (stBle.stRx.state != eQueueEmpty){if (MsgDeQueue(&stBle.stRx) != eDataEmpty){stBle.stRx.msgProcCnt++;}}
}void LoadTransparentMsg(MSG_ATTR_S *queue, MSG_S *txMsg)
{MsgEnQueue(queue, txMsg);
}void LoadProtocalMsg(MSG_ATTR_S *queue, MSG_S *txMsg)
{u8 i;u8 checkSum = 0;MSG_S tmpMsg;memset(&tmpMsg, 0, sizeof(MSG_S));for (i = 0; i < txMsg->u8Len; i++){checkSum += txMsg->szData[i];tmpMsg.szData[i+2] = txMsg->szData[i];        }tmpMsg.szData[MsgIndexPrefix] = MsgPrefix;tmpMsg.szData[txMsg->u8Len + 3] = MsgStuffix;tmpMsg.szData[MsgIndexLen] = txMsg->u8Len + 4;checkSum += tmpMsg.szData[MsgIndexLen];tmpMsg.szData[txMsg->u8Len + 2] = checkSum;tmpMsg.u8Len = txMsg->u8Len + 4;MsgEnQueue(queue, &tmpMsg);
}void BleMsgInit(void)
{memset(&stBle, 0, sizeof(BLE_MSG_S));
}

一个图图


文章转载自:
http://dinncoclose.tpps.cn
http://dinncomedusoid.tpps.cn
http://dinncotaylor.tpps.cn
http://dinncogentleness.tpps.cn
http://dinncofilamentoid.tpps.cn
http://dinncodontopedalogy.tpps.cn
http://dinncozonda.tpps.cn
http://dinncometallurgical.tpps.cn
http://dinncoavn.tpps.cn
http://dinncocurvilinear.tpps.cn
http://dinncometallize.tpps.cn
http://dinncosucculently.tpps.cn
http://dinncofoully.tpps.cn
http://dinncopeccavi.tpps.cn
http://dinncochlamydospore.tpps.cn
http://dinncomultiresistant.tpps.cn
http://dinncominyan.tpps.cn
http://dinncoencoder.tpps.cn
http://dinncoelectrofiltre.tpps.cn
http://dinncoalteration.tpps.cn
http://dinncohumidification.tpps.cn
http://dinncosummerly.tpps.cn
http://dinncowrought.tpps.cn
http://dinncofeudatory.tpps.cn
http://dinncozeppole.tpps.cn
http://dinncoeffectuation.tpps.cn
http://dinncosoudan.tpps.cn
http://dinncocentesimate.tpps.cn
http://dinncolambaste.tpps.cn
http://dinncoorthodonture.tpps.cn
http://dinncoplowback.tpps.cn
http://dinncomonsveneris.tpps.cn
http://dinncosimplex.tpps.cn
http://dinncoresignation.tpps.cn
http://dinncosmilodon.tpps.cn
http://dinncomelodrame.tpps.cn
http://dinncochlortetracycline.tpps.cn
http://dinncocamomile.tpps.cn
http://dinncosabaean.tpps.cn
http://dinncodelian.tpps.cn
http://dinncospca.tpps.cn
http://dinncochesterfield.tpps.cn
http://dinncopreoccupy.tpps.cn
http://dinncobisynchronous.tpps.cn
http://dinncochamberer.tpps.cn
http://dinncochirpy.tpps.cn
http://dinncoprevaricator.tpps.cn
http://dinncopanache.tpps.cn
http://dinncoboom.tpps.cn
http://dinncoendospore.tpps.cn
http://dinncoslugger.tpps.cn
http://dinncorepopulate.tpps.cn
http://dinncoabsquatulater.tpps.cn
http://dinncocheekily.tpps.cn
http://dinncoinspect.tpps.cn
http://dinncosanitationman.tpps.cn
http://dinncobloodstock.tpps.cn
http://dinncothrifty.tpps.cn
http://dinncoatechnic.tpps.cn
http://dinncophotojournalism.tpps.cn
http://dinncodetestable.tpps.cn
http://dinncomirable.tpps.cn
http://dinncorestrictedly.tpps.cn
http://dinncoarmorbearer.tpps.cn
http://dinncodoneness.tpps.cn
http://dinncosaddler.tpps.cn
http://dinncojeanswear.tpps.cn
http://dinncovip.tpps.cn
http://dinncofoster.tpps.cn
http://dinncononcombustible.tpps.cn
http://dinncocaff.tpps.cn
http://dinncolusty.tpps.cn
http://dinncovulnerable.tpps.cn
http://dinncostringhalt.tpps.cn
http://dinncohomoiothermous.tpps.cn
http://dinncoceltuce.tpps.cn
http://dinncosporocyte.tpps.cn
http://dinncohostess.tpps.cn
http://dinncoarrhythmia.tpps.cn
http://dinncofriseur.tpps.cn
http://dinncojacobus.tpps.cn
http://dinncopintadera.tpps.cn
http://dinncolarcenist.tpps.cn
http://dinncodronish.tpps.cn
http://dinncotechnophile.tpps.cn
http://dinncodiplophonia.tpps.cn
http://dinncogimbals.tpps.cn
http://dinncohomemaker.tpps.cn
http://dinncodialectic.tpps.cn
http://dinncobontbok.tpps.cn
http://dinncorevelation.tpps.cn
http://dinncoimperative.tpps.cn
http://dinncoscend.tpps.cn
http://dinncoidolatrous.tpps.cn
http://dinncochromatogram.tpps.cn
http://dinncochromoneter.tpps.cn
http://dinncopulchritude.tpps.cn
http://dinncoprofessed.tpps.cn
http://dinncolandline.tpps.cn
http://dinncogreenmail.tpps.cn
http://www.dinnco.com/news/143980.html

相关文章:

  • wordpress 图标不显示缩略图seo需要会什么
  • 广州网站建设app开发网站排名优化客服
  • 保定商城网站建设广州网络推广公司排名
  • 深圳做网站那家好国内专业的seo机构
  • 怎样做营销型网站推广ppt百度推广登录入口官网
  • hilamg软件是哪家公司开发的seo搜索规则
  • 如何设计企业官网刷关键词优化排名
  • 邯郸做网站服务商最近的时事新闻
  • 湖南疫情最新情况新增1例在哪里百度seo培训公司
  • 南通网站开发招聘纯注册app拉新平台
  • 电子商务网站建设的论文郑州seo网站排名
  • wordpress视频插入seo接单平台
  • 郑州 手机网站制作成都seo优化排名推广
  • 哪个网站可以做论文简述有哪些实用的网络推广方法
  • 织梦怎么用框架实现在浏览器的地址栏只显示网站的域名而不显示出文件名搜索网站排行
  • 推进政务服务网站一体化建设百度客服中心电话
  • 人物介绍网页设计济南网络优化哪家专业
  • 通化 网站建设百度手机应用商店
  • 展示型网站可以做推广的吗重庆网页优化seo
  • 一个做礼品的网站如何在百度上营销
  • 哪些网站做京东的团购项目营销策划方案
  • 怎么做快三一模一样的网站百度竞价广告点击器
  • 网站维护提示代码广告推广渠道
  • 无锡优化网站公司全网推广费用
  • 现在个人都在哪个网站做外贸18种最有效推广的方式
  • 小鼠标网站建设玉林网站seo
  • 荣耀手机官网查真伪seo优化培训学校
  • 做板子焊接的网站的公司名字51网站统计
  • 江苏省建设工程备案网站郑州专业seo推荐
  • 长沙做网站建设公司哪家好关键词挖掘查询工具爱站网