当前位置: 首页 > news >正文

union的实际使用

记录一下,免得忘记:

1、定义一个共用体变量

这里定义一个64位变量 i2creg_rev,然后通过共用体定义两个位变量bits和bits_reverse,通过bit可以访问指定位的值大小,不需要自己再左移右移转换。

bits_reverse是bits的对端转换,是用来处理大小端定义位的,免得取位值时,取反顺序了

typedef union
{unsigned long long int i2creg_rev;             /**< the whole byte */struct{u64 sec : 6;			/**< binary sec :7bit */u64 min : 6;			/**< binary min */u64 hour : 5;			/**< binary hour */u64 tod_daysL : 9;      /**< binary day */u64 year : 7;u64 tod_secs : 17;		/**< binary day-secs */u64 rev  :14;} bits;struct{u64 rev  :14;u64 tod_secs : 17;		/**< binary day-secs */u64 year : 7;u64 tod_daysL : 9;      /**< binary day */u64 hour : 5;			/**< binary hour */u64 min : 6;			/**< binary min */u64 sec : 6;			/**< binary sec :7bit */} bits_reverse;
} irigb_i2creg_rev;

2、使用

先定义一个union变量,然后用i2c去读的值,赋值给rev_time,之后利用union特性,直接可以提取时分秒,年月日了


