嵌入式杂记 -- MCU的大小端模式
MCU的大小端模式
- 大端模式
- 小端模式
- 大小端模式测试
- 联合体概念
- MCU大小端模式测试
- 大端模式测试
- 小端模式测试
- 大小端模式转换
在进行MCU开发的时候,我们需要注意MCU的数据存储模式,在嵌入式中有两种不同的存储模式,分别是 大端模式和小端模式。
大端模式
所谓的大端模式,意思就是高字节的数据存储在低位,低字节数据存储在高位。具体的表示方式如下图所示

小端模式
所谓的小模式,意思就是低字节的数据存储在低位,高字节数据存储在高位。具体的表示方式如下图所示

大小端模式测试
针对不同的MCU,我们都需要分清其数据的存储方式,如果存储方式不对,那么在不同的MCU之间进行通信时,就会因为数据格式的不对导致通信错误。那么当我们拿到一个MCU后,又该如何知道其存储模式呢,我们可以使用C语言中的联合体进行区分。
联合体概念
联合体是C语言中的一种数据结构,它的定义方式跟结构体类似,但是跟结构体不同的是,联合体中的所有成员变量都使用同一块存储空间,存储空间的大小由联合体中最大的成员变量的数据类型决定。
union test
{unsigned char a;unsigned short b;unsigned int c;
};
在上面的程序中,定义了一个联合体,里面有3个成员变量,因为联合体中的成员变量是共用同一个存储空间的,所以上面的联合体中的存储空间就由最大的成员变量决定,也就是unsigned int类型。
MCU大小端模式测试
对于市面上的常用MCU,Crotex-M系列的MCU其存储格式是小端模式,而51内核的MCU其存储格式是大端模式,这两种MCU我们都可以使用Keil软件进行测试。
大端模式测试
要测试大端模式,我们需要先安装Keil的C51编译器,安装好之后我们打开软件。编写一段测试程序。
union test
{unsigned char mychar[4];unsigned long mylong;
};void main()
{union test test1;test1.mychar[0] = 0x12;test1.mychar[1] = 0x34;test1.mychar[2] = 0x56;test1.mychar[3] = 0x78; }
测试程序编写好之后,我们打开Keil的软件仿真界面
我们打开Options for Target->Debug->Use Simulator


配置好之后,点击仿真按键进入仿真模式


从keil的变量地址中我们可以看到,mychar[0]的值为0x12,但是在mylong变量中,0x12被放到了高位,所以从上面测试可以看出,C51内核的MCU是大端模式
小端模式测试
小端模式的测试跟大端模式的测试差不多,但是要安装Keil的ARM编译器。安装好之后我们打开软件,编写一段测试程序。
union test
{unsigned char mychar[4];unsigned int myint;
};void main()
{union test test1;test1.mychar[0] = 0x12;test1.mychar[1] = 0x34;test1.mychar[2] = 0x56;test1.mychar[3] = 0x78; }
测试程序编写好之后,我们打开Keil的软件仿真界面
我们打开Options for Target->Debug->Use Simulator



从keil的变量地址中我们可以看到,mychar[0]的值为0x12,在myint变量中,0x12被放到了低位,所以从上面测试可以看出,Crotex-M内核的MCU是小端模式。
大小端模式转换
对于需要在不同架构的MCU之间进行通信的场景来说,通常都需要进行大小端的转换,下面就给出常用的大小端转换的代码
static unsigned int little1,big1,little2,big2;
unsigned int swap_unsigned_int(unsigned int in_32)
{unsigned int out_32;out_32 = ((in_32 & 0xFF) << 24) | (((in_32 >> 8) & 0xFF) << 16) | (((in_32 >> 16) & 0xFF) << 8) | (((in_32 >> 24) & 0xFF));return out_32;
}void main()
{// 大端转小端big1 = 0x78563412;little1 = swap_unsigned_int(big1);// 小端转大端little2 = 0x12345678;big2 = swap_unsigned_int(little2);
}

