【ARM位段地址分配】STM32 struct 位段内存分配位置问题

news2024/11/19 19:34:02

因为需要将 7位地址位 和 1位读写标志位 进行组合,想到了用 struct 和 union 的方法。

说明:作为自己测试用,使用硬件STM32F407ZET6

本篇文章仅对位段操作再ARM芯片上存储空间位置分配的探究,供给作为需要确定位段操作分配内存位置要求的参考。

位段

此位段操作涉及到一个很重要的问题:位段中的成员在内存中是从左向右分配还是从右向左分配。

用《C和指针》书上的例子:

 在32位的处理器上,这个声明将根据下面两种可能的方法创建ch1。

位段的内存分配

期待分配情况:


情况一:

union{			
	struct{
			
		unsigned Data : 8;
		_Bool WR : 1;
		unsigned Addr : 7;
			
	}Reg;
	uint8_t Bytes[2];
}write_data;

write_data.Reg.Addr = 0x20; //0100 000;
write_data.Reg.WR = 1;
write_data.Reg.Data = 0xF0; //1111 0000;
		
printf("write_data.Bytes[0]:%x\r\n",write_data.Bytes[0]);
printf("write_data.Bytes[1]:%x\r\n",write_data.Bytes[1]);

打印信息:

内存分配情况:

11110000 01000001


情况二:

union{			
	struct{
			
		_Bool WR : 1;
		unsigned Addr : 7;
        unsigned Data : 8;
			
	}Reg;
	uint8_t Bytes[2];
}write_data;

write_data.Reg.Addr = 0x20; //0100 000;
write_data.Reg.WR = 1;
write_data.Reg.Data = 0xF0; //1111 0000;
		
printf("write_data.Bytes[0]:%x\r\n",write_data.Bytes[0]);
printf("write_data.Bytes[1]:%x\r\n",write_data.Bytes[1]);

打印信息: 

内存分配情况:

01000001 11110000


情况三:

union{			
	struct{
			
		unsigned Addr : 7;
        _Bool WR : 1;
        unsigned Data : 8;
			
	}Reg;
	uint8_t Bytes[2];
}write_data;

write_data.Reg.Addr = 0x20; //0100 000;
write_data.Reg.WR = 1;
write_data.Reg.Data = 0xF0; //1111 0000;
		
printf("write_data.Bytes[0]:%x\r\n",write_data.Bytes[0]);
printf("write_data.Bytes[1]:%x\r\n",write_data.Bytes[1]);

打印信息: 

内存分配情况:

10100000 11110000


情况四:

union{			
	struct{
			
        unsigned Data : 8;
		unsigned Addr : 7;
        _Bool WR : 1;

	}Reg;
	uint8_t Bytes[2];
}write_data;

write_data.Reg.Addr = 0x20; //0100 000;
write_data.Reg.WR = 1;
write_data.Reg.Data = 0xF0; //1111 0000;
		
printf("write_data.Bytes[0]:%x\r\n",write_data.Bytes[0]);
printf("write_data.Bytes[1]:%x\r\n",write_data.Bytes[1]);

打印信息: 

内存分配情况:

11110000 10100000

 

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

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

相关文章

我出版了一本关于TikTok电商运营的书

回首2020年初,第一次在手机上下载TikTok的那个下午,我并没有意识到,未来三年多这个词会充满我的工作与生活。 那其实是非常幸福的一段时间,对TikTok的期待没有那么功利,每天刷一刷TikTok中的视频,再随手拍…

【1080. 根到叶路径上的不足节点】

来源:力扣(LeetCode) 描述: 给你二叉树的根节点 root 和一个整数 limit ,请你同时删除树中所有 不足节点 ,并返回最终二叉树的根节点。 假如通过节点 node 的每种可能的 “根-叶” 路径上值的总和全都小…

『手撕 Mybatis 源码』04 - 创建 sqlSession