void test_union(void)
{irigb_i2creg_rev rev_time;unsigned char tdata[20] = { 0 };interface_phasei2c_read_nbytes(0x90, 0xC8, tdata, 8);Str_Printf("r 0xC8=0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x \t",tdata[7],tdata[6],tdata[5],tdata[4],tdata[3],tdata[2],tdata[1],tdata[0]);rev_time.i2creg_rev = ((unsigned long long int)tdata[0]<<56 |  (unsigned long long int)tdata[1]<<48 | (unsigned long long int)tdata[2]<<40 |(unsigned long long int)tdata[3]<<32 |(unsigned long long int)tdata[4]<<24 |(unsigned long long int)tdata[5]<<16 |(unsigned long long int)tdata[6]<<8 |(unsigned long long int)tdata[7] );Str_Printf("%d:%d:%d,%d,%d,@%d\r\n",rev_time.bits.hour, rev_time.bits.min, rev_time.bits.sec,rev_time.bits.tod_daysL, rev_time.bits.year+2000, rev_time.bits.tod_secs);//        Str_Printf("%d:%d:%d,%d,%d,@%d\r\n",rev_time.bits_reverse.hour, rev_time.bits_reverse.min, rev_time.bits_reverse.sec,
//                rev_time.bits_reverse.tod_daysL, rev_time.bits_reverse.year+2000, rev_time.bits_reverse.tod_secs);}

相关文章:

union的实际使用

记录一下&#xff0c;免得忘记&#xff1a; 1、定义一个共用体变量 这里定义一个64位变量 i2creg_rev&#xff0c;然后通过共用体定义两个位变量bits和bits_reverse&#xff0c;通过bit可以访问指定位的值大小&#xff0c;不需要自己再左移右移转换。 bits_reverse是bits的对…...

EKF 自动匹配维度 MATLAB代码

该 M A T L A B MATLAB MATLAB代码实现了扩展卡尔曼滤波( E...

Oracle复合索引规则指南

在Oracle中可以创建组合索引&#xff0c;即同时包含两个或两个以上列的索引。在组合索引的使用方面&#xff0c;Oracle有以下特点&#xff1a; 1、 当使用基于规则的优化器&#xff08;RBO&#xff09;时&#xff0c;只有当组合索引的前导列出现在SQL语句的where子句中时&#…...

JS - Array Api

判断一个对象是否为数组 /* 语法&#xff1a; Array.isArray(object); 参数&#xff1a;object 必需&#xff0c;要测试的对象。返回值 如果 object 是数组&#xff0c;则为 true&#xff1b;否则为 false。 如果 object 参数不是对象&#xff0c;则返回 false。 */ 一、改…...

【JS】for-in 和 for-of遍历对象的区别

【介绍】 for-in 和 for-of 都是 JavaScript 中用于遍历数据结构的循环语句&#xff0c;但它们的工作原理和适用场景有所不同。特别是它们在遍历对象时的行为是不同的。 【区别】 for-in 遍历对象 for-in 是用于遍历对象的 可枚举属性的键名&#xff08;属性名&#xff09;…...

【每日学点鸿蒙知识】ets匿名类、获取控件坐标、Web显示iframe标签、软键盘导致上移、改变Text的背景色

1、HarmonyOS ets不支持匿名类吗&#xff1f; 不支持&#xff0c;需要显式标注对象字面量的类型&#xff0c;可以参考以下文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/typescript-to-arkts-migration-guide-V5#%E9%9C%80%E8%A6%81%E6%…...

深度学习blog- 数学基础(全是数学)

矩阵‌&#xff1a;矩阵是一个二维数组&#xff0c;通常由行和列组成&#xff0c;每个元素可以通过行索引和列索引进行访问。 张量‌&#xff1a;张量是一个多维数组的抽象概念&#xff0c;可以具有任意数量的维度。除了标量&#xff08;0D张量&#xff09;、向量&#xff08;…...

最后100米配送

1. 项目概述 1.1 项目目标 集成无人机与电动车&#xff1a;设计并实现将无人机固定在电动车上&#xff0c;利用电动车的电源进行飞行&#xff0c;实现高楼内部从电动车位置到用户办公/居住地点的最后100米精准配送。低成本实现&#xff1a;通过利用电动车现有的电源和结构&am…...

Linux的进程替换以及基础IO

进程替换 上一篇草率的讲完了进程地址空间的组成结构和之间的关系&#xff0c;那么我们接下来了解一下程序的替换。 首先&#xff0c;在进程部分我们提过了&#xff0c;其实文件可以在运行时变成进程&#xff0c;而我们使用的Linux软件其实也是一个进程&#xff0c;所以进一步…...

《计算机网络A》单选题-复习题库

1. 计算机网络最突出的优点是&#xff08;D&#xff09; A、存储容量大B、将计算机技术与通信技术相结合C、集中计算D、资源共享 2. RIP 路由协议的最大跳数是&#xff08;C&#xff09; A、13B、14C、15D、16 3. 下面哪一个网络层次不属于 TCP/IP 体系模型&#xff08;D&a…...

闲谭Scala(2)--安装与环境配置

1. 概述 Java开发环境安装&#xff0c;需要两步&#xff0c;第一安装JDK&#xff0c;第二配置环境变量。 Scala的话&#xff0c;也是两步&#xff0c;第一安装Scale环境&#xff0c;第二配置环境变量。 需要注意的是&#xff0c;配置环境变量&#xff0c;主要是想让windows操…...

Python基于卷积神经网络的车牌识别系统开发与实现

1. 简介 车牌识别是人工智能在交通领域的重要应用&#xff0c;广泛用于高速违章检测、停车场管理和智能交通系统等场景。本系统通过基于卷积神经网络&#xff08;CNN&#xff09;的深度学习算法&#xff0c;结合 Python 和 MySQL 实现车牌的快速识别与管理。 系统特点&#x…...

Spring Boot集成Netty创建一个TCP服务器,接收16进制数据(自定义解码器和编码器)

Netty Netty是一个高性能、异步事件驱动的网络应用程序框架,它提供了对并发和异步编程的抽象,使得开发网络应用程序变得更加简单和高效。 在Netty中,EventLoopGroup是处理I/O操作的多线程事件循环器。在上面的示例中,我们创建了两个EventLoopGroup实例:bossGroup和worker…...

Python 中的 with open:文件操作的最佳实践

在 Python 中&#xff0c;文件操作是最常用的一项任务&#xff0c;无论是读取文件内容&#xff0c;还是将数据写入文件。传统的文件操作方式使用 open() 和 close() 函数来处理文件&#xff0c;但在实际开发中&#xff0c;我们推荐使用 with open() 语句来进行文件操作。本文将…...

哪些框架、软件、中间件使用了netty? 哪些中间件、软件底层使用了epoll?

使用 Netty 的软件、中间件和框架 Netty 是一个异步事件驱动的网络应用框架&#xff0c;广泛应用于构建高性能的网络应用程序。以下是一些使用了 Netty 的知名软件、中间件和框架&#xff1a; 1. Elasticsearch 描述&#xff1a;Elasticsearch 是一个分布式的搜索和分析引擎…...

AI 智能助手对话系统

一个基于 React 和 Tailwind CSS 构建的现代化 AI 对话系统&#xff0c;提供流畅的用户体验和丰富的交互功能。 项目链接&#xff1a;即将开放… 功能特点 &#x1f916; 智能对话&#xff1a;支持与 AI 助手实时对话&#xff0c;流式输出回答&#x1f4c1; 文件处理&#xff…...

2024年秋词法分析作业(满分25分)

【问题描述】 请根据给定的文法设计并实现词法分析程序&#xff0c;从源程序中识别出单词&#xff0c;记录其单词类别和单词值&#xff0c;输入输出及处理要求如下&#xff1a; &#xff08;1&#xff09;数据结构和与语法分析程序的接口请自行定义&#xff1b;类别码需按下表格…...

Docker镜像瘦身:从1.43G到22.4MB

Docker镜像瘦身:从1.43G到22.4MB 背景1、创建项目2、构建第一个镜像3、修改基础镜像4、多级构建5、使用Nginx背景 在使用 Docker 时,镜像大小至关重要。我们从 create-react-app (https://reactjs.org/docs/create-a-new-react-app.html)获得的样板项目通常都超过 1.43 GB…...

前端加解密对抗encrypt-labs

前言 项目地址&#xff1a;https://github.com/SwagXz/encrypt-labs 作者&#xff1a;SwagXz 现在日子越来越不好过了&#xff0c;无论攻防、企业src还是渗透项目&#xff0c;总能看到大量的存在加密的网站&#xff0c;XZ师傅的前端加密靶场还是很值得做一做的&#xff0c;环…...

Android Notification 问题:Invalid notification (no valid small icon)

问题描述与处理策略 1、问题描述 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.notifications/com.my.notifications.MainActivity}: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(chan…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...