YTM32的增强型定时器eTMR外设模块详解
文章目录
- eTMR外设简介
- eTMR工作机制
- 系统框图
- 引脚与信号
- 计数器与时钟源
- 输出比较模式
- PWM模式
- 通道配对
- 通道对的互补输出(Complementary Mode)
- 双缓冲输出PWM(Double Switch)
- 错误检测机制(Fault Detection)
- 输入捕获模式
- 正交编码器功能
- 同步机制
- 调制模式
- 中断、DMA及触发信号
- 应用要点(软件)
- 总结
eTMR外设简介
YTM32微控制器上集成的eTMR模块,是一个定时器外设,下辖多至8个通道,除了可以进行基本的周期计数外,还可以实现硬件输出比较(PWM)、输入捕获的功能,有一些特别的eTMR示例,还支持正交编码器的功能。
YTM32微控制器上集成了定时器外设模块还有TMR、pTMR、LPTMR、RTC等,其中eTMR大多用于产生PWM信号,或者通过输入捕捉测量方波脉冲信号的宽度。大多用在电机相关的应用中。
每款芯片集成eTMR实例的数量不同,以YTM32B1ME05为例,总共6个eTMR,并且每个eTMR实例的部分功能也做了裁剪。如图x所示。
eTMR工作机制
系统框图
微控制器定时器外设模块的核心,是一个计数器。所谓通道,实际上是可以匹配计数器某个计数值的事件,用户可以配置在特定的情况下产生事件(例如,对外输出电平,对内产生触发信号等)对应输出比较
的功能;也可以配置被外部的同步信号触发,将发生事件的时刻快照到通道的数值寄存器中,对应输入捕获
的功能。因此,带有多通道的定时器外设大多设计得相似,可有系统框图,如图x所示。
引脚与信号
eTMR外设对外有一些信号绑定到芯片的引脚上。如表x所示。
引脚名 | 信号描述 | 信号方向 |
---|---|---|
TCLK_IN0, TCLK_IN1, TCLK_IN2 | 可选其一作为外部输入的计数器时钟源 | 输入 |
eTMR_CH0, eTMR_CH1, … , eTMR_CH6, eTMR_CH7 | 通道的输入输出信号:当工作在输入捕捉模式时,可送入触发信号; 当工作在输出比较或PWM模式时,可输出电平信号,产生PWM波形。 | 输入/输出 |
eTMR_FLT0, eTMR_FLT1, eTMR_FLT2, eTMR_FLT3 | 捕获外部的错误信号(Fault Event) | 输入 |
eTMR_QD_PHA, eTMR_QD_PHB | 正交编码器模式的输入信号 | 输入 |
计数器与时钟源
定时器外设引擎的基本核心是一个可以由外部时钟源驱动计数的定时器。
eTMR外设涉及到两个时钟源:驱动访问寄存器的外设总线时钟,和驱动定时器计数的功能时钟。有一些型号的芯片,可能会设计可以接入到eTMR的功能时钟的不同时钟源。例如,可以直接将PLL倍频后的高速时钟直接送入定时器外设,以获取更高的控制精度,也可以将低功耗模式下能够继续存活的低速时钟源接入定时器的时钟源,从而可以芯片的低功耗模式下继续自行工作。但在本例的YTM32B1ME05微控制器上,是将SCU模块中产生的FAST_BUS_CLK
固定接入eTMR的功能时钟源。如图x所示。这在IPC模块的章节中的表Table 13.1 IP Clock Control Table
的备注里,也有相关的描述。
eTMR module clock source is FAST_BUS_CLK default, also can use TCLK through configuring in the eTMR register, and TCLK frequency must be less than the half of FAST_BUS_CLK.
在eTMR外设模块内部,还可以通过配置寄存器eTMR_CTRL[CLKSRC]
,选择使用计数的功能时钟源,来自IPC
模块的FAST_BUS_CLK
,或是从eTMR_TCLK_IN0
引脚接入的外部时钟源。而在CIM
外设中,可以通过配置寄存器CIM_ETMROPT0[ETMRx_EXTCLK_SEL]
,选择eTMR_TCLK_IN0
/eTMR_TCLK_IN1
/eTMR_TCLK_IN2
其中之一生效。
eTMR的计数时钟信号CLK_src
进入eTMR外设后,还需要经过一个7位的分频器,才会送入eTMR的计数器驱动计数CLK_cnt
。这个分频器的分频因子,是在寄存器eTMR_CTRL[CLKPRS]
中设定的。有计数器计数时钟频率的计算公式如下:
C L K C N T = C L K S R C C T R L [ C L K P R S ] + 1 CLK_{CNT} = \frac{CLK_{SRC}}{CTRL[CLKPRS]+1} CLKCNT=CTRL[CLKPRS]+1CLKSRC
经过分频的时钟信号送入计数器,驱动计数。大多数eTMR的内部计数器是16位的(eTMR3是32位),一旦启动定时器(软件设置寄存器eTMR_CTRL[EN]=1
)并等到Load事件(标志位eTMR_SYNC[LDOK]=1
),则计数器将会从寄存器eTMR_INIT
载入初值到计数器寄存器eTMR_CNT
中(eTMR_SYNC[INITCNT]=1
)或是直接向eTMR_CNT
寄存器中写初值,开始递增计数。软件可以从计数器寄存器eTMR_CNT
中实时读到当前计数器的值。当计数值达到寄存器eTMR_MOD
中设定的值时,会触发Overflow溢出事件(可产生中断,也可产生触发信号),起eTMR_STS[TOF]
标志位,然后定时器计数器直接回返至寄存器eTMR_INIT
的值。如此,形成计数周期。如图x所示。
在一些应用场景中(例如电机控制),需要多个eTMR配合,使用相同频率的时钟源,并且使用相同相位的时钟信号。此时,就需要多个eTMR外设实例同步启动,为此,eTMR设计了GTB功能(Global Time Base)。所有设定了寄存器eTMR_CTRL[GLOBEN]=1
的eTMR实例将会并如GTB的集合,其中设定eTMR_SYNC[GLOB]=1
的eTMR实例将作为主机,其余eTMR实例为从机,由主机eTMR控制GTB集合中所有eTMR的启动。
eTMR外设可以配置成输出比较模式、输入捕获模式、专用PWM模式和编码器模式:
- 当为编码器模式时,整个eTMR不能使用其他模式的功能。
- 单个通道只能配置成输出比较模式、输入捕获模式或专用PWM模式中的一种,但多个不同模式的通道可以在同一个eTMR中共存。
输出比较模式
输出比较功能多用于产生简单的PWM信号。
设置通道控制寄存器eTMR_CHn_CTRL[CHMODE]=1
,该通道为输出比较模式。输出比较模式下,通道引脚为输出方向,引脚电平的初值由寄存器eTMR_CHn_CTRL[CHINIT]
和eTMR_CHn_CTRL[CHPOL]
指定,在匹配事件发生后,输出指定的电平(由eTMR_CHn_CTRL[VAL0CMP]
和eTMR_CHn_CTRL[VAL1CMP]
确定)。
不同于以往简单的多通道定时器外设的设计,eTMR为每个通道设计了两个匹配值寄存器eTMR_CHn_VAL0
和eTMR_CHn_VAL1
。当设定寄存器eTMR_CHn_CTRL[CHMODE]=2
时,该通道被设定为输出比较模式。寄存器eTMR_CHn_VAL0
和eTMR_CHn_VAL1
各自设定一个匹配值,控制该通道绑定的引脚输出指定电平(eTMR_CHn_CTRL[VAL0CMP]
和eTMR_CHn_CTRL[VAL1CMP]
的配置值,可以指定在匹配时输出高电平、低电平或是翻转)。以此可以产生PWM信号。
通过配置定时器的MOD,可以指定输出PWM信号的周期。在PWM信号的周期内部,通过配置通道的VAL0和VAL1,可以控制PWM信号的相位和占空比。
PWM模式
虽然输出比较模式可以用于产生简单的PWM信号,但eTMR仍然设计了专门的PWM模式(寄存器eTMR_CHn_CTRL[CHMODE]=1
)。在专门的PWM模式下,除了能够以约定的方式配置一些寄存器产生边沿对齐和中央对齐的PWM信号外,eTMR还可以将两路输出通道组合成一对互补输出,以及捕获硬件错误信号等,专门针对电机控制系统中对PWM信号的需求。
手册中描述了eTMR的PWM模式工作机制的框图,如图x所示。
实际上,在专门的PWM模式下,如手册上的详细描述,无论是产生中央对齐、边沿对齐还是非对称对齐(有相位差的边沿对齐)的PWM信号波形,对每个通道的INIT、MOD、VAL0、VAL1寄存器的使用方式,同在输出比较模式下产生PWM信号的用法并无二致。专门PWM模式较于使用输出比较模式产生PWM信号增加的主要功能,是能够将两个通道配对形成一个输出通道对(Channel Pair),而有一些功能,需要在启用通道对之后,才能解锁,例如产生互补输出PWM信号。
通道配对
在有8个通道的eTMR模块中,偶数编号的通道同+1后的奇数通道可以配对,例如,0和1号通道配对,2和3号通道配对等。当启用任何需要通道配对完成的功能时(配置寄存器eTMR_CTRL
寄存器中的COMPLxx
或DBSWxx
字段),对应通道即配对成功。如图x所示。
当通道配对成功后,通常使用偶数编号的通道的配置,控制通道对在启用模式下的行为,奇数编号通道的配置不再生效。
通道对的互补输出(Complementary Mode)
当设置eTMR_CTRL[COMPLxx]=1
时,将对应通道配对,并启用互补输出模式。此时,奇数编号的通道的占空比设置都不起作用,奇数编号通道输出的信号完全与通道对的偶数号通道的输出电平相反。如图x所示。
从图中可以看到,PWM1的信号并没有受到CH1_VAL0和CH1_VAL1的控制,而是同PWM0相对。
双缓冲输出PWM(Double Switch)
当设置eTMR_CTRL[DBSWxx]=1
时,将对应通道配对,并启用双缓冲模式。当启用双缓冲模式后,偶数通道和奇数通道产生的PWM信号相互亦或XOR,通过偶数通道的引脚输出亦或之后的信号,如图x所示。
双缓冲模式通常同互补输出模式一起使用,此时偶数通道引脚输出的是两个通道亦或之后的信号,奇数通道输出的时取反的信号。这是基于FOC算法,实现电机应用中的开窗操作,方便ADC采样的一个小功能。
错误检测机制(Fault Detection)
错误检测机制指的是,若外部的硬件电路检测到某种不安全的状态(例如电机突然停转,电机内部的电流采样过大,需要关断PWM控制的桥臂),就会立刻将PWM输出端口关断,或者将端口输出的切换至一种预设的安全的状态。这个错误检测的事件,对于eTMR模块来说,就是一个触发信号。这个信号可以来自于TMU(Trigger Multiplexer Module),也可以来自于错误检测引脚(eTMR_FLTn)。
eTMR对这个错误检测的的触发信号设计了一系列滤波和事件捕获机制(既然要突然关断eTMR的所有输出信号,当然是要慎之又慎),如图x所示。
图x中展示的关于错误检测信号的功能,均可在寄存器eTMR_FAULT
中设定。如图x所示。
输入捕获模式
设置通道控制寄存器eTMR_CHn_CTRL[CHMODE]=3
,该通道为输入捕获模式。输入捕获模式下,通道的引脚自动切换为输入方向,用以捕获触发信号(由寄存器CH_CTRL[CAPEDGE]
设置),在触发到来之时,将eTMR中计数器的值快照到通道的eTMR_CH_CVAL
寄存器中,同时通道的标志位eTMR_STS[CHxF]
也将置位。
输入捕捉通常用于记录某些关键事件发生的时刻,例如用来测量方波信号的频率或者脉宽等。
正交编码器功能
部分eTMR的实例被设计支持编码器模式。在有支持编码器模式的eTMR中(例如YTM32B1ME05的eTMR1),设置寄存器eTMR_QDCTRL[QDEN]=1
,即可将eTMR整个变成编码器,其余通道引脚和错误检测引脚的eTMR功能都被停用,使用专用的eTMR_QD_PHA
和eTMR_QD_PHB
引脚捕获来自编码器的脉冲信号流。
正交编码器的两个信号,是前后相位相差90度的同频方波信号,并且可通过相差的前后判断编码器的旋转方向。
图x展示了eTMR编码器模块的工作机制。将旋转编码器的两路输出信号输入到编码器模块的引脚后,eTMR模块内部对旋转编码器的信号先进行采样(同步,)、消抖(滤波,eTMR_QDCTRL[QDFCNT]
和eTMR_QDCTRL[QDFPER]
)、可选配置相位(eTMR_QDCTRL[PHAPOL]
和eTMR_QDCTRL[PHBPOL]
),然后进入编码器信号变换模块(主要是D触发器),将解析出的速度信号(脉冲序列)和方向信号(电平)送入eTMR的计数器(经过eTMR_QDCTRL[QDCLKPRS]
分频后送入),此时,eTMR的计数器的工作状态,等同于使用外部时钟源驱动计数。用户可以实时读取eTMR_CNT
的值,对应编码器的位置。
这里要注意,编码器的方向是可以正转,也可以反转的,这就意味着eTMR_CNT
寄存器中的值可以递增,也可以递减。
在eTMR_QDCTRL[QDMODE]
寄存器段中可以指定4中编码器的工作模式:
- 00b - Phase A and phase B decoding mode. When phase B changes follow phase A, the counter increases. When phase A changes follow phase B, the counter decreases.
- 01b - Phase A and phase B decoding mode. When phase A changes follow phase B, the counter increases. When phase B changes follow phase A, the counter decreases.
- 10b - Counting and direction decoding mode. Phase B input controls direction. When phase B input is high, the counter increases with phase A pulse. When phase B input is low, the counter decreases with phase A pulse.
- 11b - Counting and direction decoding mode. Phase A input controls direction. When phase A input is high, the counter increases with phase B pulse. When phase A input is low, the counter decreases with phase B pulse
同步机制
因为计数器和总线上访问寄存器使用两个不同的时钟域,又或是因为在有些应用(例如电机)场景中,需要硬件保证的同步更新一组寄存器,而不能又软件一个一个地赋值(否则切换过程中出现不当配置,电机就烧啦),eTMR为一些同计数相关的寄存器设计了缓冲寄存器(Buffered Registers),或者被称为“影子寄存器”(Shadow Registers)。影子寄存器对用户来说是不可见的。当启用影子模式后(eTMR_SYNC[REGLD] != 0
),用户通过APB总线向拥有影子寄存器的真实寄存器中写数时,实际由硬件控制先写到影子寄存器中,当预设的同步触发信号到来之时,硬件自动将影子寄存器中的数值写入到实际的寄存器中生效。如图x所示。
图x中展示了,eTMR中拥有影子的寄存器包括:eTMR_INIT、eTMR_MOD、eTMR_MID、eTMR_CHn_VAL0、eTMR_CHn_VAL1、eTMR_CHn_MASK,可以触发载入事件的触发信号,可以来自于MOD或者MID匹配事件、软件或者硬件触发,或者软件写eTMR_SYNC[LDOK]=1
。载入事件也可以至起标志位eTMR_STS[RF]
。
关于影子模式相关的寄存器配置,均在寄存器eTMR_SYNC
中可查阅。例如,eTMR_SYNC[LDREQ]
指定了在启用同步机制的情况下,连续触发多少次同步事件,才能真的同步一次。
调制模式
eTMR的调制模式,是另一种通道对混合应用的方式,但不同于eTMR内部通道对信号的相互耦合,调制模式允许两个不同eTMR模块以不同频率的信号相互调制(进行与AND逻辑计算)。这种多个实例配合起来的功能,需要在SOC级上进行配置,这也就意味着并不是集成了多了eTMR外设,就一定支持调制模式。
以YTM32B1ME05为例,当启用调试模式时,eTMR0的8个通道(配置CIM_ETMROPT[eTMR0_CHxOUTSEL]
)可以同eTMR1的CH0调制,通过eTMR0的通道引脚输出调制后的PWM信号。
调试模式产生的信号,可用来实现BLDC电机控制中的负载调制,对相位控制信号用占空比进一步对信号功率打折,也可以用来实现某些红外调制的控制信号。
中断、DMA及触发信号
作为一个典型的带输入输出的多通道定时器外设,eTMR的超时事件、各通道的匹配(或输入捕获事件)事件、错误检测输入信号,以及编码器溢出事件都可以触发中断。当对应事件产生后,有标志将会在eTMR_STS
寄存器置位,若此时寄存器eTMR_INTE
的对应位被置1(启用中断),则会将触发信号送至中断管理器NVIC,触发中断。用户通过写eTMR_STS
寄存器以清零标志位。
这里需要注意的是,eTMR的每个通道设计了两个匹配寄存器,这两个寄存器会共用同一个通道标志位,这就意味着,如果要分别处理两个通道的中断,前一个匹配事件的中断处理过程要尽量短,或者用户仅使用后一个事件的中断(允许通道标志位溢出,即在标志位置位后未被清零的情况下再次发起标志位置位的操作)。
eTMR也可以产生DMA触发信号,通过配置各通道的eTMR_CHn_CTRL[DMAEN]=1
,可以启用该通道的匹配(或输入捕获)事件,向DMAMUX发送DMA触发请求。这里对应于每个通道的两个匹配事件,对应也会产生两次DMA触发请求。例如,在使用DMA的触发计数器对eTMR产生PWM信号的周期进行计数时,对通道的触发请求进行计数(eTMR的通道溢出事件不会产生DMA请求),将会是PWM周期数量的2倍。
DMA触发的优先级高于中断触发,二者只能有一个生效。一旦使能DMA,即使使能中断,也不会置起中断请求。
应用要点(软件)
YTMicro SDK中设计了eTMR外设的驱动程序,有源码文件 etmr_driver.h
、etmr_common.c
、etmr_ic_driver.c
、etmr_mc_driver.c
、etmr_oc_driver.c
、etmr_pwm_driver.c
、etmr_qd_driver.c
等。同时提供了相应的样例工程:etmr_input_capture
、etmr_input_capture_interrupt
、etmr_output_compare
、etmr_pwm
。
总结
本文介绍了eTMR的主要功能,作为一个典型的多通道定时器外设的实现,eTMR实现了输出比较、输入捕获和专用PWM模式。在常规应用中,可以使用输出比较功能产生PWM,在专用PWM模式下,可以使用通道配对,实现需要多个引脚输出实现的功能(例如互补输出)。eTMR还支持死区控制,复杂的掩码机制等,本文未作详解,读者可根据应用需求再详查手册。
相关文章:

