STM32 大小端与字节对齐使用记录
大小端
串口数据包解析
MDK stm32 小段模式
接收到的数据包:
DD 03 00 1B 11 59 00 00 00 00 17 70 00 00 2F 39 00 00 00 00 00 03 23 64 00 0E 02 0B 6E 0B 84 FC EA 77
其中数据内容为:
DD 03 00 1B
11 59 //电压mV
00 00
00 00
17 70
00 00
2F 39
00 00
00 00
00 03
23
64
00
0E
02
0B 6E
0B 84
FC EA 77
我们设计的结构体
typedef struct
{uint16_t total_voltage;int16_t current;uint16_t RM;uint16_t FCC; uint16_t cycle;uint16_t date; uint16_t balanced_l;uint16_t balanced_h;union{struct{uint16_t Cell_OV :1; uint16_t Cell_UV :1; uint16_t Pack_OV :1;uint16_t Pack_UV :1; uint16_t OTC :1; uint16_t UTC :1; uint16_t OTD :1; uint16_t UTD :1; uint16_t OCC :1; uint16_t OCD :1; uint16_t SC :1; uint16_t AFE_ERR :1; uint16_t PF :1; uint16_t RSVD1 :1; uint16_t RSVD2 :1; uint16_t RSVD3 :1; }StatusBit;uint16_t StatusWord;}ProtectStatus;uint8_t FW_ver;uint8_t RSOC;union{struct{uint8_t CHG_FET :1; uint8_t DSG_FET :1; uint8_t RSVD1 :1;uint8_t RSVD2 :1; uint8_t RSVD3 :1; uint8_t RSVD4 :1; uint8_t RSVD5 :1; uint8_t RSVD6 :1; }StatusBit;uint8_t StatusByte;}FETStatus; uint8_t number_of_series_num;uint8_t NTC_sensor_num;uint16_t NTC_temperature[NUMBER_NTC_SENSOR];}BMS_03_BaseInfo_statues;
使用内容复制函数
memcpy(&bms_baseinfo,buf+4,buf[3]);
想要的数据:
total_voltage = 0x1159
实际的数据:
total_voltage = 0x5911
解决方法:
| CMSIS都已经给你写好的,请看core_cm3.h |
Name Core Generated CPU Instruction Description
void __NOP (void) M0, M3, M4 NOP No Operation
void __WFI (void) M0, M3, M4 WFI Wait for Interrupt
void __WFE (void) M0, M3, M4 WFE Wait for Event
void __SEV (void) M0, M3, M4 SEV Set Event
void __ISB (void) M0, M3, M4 ISB Instruction Synchronization Barrier
void __DSB (void) M0, M3, M4 DSB Data Synchronization Barrier
void __DMB (void) M0, M3, M4 DMB Data Memory Barrier
uint32_t __REV (uint32_t value) M0, M3, M4 REV Reverse byte order in integer value.
uint32_t __REV16 (uint16_t value) M0, M3, M4 REV16 Reverse byte order in unsigned short value.
sint32_t __REVSH (sint16_t value) M0, M3, M4 REVSH Reverse byte order in signed short value with sign extension to integer.
uint32_t __RBIT (uint32_t value) M3, M4 RBIT Reverse bit order of value
uint8_t __LDREXB (uint8_t *addr) M3, M4 LDREXB Load exclusive byte
uint16_t __LDREXH (uint16_t *addr) M3, M4 LDREXH Load exclusive half-word
uint32_t __LDREXW (uint32_t *addr) M3, M4 LDREXW Load exclusive word
uint8_t __STREXB (uint8_t value, uint8_t *addr) M3, M4 STREXB Store exclusive byte
uint16_t __STREXH (uint16_t value, uint16_t *addr) M3, M4 STREXH Store exclusive half-word
uint32_t __STREXW (uint32_t value, uint32_t *addr) M3, M4 STREXW Store exclusive word
void __CLREX (void) M3, M4 CLREX Remove the exclusive lock created by __LDREXB, __LDREXH, or __LDREXW
void __SSAT (void) M3, M4 SSAT saturate a signed value
void __USAT (void) M3, M4 USAT saturate an unsigned value
字节对齐
执行完这个代码后
memcpy(&bms_baseinfo,buf+4,buf[3]);
我们希望
NTC_temperature[0] = 0x6E0B;
NTC_temperature[1] = 0x840B;
实际上
NTC_temperature[0] = 0x0B6E;
NTC_temperature[1] = 0x0084;
解决方法:
#pragma pack (1)
//结构体
#pragma pack ()
相关文章:
STM32 大小端与字节对齐使用记录
大小端 串口数据包解析 MDK stm32 小段模式 接收到的数据包: DD 03 00 1B 11 59 00 00 00 00 17 70 00 00 2F 39 00 00 00 00 00 03 23 64 00 0E 02 0B 6E 0B 84 FC EA 77 其中数据内容为: DD 03 00 1B 11 59 //电压mV 00 00 00 00 17 70 …...
RabbitMQ中basic**方法汇总与参数解释
当使用RabbitMQ进行消息传递时,Channel对象提供了一组称为"basic方法"的方法,用于执行最基本的消息传递操作。在本篇博客中,我们将详细介绍这些方法,包括示例和参数解释。 1. basicPublish 方法 basicPublish 方法用于…...
linux之/etc/default/useradd文件
/etc/default/useradd文件是在使用useradd添加用户时,一个需要调用的默认的配置文件之一,可以使用命令"useradd -D"进行修改。 useradd用法: [rootcentos79-3 mail]# useradd --help Usage: useradd [options] LOGINuseradd -Dus…...
3.primitive主数据类型和引用 认识变量
3.1 声明变量 Java注重类型。它不会让你做出把长颈鹿类型变量装进兔子类型变量中这种诡异又危险的举动——如果有人对长颈鹿调用“跳跃”这个方法会发生什么样的悲剧?并且它也不会让你将浮点数类型变量放进整数类型的变量中,除非你先跟编译器确认过数字…...
【群智能算法改进】一种改进的光学显微镜算法 IOMA算法[1]【Matlab代码#60】
文章目录 【获取资源请见文章第5节:资源获取】1. 光学显微镜算法(OMA)1.1 物镜放大倍数1.2 目镜放大倍数 2. 改进后的IOMA算法2.1 透镜成像折射方向学习 3. 部分代码展示4. 仿真结果展示5. 资源获取说明 【获取资源请见文章第5节:…...
第三课-软件升级-Stable Diffusion教程
前言: 虽然第二课已经安装好了 SD,但你可能在其它地方课程中,会发现很多人用的和你的界面差距很大。这篇文章会讲一些容易忽略或者常常需要做的操作,不一定要完全照做,以后再回过头看看也可以。 1.控制类型 问题:为什么别人有“控制类型”部分,而我没有?如下红色方框…...
【C++】设计模式之——建造者
建造者模式概念模拟实现建造者模式代码实现 建造者模式 首先先大体了解一下,建造者模式是什么意思,它是怎么实现的? 首先,建造者模式是一种创建型设计模式再一个它是使用多个简单的对象一步一步的搭建出一个复杂的对象它可以将一个…...
【C++】基础语句(学习笔记)
一、分支 1、三种基本结构 顺序结构分支结构循环结构 2、if与switch对比 1)使用场景 switch只支持常量值固定相等的分支判断if可以判断区间范围用switch能做的,用if都能做 2)性能比较 分支少时,差别不是很大。分支多时&…...
大厂秋招真题【DP】米哈游20230924秋招T2-米小游与魔法少女-奇运
米哈游20230924秋招T2-米小游与魔法少女-奇运 题目描述与示例 题目描述 米小游都快保底了还没抽到希儿,好生气哦!只能打会活动再拿点水晶。 米小游和世界第一可爱的魔法少女 TeRiRi 正在打 BOSS,BOSS 的血量为h,当 BOSS 血量小…...
LVS+Keepalived 高可用集群负载均衡
一.keepalived介绍 1.1.Keepalived实现原理 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务。 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态。 若当前在线的路由器失效,则其他路由器会根据设置…...
Qt QList类和QLinkedList类 详解
一、QList 类 对于不同的数据类型,QList<T>采取不同的存储策略,存储策略如下: 如果T 是一个指针类型或指针大小的基本类型(该基本类型占有的字节数和指针类型占有的字节数相同),QList<T>将数值直接存储在它的数组当…...
Mac安装GYM遇到的一些坑
以下是遇到的一些问题 安装GitHub上说的直接 pip install gym成功了,但是运行实例报错没安装gym[classic_control],所以就全安装一下[all] 安装GitHub上说的直接 pip install gym成功了,但是运行实例报错没安装gym[classic_control]ÿ…...
【高级rabbitmq】
文章目录 1. 消息丢失问题1.1 发送者消息丢失1.2 MQ消息丢失1.3 消费者消息丢失1.3.1 消费失败重试机制 总结 2. 死信交换机2.1 TTL 3. 惰性队列3.1 总结: 4. MQ集群 消息队列在使用过程中,面临着很多实际问题需要思考: 1. 消息丢失问题 1.1…...
数百个下载能够传播 Rootkit 的恶意 NPM 软件包
供应链安全公司 ReversingLabs 警告称,最近观察到的一次恶意活动依靠拼写错误来诱骗用户下载恶意 NPM 软件包,该软件包会通过 rootkit 感染他们的系统。 该恶意软件包名为“node-hide-console-windows”,旨在模仿 NPM 存储库上合法的“node-…...
SpringBoot的error用全局异常去处理
记录一下使用SpringBoot2.0.5的error用全局异常去处理 在使用springboot时,当访问的http地址或者说是请求地址输错后,会返回一个页面,如下: 这是因为请求的地址不存在,默认会显示error页面 但我们实际需要一个接口&a…...
MyBatisPlus(十一)包含查询:in
说明 包含查询,对应SQL语句中的 in 语句,查询参数包含在入参列表之内的数据。 in Testvoid inNonEmptyList() {// 非空列表,作为参数List<Integer> ages Stream.of(18, 20, 22).collect(Collectors.toList());in(ages);}Testvoid in…...
Linux命令定位与查找:which、whereis和find的用法详解
文章目录 Linux命令的定位与查找1. 简介Linux路径环境变量命令行和Shell 2. which命令which命令的作用使用which命令定位可执行文件多个可执行文件的定位which命令的选项及其使用 3. whereis命令whereis命令的作用使用whereis命令查找二进制文件查找源代码文件whereis命令的选项…...
LeetCode 面试题 17.10. Find Majority Element LCCI【摩尔投票法】简单
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
多校联测11 模板题
题目大意 给你四个整数 n , m , s e e d , w n,m,seed,w n,m,seed,w,其中 n , m n,m n,m为两个多项式 A ( x ) ∑ i 0 n a i x i A(x)\sum\limits_{i0}^na_ix^i A(x)i0∑naixi和 B ( x ) ∑ i 0 m b i x i B(x)\sum\limits_{i0}^mb_ix^i B(x)i0∑mbixi…...
Linux SSH连接远程服务器(免密登录、scp和sftp传输文件)
1 SSH简介 SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。传统远程登录和文件传输方式,例如Telnet、FTP,使用明文传输数据,存在很多的安全…...
麒麟系统Kylin-Desktop-V10-SP1个性化设置避坑指南:这些‘隐藏’选项别错过
麒麟系统Kylin-Desktop-V10-SP1个性化设置避坑指南:这些‘隐藏’选项别错过 作为一名深度使用麒麟系统超过三年的开发者,我发现许多用户仅停留在基础设置层面,而忽略了系统内置的诸多能显著提升效率的隐藏功能。本文将分享那些官方文档未明确…...
人工智能生态-魔搭社区
文章目录魔搭社区如何查看token?其他文档什么,没听说过魔搭社区?。。。魔搭社区(ModelScope)非常重要,是国内 AI 开发与应用的核心基础设施与生态枢纽。尤其对做中文 AI、大模型、RAG、多模态应用的开发者 / 企业,它…...
ChatGLM3-6B 32k上下文实测对比:vs Qwen2-7B、Llama3-8B长文本理解能力评测
ChatGLM3-6B 32k上下文实测对比:vs Qwen2-7B、Llama3-8B长文本理解能力评测 1. 评测背景与意义 长文本理解能力是衡量大语言模型实用性的关键指标。在实际应用中,我们经常需要处理长篇文档、代码库分析、多轮对话等场景,模型能否准确理解和…...
KIF iOS功能测试框架终极指南:从入门到精通的10个最佳实践
KIF iOS功能测试框架终极指南:从入门到精通的10个最佳实践 【免费下载链接】KIF Keep It Functional - An iOS Functional Testing Framework 项目地址: https://gitcode.com/gh_mirrors/ki/KIF KIF(Keep It Functional)是一款强大的i…...
旧设备重生计划:使用开源工具OpenCore Legacy Patcher实现Mac系统升级
旧设备重生计划:使用开源工具OpenCore Legacy Patcher实现Mac系统升级 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 随着科技迭代加速,许多旧款M…...
用Keysight/是德科技信号源与频谱仪,一步步搭建5G NR接收机动态范围与ACS测试环境
用Keysight信号源与频谱仪构建5G NR接收机测试环境的实战指南 在5G基站研发与验证过程中,接收机动态范围与邻道选择性(ACS)测试是验证设备抗干扰能力的关键环节。本文将基于Keysight N5182B矢量信号发生器和N9020B MXA频谱分析仪,手把手演示如何搭建符合…...
建行广东江门分行:举办金融消费者权益保护主题活动
为深入贯彻落实金融消费者权益保护工作要求,切实提升公众金融风险防范意识,构建和谐稳定的金融消费环境,3月11日,由建行广东江门分行联合多家单位共同主办的“清朗金融网络 守护安心消费”315消费者权益保护主题活动在江门长堤青年…...
使用HY-Motion 1.0和SolidWorks实现工业设计动画生成
使用HY-Motion 1.0和SolidWorks实现工业设计动画生成 1. 工业设计动画的新可能 想象一下这样的场景:你刚完成了一个精密机械部件的三维设计,现在需要向客户展示它的工作原理。传统方式可能需要找动画师,花费数天时间制作演示动画࿰…...
若依框架代码生成器改造:用Lombok注解让实体类代码瞬间清爽(附完整模板修改步骤)
若依框架代码生成器深度改造:用Lombok注解重构实体类的最佳实践 在Java企业级开发中,若依框架因其丰富的功能模块和高度集成的代码生成器而广受欢迎。然而,默认生成的实体类往往充斥着大量样板代码——每个字段的getter/setter方法、toString…...
别再只盯着成功率了!聊聊视觉语言导航里那些‘坑’:从SG-Nav到TriHelper的实战避雷心得
视觉语言导航实战避坑指南:从SG-Nav到TriHelper的工程化思考 视觉语言导航(VLN)作为具身智能领域的前沿方向,近年来在学术论文中展现出令人振奋的性能指标。但当研究人员真正将这些框架部署到实际项目时,往往会发现论文…...