创建 sqlSession 创建 openSession 对象 当获取 SqlSessionFactory 之后,就可以开始获取 SqlSession 对象 public class MybatisTest {Testpublic void test1() throws IOException {...// 3.问题:openSession()执行逻辑是什么?// 3. (1) …

c++学习——引用

引用 **引用的语法****引用的注意事项****数组的引用****引用的本质****尽量用const来代替define****指针的引用** 1.引用是做什么:和C语言的指针一样的功能,并且使语法更加简洁 2.引用是什么∶引用是给空间取别名 引用的语法 #define _CRT_SECURE_NO_WARNINGS #include <i…

星戈瑞Sulfo-CY7 NHS ester标记带氨基的荧光Cyanine7-NHS

Sulfo-CY7 NHS ester是一种常用的蛋白质标记试剂&#xff0c;是一种高度稳定的荧光染料&#xff0c;能够被用于各种细胞成像实验中。利用这种染料&#xff0c;科学家们可以标记细胞膜、细胞核、细胞器等&#xff0c;从而观察细胞的各种结构和功能。 产品名称&#xff1a;水溶性…

似然(likelihood)、极大似然、对数似然、最大后验等

1 似然 设总体X服从分布P(x&#xff1b;θ)&#xff08;当X是连续型随机变量时为概率密度&#xff0c;当X为离散型随机变量时为概率分布&#xff09;&#xff0c;θ为待估参数&#xff08;或者说系统参数&#xff09;&#xff0c;X1,X2,…Xn是来自于总体X的样本&#xff0c;x1…

互联网医院|互联网医院系统开发|互联网医疗平台搭建

随着互联网的快速普及&#xff0c;互联网医院成为解决医疗资源分布不平衡、基层医疗服务短缺等问题的有效途径。互联网医院系统的优势主要体现在以下几个方面&#xff1a;   1.在线挂号预约   互联网医院系统可以方便快捷地进行在线预约挂号。患者可以通过小程序或网站实现…

BI大数据分析平台,精细化分析的必备工具

在日常的工作中&#xff0c;经常会遇到要做经营决策时&#xff0c;数据分析却掉链子的情况&#xff0c;比如当老板临时提出要进一步分析某类商品的销售情况时&#xff0c;得重新开发报表。BI大数据分析平台能不能随时随地实现精细化数据分析&#xff0c;避免数据分析跟不上运营…

Python实现ACO蚁群优化算法优化Catboost分类模型(CatBoostClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…

Java | 一分钟掌握定时任务 | 7 - ElasticJob分布式定时任务

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱编写&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 前言 ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案。 它通过…

pointNet、pointNet++算法学习笔记

算法结构 原理解析 已知&#xff1a; N个点&#xff0c;每个点的信息x,y,z。 MLP:全连接网络&#xff0c;输入层&#xff0c;隐藏层&#xff0c;输出层。 原理&#xff1a; &#xff08;1&#xff09;第一步 MLP 对每个点进行MLP操作&#xff0c;即&#xff1a;3–>MLP(3,C…

Spring MVC文件上传处理详解

Spring MVC文件上传处理详解 Spring MVC是Java Web开发中非常常用的框架之一&#xff0c;它提供了许多方便的功能。其中&#xff0c;文件上传是Web开发中常用的功能之一&#xff0c;本文将介绍如何使用Spring MVC处理文件上传以及相关代码实现。 文件上传的基本原理 在Web开发…

HTML-iconfont动态图标SVG效果--阿里巴巴图标矢量库

给北大打工&#xff0c;实现官网首页动态图标效果_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ys4y1c7oh/?spm_id_from333.1007.top_right_bar_window_default_collection.content.click&vd_source924f5dad6f2dcb0a3e5dca4604287ecd&#xff08;本篇笔记操作方法…

Java 基础语法学习笔记

目录 一、Java语言概述 1.1 Java 的出现 1.2 Java的主要特性 1.3 Java语言的特点 1.4 Java语言的核心机制 1.5 Java语言的环境搭建 二、第一个Java程序 2.1 需要注意的问题 2.2 注释&#xff08;comment) 2.3 注意点&#xff1a; 2.4 Java API 的文档 2.5 第一个 Jav…

python+django智慧办公hr招聘辅助管理系统vue

随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;智慧办公hr招聘辅助管理系统当然也不能排除在外。智慧办公hr招聘辅助管理系统是以实际运用为开发背景&#xff0c;运用软件工程…

深度学习框架-Keras:特点、架构、应用和未来发展趋势

引言 深度学习是一种新兴的技术&#xff0c;已经在许多领域中得到广泛的应用&#xff0c;如计算机视觉、自然语言处理、语音识别等。在深度学习中&#xff0c;深度学习框架扮演着重要的角色。Keras是一种广泛使用的深度学习框架&#xff0c;它在许多方面都有所改进&#xff0c…

云计算基础——云计算与移动互联网、物联网

8.1 云计算与移动互联网 8.1.1 移动互联网的发展概况 移动互联网的发展概况 移动互联网是指以宽带IP为技术核心&#xff0c;可同时提供语音、数据、多媒体等业务服务的开什么是移动互联网?放式基础电信网络&#xff0c;从用户行为角度来看&#xff0c;移动互联网广义上是指用…

openldap介绍以及使用

参考文献&#xff1a;openldap介绍和使用 基本概念 官网&#xff1a;https://www.openldap.org 官方文档&#xff1a;https://www.openldap.org/doc LDAP是一个开放的&#xff0c;中立的&#xff0c;工业标准的应用协议&#xff0c;通过IP协议提供访问控制和维护分布式信息的…

目标检测 YOLOv5 开源代码项目调试与讲解实战土堆 课程笔记

P4 P5 主要讲解了 detect.py 中的参数的使用 如何利用 YOLOv5 进行预测&#xff08;一&#xff09;_哔哩哔哩_bilibili 如何利用YOLOv5进行预测&#xff08;二&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;weight&#xff1a;代码如下 parser.add_argument(--w…

VTKmimics Calculate Parts

前言&#xff1a;本博文主要研究mimics中Calculate Parts所采用的方法以及VTK中三维重建的方法&#xff0c;希望对各位小伙伴有所帮助&#xff0c;谢谢&#xff01; mimics-Calculate parts - Interpolation Gray Interpolation 灰度值插值是一种真正的3D插值&#xff0c;它考…