YTM32的增强型定时器eTMR外设模块详解
文章目录 eTMR外设简介eTMR工作机制系统框图引脚与信号计数器与时钟源输出比较模式PWM模式通道配对通道对的互补输出(Complementary Mode)双缓冲输出PWM(Double Switch)错误检测机制(Fault Detection) 输入…...
40.查找练习题(王道2023数据结构第7章)
试题1(王道7.2.4节综合练习5): 写出折半查找的递归算法。 #include<stdio.h> #include<stdlib.h> #include<string.h>#define MAXSIZE 10 #define ElemType int #define Status inttypedef struct{int data[MAXSIZE]; /…...
Segmentation fault 的bug解决
一,Segmentation fault 的bug解决 问题描述:自己在使用CPU上调试完代码之后,可以稳定运行,有输出结果。 但是把数据和模型加载上GPU之后,出现了报错。 Segmentation fault (core dumped) 搜了一下可能存在的原因&…...
【Python机器学习】零基础掌握BaggingRegressor集成学习
如何提升回归模型的稳定性和准确性? 在实际生活中,比如房价预测,经常会遇到一种情况:有大量的特征和样本数据,但模型的预测准确度仍然不尽人意。这时候,单一的模型(如支持向量机回归)可能表现得并不够好。 考虑到这个问题,解决方案可能是使用集成方法,特别是Baggin…...

