认真学习套壳技巧-消息队列-日志模块
流程:
第一步把开门日志整理到结构体logData 它是一个大容器 万能对接的!
memset(&logData , 0x00 , sizeof(openlogDataType));
logData.type = OPENLOG_FORM_CARD;
logData.length = openResult;
memcpy(logData.data , (uint8_t *)tag , sizeof(tagBufferType));
journal.save_log(&logData);
也就是在各种开门中只需要调用journal.save_log(&logData);即可!
第二步:保存函数回到log模块做了消息队列
void journal_save_log( openlogDataType *saveLog )
{journalTaskQueueType message;memset(&message , 0x00 , sizeof(journalTaskQueueType));message.cmd = LOG_ADD;message.sn = 0;memcpy(&message.openlog , saveLog , sizeof(openlogDataType));xQueueSend( xLogQueue, ( void* )&message, NULL );
}它的技术是在装了一层壳子 队列在任务循环中被处理
第三部:log任务处理
if(xQueueReceive( xLogQueue, &pst, 1000 ) == pdTRUE)
{
switch(pst.cmd)
{
case LOG_ADD:
log(DEBUG,"接到增加LOG命令, get sn =%d ,device sn = %d\n" , pst.sn , journalSn);
journal_add_log(&pst);
}
它会去执行函数 journal_add_log 依次退去壳子
最后直接 journal_send_queue(LOG_SEND , 0 );回到任务有网诺就发出去 没网诺就不发其实他做了一个定时器 一直在给任务发消息 你去发日志给平台吧!
+++++++++++++补充 随处可见的金蚕脱壳++++++++++++++++
typedef struct
{tagTypeEnum type;uint8_t cardType;tagPowerEnum tagPower;uint8_t allDataCrc;uint8_t UID[16];uint8_t UIDLength;uint8_t buffer[128];uint8_t sak;uint8_t readFinshFlag;
}tagBufferType;结构体tagBufferType主要是代码内部处理,真正有用的信息是uint8_t buffer[128];它对应多个的结构体来对倒。第一个特斯联用户卡:typedef struct _tagUserDataType{//0区 1块 密码KeyA 111111111111communityType community; // 主住户信息 8字节uint8_t house0[2]; //房间号uint8_t name[6]; //业主姓名//0区 2块uint8_t setting; // 设置 1字节uint8_t start[3]; // 发卡时间 3字节uint8_t stop[3]; // 截止时间 3字节uint8_t crc0; // 校验 1字节uint8_t cardID[4]; //卡号 4字节uint8_t version; //版本 1uint8_t cardType; //卡类 1uint8_t crc16_0[2]; //CRC 2//1区 0块uint8_t id[9]; //身份证 9(当最后一位为x 时 用A代替)//2区 0块1块communityType communitys[4];// 主住户信息 4*8字节//2区 2块uint8_t house1[2]; //房间号1uint8_t house2[2]; //房间号2uint8_t house3[2]; //房间号3uint8_t house4[2]; //房间号4uint8_t crc1; // 校验 1字节uint8_t fdgs1[4]; //分断 1*4uint16_t userFloor;uint8_t crc16_1[2]; //CRC 16
}tagUserDataType; //用户卡 共89字节对倒:比如临时变量tagUserDataType tagUser; memcpy((uint8_t*)&tagUser,tag→buffer,sizeof(tagUserDataType));如此很快的完成数组→结构体赋值。
认真学习套壳技巧-消息队列-日志模块相关推荐
- FreeRTOS记录(六、FreeRTOS消息队列—Enocean模块串口通讯、RAM空间不足问题分析)
本篇文章记录FreeRTOS消息队列的使用,我不从理论开始介绍,直接用起来,然后从发现的问题分析记录解决. ..补充RAM空间不足问题内容,增加FreeRTOS任务占用的RAM空间说明 2021/11 ...
- 拉勾网《32个Java面试必考点》学习笔记之十一------消息队列与数据库
本文为拉勾网<32个Java面试必考点>学习笔记.只是对视频内容进行简单整理,详细内容还请自行观看视频<32个Java面试必考点>.若本文侵犯了相关所有者的权益,请联系:txz ...
- 进程通信学习笔记(System V消息队列)
跟Posix消息队列一样,不存在这样的要求:某个进程往一个队列中写入一个消息,另外一个进程下在等待该队列上一个消息的到达 系统中的消息队列,定义在<sys/msg.h>头文件中的信息结构: ...
- 【Redis学习08】Redis消息队列实现异步秒杀
文章目录 1. 消息队列 1.1 基于List结构模拟消息队列 1.2 基于PubSub的消息队列 1.3 基于Stream的消息队列 2. 基于Stream的消息队列---消费者组 2.1 消费者组 ...
- 实战干货:基于Redis6.0 部署迷你版本消息队列
点击关注公众号,实用技术文章及时了解 技术研究背景 由于目前的研发团队处于公司初创阶段,尚未有能成熟的运维体系,对于市面上常见的成熟MQ搭建维护能力不足,但是又希望能有一款轻量级的消息系统供研发团队的 ...
- 天天在用消息队列,却还不知道为啥要用 MQ ,这就尴尬了
说起消息队列,早期有"上古"的 ActiveMQ,如今有应用广泛的 RocketMQ.Kafka,到最近推出的 Pulsar,伴随着技术的持续发展,一代又一代的消息队列不断推陈出新 ...
- 轻松搞定RabbitMQ开篇:Java消息队列与JMS的诞生
Java 帝国之消息队列 原创: 刘欣 码农翻身 2017-02-06 张家村的历史 Java 帝国的张家村正在迎来一次重大的变革. 5年前网上购物兴起的时候, 帝国非常看好, 决定向这个领域进军, ...
- 消息队列基本原理和选型对比
消息队列使用场景 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,削峰填谷等问题.实现高性能.高可用.可伸缩和最终一致性架构. 解耦:多个服务监听.处理同一条消息,避免多次 rpc ...
- 主流消息队列有哪些?
大家好,我是[架构摆渡人],一只十年的程序猿.这是消息队列的第一篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友. ActiveMQ ActiveMQ是一个很老 ...
最新文章
- java排序的例子_Java的8大排序的基本思想及实例解读
- 大数据和高并发的解决方案汇总
- 【刷题】LOJ 6014 「网络流 24 题」最长 k 可重区间集
- PHP一个比较完善的树形结构代码
- 搜索引擎优化不是网页标签优化
- 江苏计算机云服务,云呐|江苏企业机房环境动环监控服务商系统智能监测
- tcp传输控制协议-报文格式
- 鬼谷八荒steam修改器|鬼谷八荒多功能修改器
- IOS开发之逆向分析
- CPU飙升到100%问题排查
- 【python教程入门学习】Python字典及基本操作(超级详细)
- 23 个学习 JavaScript 的地方
- vue 生命周期activated与created使用
- 响铃:揭底滴滴们跨界营销“真相”,再教你玩一出好戏
- Docker安装PHP-FPM5.6 (自带redis扩展,Mysql扩展,GD库扩展(支持JEPG))
- 【电脑办公软件】万彩办公大师教程丨TextDiff文本比较工具
- APP项目开发失败案例经验汇总
- IntelliJ IDEA中文注释字体更换最佳方法
- c语言cl.exe,cl.exe
- Git泄露 之Stash(做题过程)