Solidity中的事件(Event)的结构与用法
Solidity中的事件(Event)的结构与用法
- event的简单例子
- 被索引的参数(Indexed Parameters)
- 没有被索引的参数(Non-indexed Parameters)
- event扩展
- event 更多举例
- 无参数的event有什么用
event的简单例子
在Solidity中,事件(Event)是一种特殊的结构,用于记录区块链上的活动,类似于日志记录。事件可以被合约内的函数触发,并且可以被外部监听者(例如用户界面或后端服务)监听。事件的主要用途是提供一种方式,让外部系统能够接收到合约内部状态变化的通知。
事件的使用通常包括两个步骤:
- 声明:在合约中声明一个或多个事件。
- 触发:在合约的函数中使用
emit
关键字来触发事件。
以下是事件声明和触发的一个简单示例:
// 声明事件
event PasswordSet(address indexed user, string password);// 触发事件的函数
function setPassword(string memory newPass) public {require(msg.sender == s_owner, "Only owner can set password");s_password = newPass;emit PasswordSet(msg.sender, newPass); // 触发事件
}
在这个示例中,PasswordSet
事件有两个参数:一个是address
类型的user
,被标记为indexed
,表示可以被索引;另一个是string
类型的password
,没有被索引。当setPassword
函数被调用且条件满足时,会触发PasswordSet
事件,并将调用者地址和新密码作为参数传递。
在Solidity中,事件的参数可以被标记为indexed
或非索引(non-indexed)。这两种参数的主要区别在于它们如何被存储和查询:
被索引的参数(Indexed Parameters)
- 存储方式:被索引的参数的哈希值被存储在区块的日志主题(Topics)中。由于主题的数量限制为4个(前三个为索引参数,第四个可以是任意类型),因此只有前三个参数可以被标记为索引。
- 查询效率:由于索引参数的哈希值被存储在日志主题中,它们可以被非常快速地查询。这意味着你可以使用这些参数的值来过滤事件,而无需遍历所有的日志条目。
- 使用场景:通常用于那些你想要快速检索的参数,例如交易的参与者(如地址)或一些常见的数值类型(如代币ID)。
- 限制:只有前三个参数可以被标记为索引,并且索引参数必须是
address
、bool
、uint256
、bytes32
或这些类型的数组。
没有被索引的参数(Non-indexed Parameters)
- 存储方式:没有被索引的参数被编码并存储在日志的数据(Data)部分。这意味着它们不会被单独索引,而是作为整个数据包的一部分存储。
- 查询效率:查询没有被索引的参数通常需要遍历相关的日志条目,这比查询索引参数要慢得多,因为不能直接通过哈希值进行快速检索。
- 使用场景:适用于那些不需要快速检索的参数,或者参数类型不符合索引参数的要求(如
string
或更复杂的数据结构)。 - 灵活性:由于没有索引参数的数量限制,你可以在事件中包含任意数量的非索引参数。
event扩展
在以太坊区块链上,事件(Event)的底层数据结构是日志(Log)。当智能合约中的函数通过emit
关键字触发一个事件时,底层会生成一个日志条目。这些日志条目包含了事件的相关信息,并且可以被区块链的节点记录和存储。
以下是事件(作为日志)的一些关键特性和用途:
-
数据存储:日志数据被永久存储在区块链上,与交易数据一起。这意味着一旦事件被触发,其记录就不能被更改或删除。
-
数据结构:每个日志条目包含以下数据:
- 日志索引(Log Index):每个日志的唯一标识符。
- 交易索引(Transaction Index):触发日志的交易在区块中的位置。
- 区块哈希:包含该日志的区块的哈希值。
- 地址:部署触发事件的智能合约的地址。
- 数据:事件的数据,包括所有非索引参数。
- 主题(Topics):前三个参数的哈希值,如果参数被标记为
indexed
,它们可以被快速查询。
-
查询:由于主题的存在,日志可以被快速查询。用户或应用程序可以通过事件名称或特定的参数值来搜索相关的日志条目。
-
监听:外部监听者(如前端应用、后端服务等)可以通过订阅事件来接收智能合约状态变化的通知。这通常是通过以太坊节点提供的JSON-RPC接口实现的。
-
交互:事件可以作为用户界面与智能合约交互的一部分,例如,当一个事件发生时,前端应用可以显示一个通知或更新界面上的某些信息。
-
审计和监控:事件日志可以用于审计目的,帮助分析和监控智能合约的活动。
-
费用:在智能合约中触发事件会产生一定的费用,因为它们需要被存储在区块链上。此外,事件的参数越多,尤其是索引参数,费用越高。
-
限制:事件的参数有限制,最多只能有3个索引参数,因为主题的数量限制为3。超过3个的参数不会被索引,但仍然可以作为数据部分存储。
总的来说,事件作为日志的底层数据结构,为智能合约与外部世界提供了一种通信机制,允许外部系统监听和响应合约内部的状态变化。
event 更多举例
在Solidity中,事件可以携带不同数量和类型的参数,包括基本数据类型和复杂数据类型。以下是一些事件的示例,展示了不同的参数使用方式:
示例1:无参数的事件
// 声明一个无参数的事件
event EventWithoutParameters();// 触发事件
function triggerEvent() public {emit EventWithoutParameters();
}
示例2:带单个参数的事件
// 声明一个带单个非索引参数的事件
event EventWithOneParameter(string message);// 触发事件
function triggerWithMessage(string memory message) public {emit EventWithOneParameter(message);
}
示例3:带多个参数的事件,包含索引和非索引参数
// 声明一个带多个参数的事件,其中第一个参数是索引参数
event EventWithMultipleParameters(address indexed user, uint256 amount, string message);// 触发事件
function triggerMultiple(address user, uint256 amount, string memory message) public {emit EventWithMultipleParameters(user, amount, message);
}
示例4:带复杂数据类型的事件
// 定义一个复杂数据类型
struct Data {uint256 id;string name;
}// 声明一个带复杂数据类型参数的事件
event EventWithStruct(Data data);// 触发事件
function triggerWithStruct(Data memory data) public {emit EventWithStruct(data);
}
示例5:带数组参数的事件
// 声明一个带数组参数的事件
event EventWithArray(uint256[] numbers);// 触发事件
function triggerWithArray(uint256[] memory numbers) public {emit EventWithArray(numbers);
}
示例6:带映射类型参数的事件
// 声明一个带映射类型参数的事件
event EventWithMapping(mapping(address => uint256) balances);// 触发事件
function triggerWithMapping(mapping(address => uint256) memory balances) public {emit EventWithMapping(balances);
}
请注意,虽然映射类型可以作为事件的参数,但它们不会被索引。这意味着你不能使用映射的键或值来过滤事件,但它们仍然可以作为数据的一部分被记录和检索。
在实际开发中,根据需要选择适当的参数类型和数量,以确保事件能够提供足够的信息,同时保持合约的效率和安全性。
无参数的event有什么用
无参数的事件(即不携带任何数据的事件)在智能合约中仍然有其用途,尽管它们不提供任何额外的数据信息。以下是一些使用无参数事件的场景:
-
状态改变通知:即使没有携带数据,事件也可以作为一个信号,通知外部监听者合约的状态已经发生了变化。例如,可以用于通知用户合约已经进入了一个新的状态或完成了某个操作。
-
日志记录:无参数的事件可以作为日志记录的一部分,帮助开发者或审计人员跟踪合约的执行流程,尤其是在调试或分析合约行为时。
-
用户界面更新:在与前端应用交互时,无参数的事件可以用来触发用户界面的更新。例如,当一个无参数的事件被触发时,前端可以刷新显示合约的当前状态。
-
条件触发:在某些复杂的业务逻辑中,无参数的事件可以作为满足特定条件的信号。虽然它们本身不携带数据,但可以与合约的其他部分结合使用,以控制流程或执行特定的操作。
-
简化监听:对于只需要知道某个事件发生而不需要具体数据的情况,无参数的事件可以简化监听逻辑。监听者不需要解析事件数据,只需要知道事件已经发生。
-
性能优化:在某些情况下,如果事件数据不是必需的,使用无参数的事件可以减少日志的大小,从而降低交易的Gas成本。
-
合约交互:在与其他智能合约交互时,无参数的事件可以作为交互完成的信号,即使没有数据交换,也可以确保合约间的协同工作。
-
定时任务或周期性操作:在执行周期性或定时任务时,无参数的事件可以用来标记任务的开始或结束,帮助监控任务的执行情况。
-
权限变更:例如,当合约所有者变更或权限被转移时,可以触发一个无参数的事件来记录这一行为,尽管没有具体数据,但事件本身具有记录行为的价值。
-
合约升级或版本控制:在合约升级或版本变更时,可以触发一个无参数的事件来标记新版本的部署,这对于合约的维护和版本追踪是有用的。
尽管无参数的事件不像带有参数的事件那样能够提供丰富的数据,但它们在智能合约的交互和监控中仍然扮演着重要的角色。
相关文章:
Solidity中的事件(Event)的结构与用法
Solidity中的事件(Event)的结构与用法 event的简单例子被索引的参数(Indexed Parameters)没有被索引的参数(Non-indexed Parameters) event扩展event 更多举例无参数的event有什么用 event的简单例子 在So…...
基于STM32的房间湿度控制系统设计与实现(论文+源码)
1.系统总体设计 根据系统的实际应用需求,从硬件电路以及软件程序两个方面展开房间湿度控制系统设计。如图所示为系统的整体架构图。系统采用单片机作为控制器,在传感器检测模块中包括DHT11温湿度检测、有害气体浓度检测,在系统执行模块包括加…...
docker 使用 xz save 镜像
适用场景 如果docker save -o xxx > xxx 镜像体积过大,可以使用 xz 命令压缩。 命令 例如 save busybox:1.31.1 镜像,其中 -T 是使用多核心压缩,可以加快压缩。 docker save busybox:1.31.1 |xz -T 8 > /tmp/busybox:1.31.1安装 xz Ubuntu/Debian sudo apt upda…...
Dockerfile文件编写
目录 Dockerfile文件编写 1.什么是Dockerfile 2. Dockerfile作用 3.dockerfile 的基本结构: 4.dockerfile指令: FROM 指定基础镜像,dockerfile构建镜像的第一个指令 LABEL 指定镜像维护人信息 ADD/COPY 复制本地文件/目录到镜像中 …...
linux高性能服务器编程读书笔记目录建议
linux高性能服务器编程读书笔记目录&&建议 文章目录 linux高性能服务器编程读书笔记目录&&建议目录第一篇 TCP/IP协议详解第二篇 深入解析高性能服务器编程第三篇 高性能服务器优化与监测 自己总结的内容linux这本书上没有但是黑马上有的东西epoll反应堆模型本…...
java全栈day20--Web后端实战(Mybatis基础2)
一、Mybatis基础 1.1辅助配置 配置 SQL 提示。 默认在 mybatis 中编写 SQL 语句是不识别的。可以做如下配置: 现在就有sql提示了 新的问题 产生原因: Idea 和数据库没有建立连接,不识别表信息 解决方式:在 Idea 中配置 MySQL 数…...
页面加载速度优化策略:提升用户体验的关键
文章目录 前言一、为什么需要优化页面加载速度?二、前端优化技术三、后端优化策略四、构建与部署优化五、案例研究:实际效果展示结语 前言 在当今快节奏的互联网环境中,页面加载速度不仅是用户体验的重要组成部分,更是影响网站性…...
多模块程序的测试策略
例1.如图“自顶向下”: 采用广度优先:模块M1结合模块M2,M3和M4,然后再结合下一控制层中的模块M5,M6和M7,继续下去直到所有模块结合近来。 混合策略: 改进的自顶向下测试方法 基本上使用自顶向下的测试方法…...
聚水潭数据无缝集成到金蝶云星空的实现方案
聚水潭数据集成到金蝶云星空:聚水潭调拨对接金蝶直接调拨ok 在企业信息化管理中,数据的高效流动和准确对接是实现业务流程顺畅运行的关键。本文将分享一个具体的系统对接集成案例——如何通过轻易云数据集成平台,将聚水潭的数据无缝集成到金…...
electron打包linux环境
注意:新版的electron已经不支持在win上直接打包Linux的环境了,服务会卡住,会一直生成文件占用磁盘(我发现的时候占了我100G,而且文件夹很深,找了java代码while循环,好不容易删除的o(╥﹏╥)o) electron有一个专门打包的docker镜像,…...
设计模式--单例模式【创建型模式】
设计模式的分类 我们都知道有 23 种设计模式,这 23 种设计模式可分为如下三类: 创建型模式(5 种):单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式(7 种)࿱…...
Mybatis分页插件的使用问题记录
项目中配置的分页插件依赖为 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.7</version></dependency>之前的项目代码编写分页的方式为,通过传入的条件…...
BERTective: Language Models and Contextual Information for Deception Detection
目录 概要 实验设置 数据集 实验条件 指标和基准 实验方法 神经网络基准 基于transformer的模型 基于BERT的模型 实验结果 分析 非上下文化模型 上下文化模型 欺骗语言 讨论 结论 概要 本文基于一组包含虚假陈述的意大利对话语料库,建立了一种新的…...
python 配置 oracle instant client
1.问题描述 想用python连接oracle数据库,百度得知需要cx_Oracle这个第三方库 import cx_Oracle# 设置Oracle数据源名称 dsn cx_Oracle.makedsn(host, port, service_nameservice_name)# 创建数据库连接 connection cx_Oracle.connect(userusername, passwordpas…...
【C语言】一文讲通 和*
&和*详解 前言符号 &:取地址符& 的用法& 用于函数参数传递 符号 *:解引用符* 的用法* 用于指针的初始化 结合使用 & 和 *1. * 和 & 配合使用示例 常见错误与注意事项总结 前言 在 C 语言中,* 和 & 是两个非常重…...
编译原理复习---基本概念+推导树
适用于电子科技大学编译原理期末考试复习。 本文只适合复习不适合预习,即适合上课听过一点或自己学过一点的同学。 1. 编译原理概述 编译原理是计算机科学的一个重要分支,它涉及将高级编程语言编写的源代码转换为机器能够理解和执行的低级代码的过程。…...
ThinkPHP 吸收了Java Spring框架一些特性
ThinkPHP 吸收了Java Spring框架一些特性,下面介绍如下: 1、controller 控制器层 存放控制器层的文件,用于处理请求和响应 2、model 实体类 存放实体类的文件,用于定义数据模型 3、dao DAO层 存放DAO(数据访问…...
【Java基础面试题019】什么是Java中的不可变类?
回答重点 不可变类是指在创建后无法被修改的类。一旦对象被创建,它的所有属性都不能被更改。这种类的实例在整个生命周期内保持不变。 关键特征: 声明类为final,防止子类继承类的所有字段都是private和final,确保它们在初始化后…...
JAVA开发时获取用户信息失败,分析后端日志信息
从日志信息(见文章最后)来看,JWT 认证过程似乎是成功的。具体来说,以下几点表明认证流程正常: Token 解析成功: 日志显示 Parsing token: eyJhbGciOiJIUzUxMiJ9.eyJ1c2VySWQiOjEsImV4cCI6MTczNDM2MzUwMH0.jQtaj1sTBCMh…...
Docker 安装 禅道-21.2版本-外部数据库模式
Docker 安装系列 1、拉取最新版本(zentao 21.2) [rootTseng ~]# docker pull hub.zentao.net/app/zentao Using default tag: latest latest: Pulling from app/zentao 55ab1b300d4b: Pull complete 6b5749e5ef1d: Pull complete bdccb03403c1: Pul…...
如何写好一份技术文档?
技术文档是传递技术信息、指导用户操作的重要工具。一份高质量的技术文档不仅能帮助用户快速理解和使用技术产品,还能减少后续的维护和支持成本。本文将详细介绍如何撰写一份优秀的技术文档。 一、明确目标受众 在开始撰写技术文档之前,首先要明确目标受…...
常用es命令
常用Elasticsearch命令 es别名链接和删除 POST /_aliases {"actions": [{"add": {"index": "index","alias": "alias"}},{"remove": {"index": "index","alias": &quo…...
AI大模型进一步推动了AI在处理图片、视频、音频、文本的等数据应用
AI处理图片、视频、音频、文本等数据应用一直都存在,但是大模型的出现让AI处理这些数据更加便捷快速。比如在安防的框选标记物,以前要在图像上框,现在用文字描述再让大模型处理成图片框就可以完成框选了。大模型正在二次加速AI处理。 随着AI…...
【MambaSR复现】【Windows系统下Mamba环境配置】triton 、causal conv1d和mamba_ssm模块配置保姆教程
注:在此之前确保环境中已经安装packaging模块 pip install packaging若此模块安装过程中出现图下报错:这是由于环境创建时候的权限问题导致的,具体解决方案见我另一篇博文! 1.Triton模块安装 注意:必须先安装triton&…...
前景物体提取
参考:精选课:C完整的实现双目摄像头图像采集、双目摄像头畸变矫正、前景物体提取、生成视差图、深度图、PCL点云图 前景物体提取是计算机视觉中的一个重要技术,可以用于视频监控、虚拟现实和计算机视觉等领域。 1.前景物体提取的原理 前景…...
【考前预习】4.计算机网络—网络层
往期推荐 【考前预习】3.计算机网络—数据链路层-CSDN博客 【考前预习】2.计算机网络—物理层-CSDN博客 【考前预习】1.计算机网络概述-CSDN博客 目录 1.网络层概述 2.网络层提供的两种服务 3.分类编址的IPV4 4.无分类编址的IPV4—CIDR 5.IPV4地址应用规划 5.1使用定长子…...
浙江省一体化数字资源系统(IRS)介绍(七个方面展开)
浙江IRS的主要做法包括“六个一”,即一本账管理、一站式浏览、一揽子申请、一体化生产、一平台调度、一张网管控。本期分享在2023年数字政府评估大会上,浙江省大数据相关老师发表的“打造一体化数字资源系统(IRS),赋能…...
Spring实例化的基本流程和Bean处理器
目录 Spring实例化的基本流程 Bean的处理器 Bean工厂后处理器(BeanFactoryPostProcessor) 动态注册beanDefinition Bean后处理器(BeanPostProcessor) Spring实例化的基本流程 在了解处理器之前,要清除spring实例化…...
对分布式系统的理解以及redis的分布式实现
对分布式系统有哪些了解? 分布式系统是由多个独立的计算节点(通常是计算机或服务器)组成的系统,这些节点通过网络相互通信和协作,共同完成任务。分布式系统的设计旨在提供可扩展性、容错性和高可用性,适用于大规模的数据处理和服务场景。 1. 分布式系统的核心特点 分布…...
torch.multiprocessing 向Process传递对象参数报错 Can‘t pickle local object
如下代码所示,使用torch.multiprocessing启动多进程,并传递了model和image_processor两个对象作为参数。 from torch.multiprocessing import Process, Queue, Manager...p3 Process(targetframe_memory_manager,args(model, image_processor, frame_q…...
Day9 神经网络的偏导数基础
多变量函数与神经网络 在神经网络中,我们经常遇到多变量函数。这些函数通常描述了网络的输入、权重、偏置与输出之间的关系。例如,一个简单的神经元输出可以表示为: z f ( w 1 x 1 w 2 x 2 … w n x n b ) z f(w_1x_1 w_2x_2 \ldots…...
[c++11(二)]Lambda表达式和Function包装器及bind函数
1.前言 Lambda表达式着重解决的是在某种场景下使用仿函数困难的问题,而function着重解决的是函数指针的问题,它能够将其简单化。 本章重点: 本章将着重讲解lambda表达式的规则和使用场景,以及function的使用场景及bind函数的相关使…...
22智能 狄克斯特拉算法复习
狄克斯特拉算法 图 根据边有无方向分为: 有向图、无向图 根据边有无权重变量分为: 有权图、无权图 根据顶点是否连通分为: 连通图和非连通图入度:表示有多少条边指向该顶点出度:表示有多少条边从该顶点指出算法步骤&a…...
Electronjs+Vue如何开发PC桌面客户端(Windows,Mac,Linux)
electronjs官网 https://www.electronjs.org/zh/ Electron开发PC桌面客户端的技术选型非常适合已经有web前端开发人员的团队。能够很丝滑的过渡。 Electron是什么? Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.…...
C语言编程1.27汉诺塔
题目描述 给定一个由n个圆盘组成的塔,这些圆盘按照大小递减的方式套在第一根桩柱上。现要将整个塔移动到另一根桩柱上,每次只能移动一个圆盘,且较大的圆盘在移动过程中不能放置在较小的圆盘上面。 输入格式 输入由四行: 第一行…...
UG NX二次开发(C#)-机电概念设计-UIStyler中selection块选择信号等对象的过滤器设置
文章目录 1、前言2、创建机电概念设计的模型3、创建UIStyler4、在VS2022中创建NXOPEN CSHAP的工程5、设置信号与信号适配体的过滤器6、测试选择的对象1、前言 在UG NX二次开发过程中,经常会用到UIStyler中的Selection块,即是选择对象,选择对象由于其可以选择多种类型的对象…...
【C++】C++中的lambda函数详解
C中的lambda函数是一种匿名函数,它允许你在代码中直接定义一个函数对象,而不需要提前声明一个函数名。Lambda函数通常用于编写简短的函数,这些函数可能只会被调用一次或者在某些特定的上下文中使用。 Lambda函数的基本语法如下: …...
JS CSS HTML 的代码如何快速封装
我们为什么要封装代码,是因为封装后的代码,会显得非常美观,减少代码的复用,方便我们更好的去维护代码,不用一个一个页面的去找去改,直接封装好的代码里面去改就可以了 目录 1.html代码封装 2.CSS代码封装…...
矩阵运算的复杂度分析(Complexity Analysis of Matrix Operations):中英双语
矩阵运算的复杂度分析 矩阵运算在科学计算、机器学习、图像处理等领域中起着至关重要的作用。了解各种常见矩阵运算的复杂度,对于优化算法、提高计算效率具有重要意义。在这篇博客中,我们将详细探讨矩阵加法、标量乘法、矩阵转置、矩阵-向量乘法等基本矩…...
第二十四天 循环神经网络(RNN)LSTM与GRU
LSTM(长短期记忆网络)和GRU(门控循环单元)是两种流行的循环神经网络变体,它们被设计来解决传统RNN在处理长序列数据时遇到的梯度消失和梯度爆炸问题。这两种网络都通过引入门控机制来控制信息的流动,从而能…...
RTC实时时钟
BKP(备份寄存器) 1. 什么是BKP? 备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域里,当VDD电 源被切断,他们仍然由VBAT维持供电。当系统在待机模式下被唤醒ÿ…...
移动网络(2,3,4,5G)设备TCP通讯调试方法
背景: 当设备是移动网络设备连接云平台的时候,如果服务器没有收到网络数据,移动物联设备发送不知道有没有有丢失数据的时候,需要一个抓取设备出来的数据和服务器下发的数据的方法。 1.服务器系统是很成熟的,一般是linu…...
项目二十三:电阻测量(需要简单的外围检测电路,将电阻转换为电压)测量100,1k,4.7k,10k,20k的电阻阻值,由数码管显示。要求测试误差 <10%
资料查找: 01 方案选择 使用单片机测量电阻有多种方法,以下是一些常见的方法及其原理: 串联分压法(ADC) 原理:根据串联电路的分压原理,通过测量已知电阻和待测电阻上的电压,计算出…...
如何使用checkBox组件实现复选框
文章目录 概念介绍使用方法示例代码我们在上一章回中介绍了DatePickerDialog Widget相关的内容,本章回中将介绍Checkbox Widget.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里说的Checkbox也是叫复选框,没有选中时是一个正方形边框,边框内容是空白的,选中时会…...
用bootstrap搭建侧边栏
要注意: 标签的id"v-pills-dataset1-tab"要和跳转内容的aria-labelledby"v-pills-dataset1-tab"一致 标签的aria-controls"v-pills-dataset1"要和跳转内容的id"v-pills-dataset1"一致 <!-- 左边的列(侧边栏…...
手眼标定工具操作文档
1.手眼标定原理介绍 术语介绍 手眼标定:为了获取相机与机器人坐标系之间得位姿转换关系,需要对相机和机器人坐标系进行标定,该标定过程成为手眼标定,用于存储这一组转换关系的文件称为手眼标定文件。 ETH:即Eye To …...
巧记斜边函数hypot
hypot是一个数学函数,源于英文"hypotenuse(斜边)",hypot(a, b)返回直角边边长为a、b的直角三角形(right-angled triangle)的斜边长度。该函数定义在<math.h>头文件中,其功能相当…...
STM32单片机芯片与内部33 ADC 单通道连续DMA
目录 一、ADC DMA配置——标准库 1、ADC配置 2、DMA配置 二、ADC DMA配置——HAL库 1、ADC配置 2、DMA配置 三、用户侧 1、DMA开关 (1)、标准库 (2)、HAL库 2、DMA乒乓 (1)、标准库 ÿ…...
【程序人生】掌握一门编程语言
掌握一门编程语言不仅仅是能够编写正确的语法,它还涉及到对语言特性、工具链、最佳实践以及解决问题的能力有深入的理解。以下是衡量你是否掌握了某门编程语言的关键指标: 语法与基本概念 语法熟悉度:能够在不查阅文档的情况下写出正确的代码…...
数据库发生了死锁怎么办
当项目中存在公共的数据表,比如日志表,同时存在对这张表的读写操作,或者是对数据量较大的表加索引同时伴随其他并发操作,那么这张表就有较高概率发生死锁。 现象:对于这张表的任何操作都会被阻塞,项目出现…...