嵌入式杂记 -- MCU的大小端模式

news2024/11/15 10:34:22

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);
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1202433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Studio 代码上传gitLab

1、项目忽略文件 2选择要上传的项目 3、添加 首次提交需要输入url 最后在push

广告业展示服务预约小程序的效果如何

虽然不少人不会与广告业直接接触&#xff0c;但各种形式的广告却是充斥在人们生活中&#xff0c;线下的传单展板、线上的视频、音频、图文等都是广告很好的传播通道&#xff0c;同时广告业能扩展的客户属性也非常广&#xff0c;下到超市小摊&#xff0c;上到企业公司都有大小相…

PaaS基础建设

PaaS&#xff08;Platform-as-a-Service&#xff1a;平台即服务&#xff09;是应用程序和服务的部署平台。Paas为开发、测试和管理软件应用程序提供所需的开发环境&#xff0c;是云计算服务类型之一。 PaaS是什么&#xff1f;IaaS、SaaS、PaaS三种云服务区别 PaaS&#xff08;P…

Illustrator 2024 v28.0(矢量插画设计)

Illustrator是一款功能强大的矢量图形编辑软件&#xff0c;它是设计师、艺术家和创意专业人士的首选工具&#xff0c;用于创建和编辑各种矢量图形、插图、图标、标志和艺术作品。 以下是Adobe Illustrator的主要功能和特点&#xff1a; 矢量图形编辑&#xff1a;Adobe Illustra…

centos7系统离线安装tcpdump抓包软件、使用教程

tcpdump 是Linux系统下的一个强大的命令&#xff0c;可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤&#xff0c;并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 本教程对tcpdump命令使用进行讲解说明&#xff0c;通…

Autosar模块介绍:Memory_6(FLS-闪存驱动)

上一篇 | 返回主目录 | 下一篇 Autosar模块介绍&#xff1a;Memory_6(FLS-闪存驱动 1 基本术语解释2 Fls组成结构图3 Fls基本操作3.1 通用规则说明3.2 加载、执行和删除flash访问代码 4 Fls常用操作时序4.1 初始化4.2 同步操作函数4.3 异步操作函数4.4 取消正在执行的操作 1 …

企业真正的性能测试,压测-内存泄露案例分析,一篇概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、环境配置 1&a…

npm install导致的OOM解决方案

文章目录 问题记录解决方法Linux重启排查方法 如何排查Linux自动重启的原因 问题记录 我在华为云服务器配置npm开发环境的时候&#xff0c; SSH远程连接一直掉线&#xff0c;无奈提了工单&#xff0c;被告知是NPM install导致的OOM问题。无语了&#xff0c;破NPM还有这个问题呢…

Android问题笔记四十四:关于RecyclerView出现Inconsistency detected崩溃

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

项目二:家庭记账系统

目录 一&#xff1a;目标 二&#xff1a;需求说明 2.1&#xff1a;基本资金和收支明细的记录 2.2&#xff1a;键盘访问的实现 三&#xff1a;实现步骤 3.1&#xff1a;实现主程序结构 3.2&#xff1a;实现收入和支出登记处理 3.3&#xff1a;工具类的使用 四&#xff1a;代…

POE布线系统传输性能与轻量化认证测试

• I/II级&#xff08;8类&#xff09;及以下铜缆物理层认证测试 • 布线系统PoE实际承载能力测试 • PoE带载条件下的信道运行余量&#xff08;信噪比&#xff09;测试 • 光电混合缆认证测试 • 网络连通性测试 信道测试支持&#xff1a; 物理层所有认证…

20. 深度学习 - 多层神经网络

Hi&#xff0c;你好。我是茶桁。 之前两节课的内容&#xff0c;我们讲了一下相关性、显著特征、机器学习是什么&#xff0c;KNN模型以及随机迭代的方式取获取K和B&#xff0c;然后定义了一个损失函数&#xff08;loss函数&#xff09;&#xff0c;然后我们进行梯度下降。 可以…

ubuntu上安装edge浏览器

1下载edge浏览器 官网下载 edge浏览器的linux版本可在上面的官网中寻找。 我选择的是Linux(.deb)。 2 安装 可在终端的edge安装包所在的路径下输入下面命令安装。 sudo dpkg -i edge安装包的名称.deb3 安装可能存在的问题 1dpkg:依赖关系问题使得edge-stable的配置工作不…

Linux系统进行进程管理,用户管理,文件压缩命令

目录 1.gcc与g区别(补充了解) 2.进程管理命令 3.用户管理命令 4.文件压缩与解压命令 5.常见面试题目 1.gcc与g区别(补充了解) 比如有两个文件:main.c,mainc.cpp(分别用C语言和C语言写的)如果要用gcc编译呢? gcc -o mainc main.c gcc -o mainc mainc.cpp -lstdc 指明用c的…

【MySQL】入门基础

文章目录 1 :peach:数据库基础:peach:1.1 :apple:什么是数据库:apple:1.2 :apple:主流数据库:apple:1.3 :apple:服务器/数据库/表关系:apple:1.4 :apple:MySQL架构:apple:1.5 :apple:SQL分类:apple:1.6 :apple:存储引擎:apple: 2 :peach:库的操作:peach:2.1 :apple:创建数据库:…

想要轻松上手Docker?Portainer帮你实现零基础快速部署!

Portainer简介 前面我们已经讲解了安装docekr和使用docker run 部署容器了&#xff0c;但是这些可能需要使用CLI(命令行参数)才能快乐的玩耍&#xff0c;因此可以使用一个工具在web界面进行配置管理容器与镜像&#xff0c;方便大家使用。 Portainer是一款Docker容器管理系统&am…

基于正余弦算法优化概率神经网络PNN的分类预测 - 附代码

基于正余弦算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于正余弦算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于正余弦优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络…

Vue3封装自定义指令+h()

官方install介绍 directive/myDir/index.js 定义指令 import { h, render, ref } from "vue"; const vMyDir {mounted(el, binding) {renderElement(el, binding);}, }; // inserted是Vue2的生命周期钩子&#xff0c;所以在Vue3项目中要使用mounted const renderEl…

Python爬虫从基础到入门:找数据接口

Python爬虫从基础到入门:找数据接口 1. 怎样判断抓取的数据是动态生成的2. 用requests模块访问,然后用解析模块解析数据3. 总结1. 怎样判断抓取的数据是动态生成的 请参考文章:Python爬虫从基础到入门:认识爬虫 第3点所讲。 这里用我的CSDN个人主页举例。 可以说这部分下的…

对比国内主流开源 SQL 审核平台 Yearning vs Archery

Yearning, Archery 和 Bytebase 是目前国内最主流的三个开源 SQL 审核平台。其中 Yearning 和 Archery 是社区性质的项目&#xff0c;而 Bytebase 则是商业化产品。通常调研 Bytebase 的用户也会同时比较 Yearning 和 Archery。 下面我们就来展开对比一下 Yearning 和 Archery…