麒麟KYLINOS通过命令行配置kysec的防火墙
原文链接:麒麟KYLINOS通过命令行配置kysec的防火墙 hello,大家好啊,今天给大家带来一篇使用命令行配置kysec的防火墙的文章,通过本篇文章的学习,大家可以了解到图形化界面中的防火墙信息是如何生成的,为后期…...

磁盘监控:告警时发送邮件
1.配置邮箱 1.编辑邮箱配置文件 vim /etc/mail.rc2.在末尾输入自己的邮箱配置,以163邮箱为例 #开启ssl set ssl-verifyignore #证书目录,下方为centos系统证书默认位置,也自行生成证书并指定 set nss-config-dir/etc/pki/nssdb # 配置的第…...

【HarmonyOS】元服务卡片router实现跳转到指定页面并传动态参数
【关键字】 元服务卡片、router跳转不同页面、传递动态参数 【写在前面】 本篇文章主要介绍开发元服务卡片时,如何实现从卡片中点击事件跳转到指定的应用内页面,并传递参数接受参数功能。此处以JS UI开发服务卡片为例,JS卡片支持组件设置ac…...

Centos安装RabbitMQ,JavaSpring发送RabbitMQ延迟延时消息,JavaSpring消费RabbitMQ消息
1,版本说明 erlang 和 rabbitmq 版本说明 https://www.rabbitmq.com/which-erlang.html 确认需要安装的mq版本以及对应的erlang版本。 2,下载安装文件 RabbitMQ下载地址: https://packagecloud.io/rabbitmq/rabbitmq-server Erlang下载地…...