相关文章:
嵌入式杂记 -- MCU的大小端模式
MCU的大小端模式 大端模式小端模式大小端模式测试联合体概念MCU大小端模式测试大端模式测试小端模式测试 大小端模式转换 在进行MCU开发的时候,我们需要注意MCU的数据存储模式,在嵌入式中有两种不同的存储模式,分别是 大端模式和小端模式。 …...
对这套BI零售数据分析方案心动,是零售人天性
零售数据分析做了这么多年,难道真的没累积点经验,摸索出一条又快又能满足绝大多数需求的数据分析捷径?别人不知道,奥威BI还真就有这么一套标准化的BI零售数据分析方案,不管是服装零售、医药连锁、商超都能利用这套方案…...
vuekeyclock 集成
前端集成keycloak鉴权的主要写法, 在main.js里面写 import VueKeycloakJs from dsb-norge/vue-keycloak-js import { KeycloakInstance } from "keycloak-js";// 回调地址 const pageIndex process.env.NODE_ENV production ? http://xxxx/#/ : http:…...
ARM Linux 基础学习 / 配置交叉编译工具链 / 编译 Linux 应用和驱动 / 编译内核
编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料(如 百问网的《嵌入式Linux应用开发完全手册》,在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO:开发板资料》或《2.2 全系列Linux教程…...
通讯协议学习之路(实践部分):SPI开发实践
通讯协议之路主要分为两部分,第一部分从理论上面讲解各类协议的通讯原理以及通讯格式,第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN;视频会发布在bilibili(UID:399951374) 本文…...
【系统安装】ubuntu20.04启动盘制作,正经教程,小白安装教程,百分百成功安装
1.所需材料: 64GBU盘(其实8g和16g也可以) 2.制作U盘启动盘 使用windows制作ubuntu 20.04启动盘 1)下载制作工具:Rufus:Rufus - 轻松创建 USB 启动盘 2)插入用来做启动盘的U盘 3࿰…...
2023云计算发展趋势
目录 一、云计算是什么? 二、云计算发展趋势 三、总结 一、云计算是什么? 云计算是一种基于互联网的计算方式,通过网络连接的方式提供计算能力、存储服务、应用程序和数据资源。它通常通过虚拟化技术实现多个计算机资源的池化,…...
C# .NET Core API Controller以及辅助专案
准备工作 Windows 10Visual Studio 2019(2017就有可以集中发布到publish目录的功能了吧)C#将方法封装(据说可以提高效率,就像是我们用的dll那种感觉新增专案作为我们API的辅助专案(作用类似dll,此处,你也可以在你自己的API专案里建文件夹,但…...
asp.net图书管理系统
asp.net图书管理系统 基本操作图书管理 读者管理 借书 修改资料 修改密码 说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于C#winform架构和sql server数据库 功能模块: 图书管理 读者管理 借书 修改资料 修改…...
概念解析 | LoRA:低秩矩阵分解在神经网络微调中的作用
注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:基于低秩矩阵分解的神经网络微调方法LoRA LoRA: Low-Rank Adaptation of Large Language Models LoRA由如下论文提出,详细信息请参见论文原文 https://arxiv.org/abs/2106.0968…...
前端---CSS的盒模型
文章目录 什么是盒模型?设置边框设置内边距设置外边距块级元素水平居中 什么是盒模型? 页面上的每个HTML元素都是一个一个的“盒子”,这些盒子由:内容、内边距、边框、外边距组成。 我们可以和住的房子联系起来,更好…...
Linux可以投屏到电视吗?用网页浏览器就能投屏到电视!
Linux系统的电脑如果要投屏到安卓电视屏幕上,可以使用投屏工具AirDroid Cast的网页版和TV版一起实现。 首先,在Linux系统的电脑里用chrome浏览器或edge浏览器打开webcast.airdroid.com。这就是AirDroid Cast的网页版。你可以看到中间白色框框的右上角有个…...
云汇优想:抖音矩阵系统有哪些类型?
抖音作为中国最热门的短视频分享平台之一,不断推陈出新,在内容管理和展示方面也进行了创新。其中,抖音矩阵系统是一项重要的功能,它提供了多种类型的矩阵,帮助用户更好地管理和展示自己的内容。那么,抖音矩…...
XSS 漏洞的理解
谈一谈你对XSS 漏洞的理解 1.漏洞描述 跨站脚本攻击是一种Web安全漏洞。攻击者利用该漏洞,在网页中注入恶意代码,等待受害者访问被注入恶意代码的网页。网页中的恶意代码会被浏览器识别,并执行。恶意代码通常是Javascript脚本,由…...
cocosCreator 之内存管理和释放
版本: 3.4.0 语言: TypeScript 环境: Mac 回顾 前面有两篇博客说明了: cocosCreator 之 resources动态加载、预加载 讲述了静态引用资源,动态加载和预加载相关cocosCreator 之 Bundle 讲述了AssetManager关于对内置…...
飞天使-template模版相关知识
遇到报错django.template.exceptions.TemplateSyntaxError: ‘staticfiles’ is not a registered tag library. Must ROOT_URLCONF TEMPLATES [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [os.path.join(BASE_DIR, templates)],APP_DIRS: True,OPTI…...
一、Hadoop3.1.3集群搭建
一、集群规划 hadoop01(209.2)hadoop02(209.3)hadoop03(209.4)HDFSNameNode DataNodeDataNodeSecondaryNameNode DataNodeYARNNodeManagerResourceManager NodeManagerNodeManager NameNode和SecondaryNameNode不要放在同一台服务器上 二、创建用户 useradd atguigu passwd *…...
QML16、从 C++ 定义 QML 类型
从 C++ 定义 QML 类型 当使用 C++ 代码扩展 QML 时,可以向 QML 类型系统注册 C++ 类,以使该类能够用作 QML 代码中的数据类型。 虽然任何 QObject 派生类的属性、方法和信号都可以从 QML 访问,如将 C++ 类型的属性暴露给 QML 中所讨论的,但在向类型系统注册之前,此类类不能…...
【中间件篇-Redis缓存数据库06】Redis主从复制/哨兵 高并发高可用
Redis高并发高可用 复制 在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis 副本。复制功能是高可用Re…...
LeetCode(12)时间插入、删除和获取随机元素【数组/字符串】【中等】
目录 1.题目2.答案3.提交结果截图 链接: 380. O(1) 时间插入、删除和获取随机元素 1.题目 实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