leetcode:1323. 6 和 9 组成的最大数字(python3解法)
难度:简单 给你一个仅由数字 6 和 9 组成的正整数 num。 你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。 请返回你可以得到的最大数字。 示例 1: 输入:num 9669 输出:9969 解释: 改变…...

SpringBoot集成Redis Cluster集群(附带Linux部署Redis Cluster高可用集群)
目录 一、前言二、集成配置2.1、POM2.2、添加配置文件application.yml2.3、编写配置文件2.4、编写启动类2.5、编写测试类测试是否连接成功 一、前言 这里会使用到spring-boot-starter-data-redis包,spring boot 2的spring-boot-starter-data-redis中,默…...

LLaVA:visual instruction tuning
对近期一些MLLM(Multimodal Large Language Model)的总结 - 知乎本文将从模型结构,训练方法,训练数据,模型表现四个方面对近期的一些MLLM(Multi-modal Large Language Models)进行总结并探讨这四个方面对模型表现的影响…...

Python实现双目标定、畸变矫正、立体矫正
一,双目标定、畸变矫正、立体矫正的作用 双目目标定: 3D重建和测距:通过双目目标定,您可以确定两个摄像头之间的相对位置和朝向,从而能够根据视差信息计算物体的深度,进行三维重建和测距。姿态估计…...

showdoc 文件上传 (cnvd-2020-26585)
showdoc 文件上传 (cnvd-2020-26585) 描述 ShowDoc是一个非常适合IT团队的在线API文档、技术文档工具。通过showdoc,你可以方便地使用markdown语法来书写出美观的API文档、数据字典文档、技术文档、在线excel文档等等。 api_page存在任意文…...

Java数据类型,变量与运算符
1.字面常量 常量是在程序运行期间,固定不变的量称为常量。 public class HelloWorld{public static void main(String[] args){System.out.println("Hello,world");} } 在以上程序中,输出的Hello Word,其中的“Hello Word”就是…...
Linux nm命令
Linux的nm命令主要用于列出对象文件中的符号。以下是一些使用示例: 基本用法:只需运行’nm’命令,并将对象文件的名称作为输入传递给它。例如,我使用’nm’命令与’apl’elf 文件:nm apl。 在输出中为每个符号前面添加…...

iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
摘要: 本文将以iOS技术博主身份,分享解决使用无密码的.p12文件发布应用时遇到的问题,并介绍如何以带密码的方式重新导出.p12文件的方法。通过本文提供的步骤,开发者可以顺利完成证书的发布流程。 引言 在iOS应用发布过程中&…...
OpenCamera拍照的代码流程
按理来说,拍照应该是很简单的。随着功能的复杂,代码也是越来越多,流程越来越长。想看看地理位置是怎么保存的,于是就研究了一下OpenCamera的拍照流程。在回调时有点乱。 MainActivity clickedTakePhoto() takePicture() takePic…...
华为OD机考算法题:矩阵最大值
题目部分 题目矩阵最大值难度难题目说明给定一个仅包含 0 和 1 的 N*N 二维矩阵,请计算二维矩阵的最大值,计算规则如下: 1. 每行元素按下标顺序组成一个二进制数(下标越大越排在低位),二进制数的值就是该行…...

【Javascript】函数之形参与实参
function c(a,b){return ab;}var sumc(3,4);console.log(sum);a,b为形参 3,4为实参 形参和实参是⼀⼀对应的数量可以不对应参数的类型不确定函数可以设置默认参数实参可以是字⾯量也可以是变量...
PAT 乙级1090危险品装箱
题目: 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里。比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸。 本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

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…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...