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

19_单片机开发常用工具的使用

        工欲善其事必先利其器,我们做单片机开发的时候,不管是调试电路还是调试程序,都需要借助一些辅助工具来帮助查找和定位问题,从而帮助我们顺利解决问题。没有任何辅助工具的单片机项目开发很可能就是无法完成的任务,不过好在实际上我们总是有很多种工具可用的。本章就要介绍一些最常用的单片机项目开发辅助工具,学习它们的使用方法,让它们协助我们进行项目的开发和调试。

1. 万用表

1.1 什么是万用表

        万用表,也称作多用表、复用表等,是电子工程师最基本也最不可或缺的测量工具。它的基本功能包括:测量交直流电压、交直流电流、电阻阻值,检测二极管极性,测试电路通断等。有些高档一点的还会包含电容容值测量、三极管测试、脉冲频率测量等。万用表大体可分为两类:指针万用表和数字万用表,先来通过图 20-1 来认识一下它们。

        目前,指针万用表基本上已经被淘汰了,只在某些特殊场合才能见到(比如科研和教学机构),而数字万用表是当今的绝对主流。图中最右边的自动量程万用表也是数字万用表的一种,顾名思义,它能自动切换量程,就不用你自己再手动拨动了,但挡位(指电压、电流、电阻等这些不同的测量项目)还是要手动拨的,无疑自动量程万用表更高级一点,用起来也更省事。我们下面以手动量程的数字万用表为例,来讲解万用表的使用方法,自动量程的更简单,所以不用讲你也能会了。

1.2 万用表的使用方法

        要使用万用表完成一项实际的测量工作,除了要有如图 20-1 的万用表的主体机身之外,还得有两支表笔才行,表笔通常都是一只黑色、一只红色,如图 20-2 所示。

        对照图中的表笔插孔,使用万用表进行具体测量时,黑色表笔要插到标有“COM”的黑色插孔里,而红色表笔根据测量项目的不同,插到不同的插孔:测量小电流(≤200mA)信号时插到“mA”插孔,测量大电流(大于 200mA)信号时插到“20A”插孔,其余测量项目均插到标有“VΩ”的插孔。要特别注意进行不同测量项目时千万不要插错了位置!插好表笔之后还要选择挡位和量程,靠机身中间的挡位旋钮开关来实现,如图 20-3。

        围绕旋钮开关的一圈分为了多个挡位:电阻Ω、电容 F、关闭 OFF、三极管 hFE、直流电压 V—、交流电压 V~、直流电流 A—、交流电流 A~、二极管、通断。有的挡位不分量程,而有的挡位则包含多个量程,看图即可一目了然。下面我们介绍几个最常用的挡位的使用方法。

        交直流电压:交流和直流电压的测量方法是完全相同的,仅根据具体的被测信号选择不同的挡位量程即可。首先在测量前对被测信号的幅值应该有一个大概的评估,然后根据这个大概值去选择挡位:比如照明电是 220V 交流,那么选择交流电压 750V 挡位(绝不能选择低于被测信号最大值的挡位,以免损坏万用表);单片机系统多数都在 5V 以下,那么选择直流电压 20V 挡位。选择好挡位后就可以把表笔接入被测系统了,如果是交流电压自然就无所谓方向了,两支表笔的地位也就是等同的了,把它们分别接触到两个被测点上即可,如果是直流信号,那么最好是红色表笔接电压高的一点,而黑色表笔接电压低的一点。有时候我们习惯上只说某一点的电压是多少多少,而不是说哪两点之间的电压是多少,其实此时这某一点都是针对参考地来说的,即该点和参考地之间的电压,那么通常来说黑表笔就是接触到参考地上的了。

        电阻:电阻阻值的测量很简单,先把挡位开关打到Ω挡,如果不知道大概的阻值范围,就选择最大量程,然后用两支表笔分别接触待测电阻的两端即可,根据屏幕显示的数值可进一步选择更加合适的量程。值得一提的是,多数万用表进行测量时都有一个反应时间,慢的话需要等上几秒才能显示出一个稳定的测量值,所以大家在使用的时候也不要太心急哦。

        交直流电流:电流的测量相对复杂一点,因为测量电流要将万用表串联到回路中。那么首先需要我们把待测回路在某一个点上断开,把红表笔从 VΩ插孔换到 mA 或 20A 插孔中(同理根据事先大概的评估来选择,如无把握就选择 20A 孔,如实测数值很小则再换到 mA 孔),把挡位开关打到 mA 或 20A 挡位上,然后用万用表的两支表笔分别接触断点的两端,也就是用表笔和万用表本身将断开的回路再连起来,这样万用表就串在原来的回路中了,此时就可以在屏幕上读到电流的测量值了。需要特别注意的一点是:当每次测量完电流后,都必需把插在电流插孔上的红表笔插回到 VΩ插孔,以免其他人随后拿去测其它信号时造成意外短路损坏被测设备或万用表。

        二极管和通断:有的万用表上二极管和通断是同一个挡,有的是分开的两个,这从一个侧面说明它们在原理上是相同的。万用表从两支表笔之间输出一个很小的电流信号,通常为1mA 或更小,然后测量两支表笔之间的电压,如果这个电压值很小,小到几乎为 0,那就可以认为此时两支表笔之间是短路的,即被测物是连通的导线或等效阻值很小而近似通路,反之如果这个电压值很大以致超量程了(通常屏幕会在高位显示一个 1 后面是空白或者是 OL之类的提示),那么就可以认为两支表笔之间的被测物是断开的或者说绝缘的,这就是通断功能。通常当万用表检测到短路(即“通”)时还会发出提示声音。那么二极管呢,同样是这个原理,如果测到的电压值大约等于一个 PN 结的正向导通电压(硅管 0.5~0.7V、锗管0.2~0.3V),那么说明此时与红表笔接触的就是二极管的阳极,黑表笔接触的是阴极,反之如果显示超量程那么说明二极管接反了,你需要反过来再测,如果正反电压都很小,或者都很大,那么说明二极管可能是坏了。

        介绍完了万用表最常用的功能和使用方法,那么再来看它在我们单片机开发中能起到什么作用。当你自己辛辛苦苦搭建好了一套单片机系统,满怀期待的上电,而她却很不给面子的罢工时,该怎么办呢?首先就要检查电源是否正常:用万用表的直流电压挡测量单片机的供电电源,看是否是在 5V 左右(以 5V 单片机系统为例,其它电压的系统请对号入座),以先确定作为整个系统基础的电源是否有故障。然后再检查复位信号电压是否正常、其它控制信号电压是否正常等。一步步查找,一步步排除问题,再查找排除问题的过程中,通断功能就是一个很好的帮手,它可以告诉你电路板的哪条线路是通的,哪条线路没通上,或是哪条线路对地或对其它线路短路了等等。而其它的电阻、电流、频率等也都各有用处,只是不像电压和通断如此常用,就不再赘述了,大家在实践中慢慢体会吧。

2. 示波器

2.1 什么是示波器

        示波器,“人”如其名,就是显示波形的机器,它还被誉为“电子工程师的眼睛”。它的核心功能就是为了把被测信号的实际波形显示在屏幕上,以供工程师查找定位问题或评估系统性能等。它的发展同样经历了模拟和数字两个时代,还是先来看图 20-4 认识一下吧。

        目前,模拟示波器也基本上被淘汰了,现在是数字示波器的天下。同理,我们也只以数字示波器为例来加以讲解。

        数字示波器,更准确的名称是数字存储示波器,即 DSO(Digital Storage Oscilloscope)。这个“存储”不是指它可以把波形存储到 U 盘等介质上,而是针对于模拟示波器的即时显示特性而言的。模拟示波器靠的是阴极射线管(CRT,即俗称的电子枪)发射出电子束,而这束电子在根据被测信号所形成的磁场下发生偏转,从而在荧屏上反映出被测信号的波形,这个过程是即时的,中间没有任何的存储过程的。而数字示波器的原理却是这样的:首先示波器利用前端 ADC 对被测信号进行快速的采样,这个采样速度通常都可以达到每秒几百 M 到几G 次,是相当快的;而示波器的后端显示部件是液晶屏,液晶屏的刷新速率一般只有几十到一百多 Hz;如此,前端采样的数据就不可能实时的反应到屏幕上,于是就诞生了存储这个环节:示波器把前端采样来的数据暂时保存在内部的存储器中,而显示刷新的时候再来这个存储器中读取数据,用这级存储环节解决前端采样和后端显示之间的速度差异。

        很多人在第一次见到示波器的时候,可能会被它面板上众多的按钮唬住,再加上示波器一般身价都比较高,所以对使用它就产生了一种畏惧情绪。这是不必要的,因为示波器虽然看起来很复杂,但实际上要使用它的核心功能——显示波形,并不复杂,只要三四个步骤就能搞定了,而现在示波器的复杂都是因为附加了很多辅助功能造成的,这些辅助功能自然都有它们的价值,熟练灵活的应用它们可以起到事半功倍的效果。但作为初学者,我们先不管这些,我们只把它最核心的、最基本的功能应用起来即可。

2.2 示波器的使用

        跟万用表类似,要使用示波器,首先也得把它和被测系统相连,用的是示波器探头,如图 20-4 最右侧的图所示。示波器一般都会有 2 个或 4 个通道(通常都会标有 1~4 的数字,而多余的那个探头插座是外部触发,一般用不到它),它们的地位是等同的,可以随便选择,把探头插到其中一个通道上,探头另一头的小夹子连接被测系统的参考地(这里一定要注意一个问题:示波器探头上的夹子是与大地即三插插头上的地线直接连通的,所以如果被测系统的参考地与大地之间存在电压差的话,将会导致示波器或被测系统的损坏),探针接触被测点,这样示波器就可以采集到该点的电压波形了(普通的探头不能用来测量电流,要测电流得选择专门的电流探头)。

        接下来就要通过调整示波器面板上的按钮,使被测波形以合适的大小显示在屏幕上了。只需要按照一个信号的两大要素——幅值和周期(频率与周期在效果上是等同的)来调整示波器的参数即可。负责这两调整项的旋钮如图 20-5 所示。

        如图中所示,在每个通道插座上方的旋钮,就是调整该通道的幅值的,即波形垂直方向大小的调整。转动它们,就可以改变示波器屏幕上每个竖格所代表的电压值,所以可称其为“伏格”调整,如图 20-6 中两幅波形对比图所示:左图是 1V/grid,右图是 500mV/grid,左图波形的幅值占了 2.5 个格,所以是 2.5V,右图波形的幅值占了 5 个格,也是 2.5V。推荐是将波形调整到右图这个样子,因为此时波形占了整个测量范围的较大空间,可以提高波形测量的准确度和细节还原程度。

        除了图 20-5 通道上方的伏格旋钮外,通常还会在面板上找到一个大小相同的旋钮(不一定像图 20-5 所示的位置),这个旋钮是调整周期的,即波形水平方向大小的调整。转动它,就可以改变示波器屏幕上每个横格所代表的时间值,所以可称其为“秒格”调整,如图 20-7中两幅波形对比图所示:左图是 500us/grid,右图是 200us/grid,左图一个周期占 2 个格,周期是 1ms,即频率为 1KHz,右图一个周期占 5 个格,也是 1ms,即 1KHz。这里就没有哪个更合理的问题了,具体问题具体对待,它们都是很合理的。

        很多时候只进行上述两项调整的话,是能看到一个波形,但这个波形却很不稳定,左右乱颤,相互重叠,导致看不清楚,如图 20-8 所示。

        这就是因为示波器的触发没有调整好的缘故,那么什么是触发呢?简单点理解,所谓触发就是设定一个基准,让波形的采集和显示都围绕这个基准来。最常用的触发设置是基于电平的(也可基于时间等其它量,道理相同),大家看下上面的几张波形图,在左侧总有一个 T和一个小箭头,T 是触发的意思,这个小箭头指向的位置所对应的电压值就是当前的触发电平。示波器总是在波形经过这个电平的时候,把之前和之后的一部分存储并最终显示出来,于是就能看到图 20-6 和图 20-7 所示的波形。而图 20-8 中,我们可以看到,无论如何波形也不会经过 T 所指的位置,即用永远达不到触发电平,所以失去了基准的波形看上去就不稳定了。怎么调节这个触发电平的位置呢,在示波器面板上找一个标了 Trigger 的旋钮,如图 20-9所示,转动这个旋钮就可以改变这个 T 的位置了。

        除了可以改变触发电平的值以外,还可以设置触发的方式:比如选择上升沿还是下降沿触发,也就是选择让波形向上增加的时候经过触发电平还是向下减小的时候经过触发电平来完成触发,这些设置一般都是通过 Trigger 栏里的按钮和屏幕旁边的菜单键来完成。

        只要经过上述的这三四步,你就可以把示波器的核心功能应用起来了,可以用它观察单片机系统的各个信号了。比如说上电后系统不运行,就用它来测一下晶振引脚的波形正常与否吧。需要注意的是,晶振引脚上的波形并不是方波,而是更像正弦波,而且晶振的两个脚上的波形是不一样的,一个幅值小一点的是作为输入的,一个幅值大一点的是作为输出的,如图 20-10 所示。

3.逻辑分析仪

3.1什么是逻辑分析仪

        由于电路的发展是从模拟发展到数字这样的过程,因此测量工具的发展也遵循了这个顺序。现在提到测量,首先我们想到的是示波器,尤其是一些老工程师,他们对示波器的认知度非常高。而逻辑分析仪是一种新型测量工具,是随着单片机技术发展而发展起来的,非常适合单片机这类数字系统的测量分析,而通信方面的分析中,比示波器要更加方便和强大。

        一个待测信号使用 10MHz 采样率的逻辑分析仪去采集的话,假定阈值电压是 1.5V,那么在测量的时候,逻辑分析仪就会每 100ns 采集一个样点,并且超过 1.5V 认为是高电平(逻辑 1),低于 1.5V 认为是低电平(逻辑 0)。而后呢,逻辑分析仪会用描点法将波形连起来,工程师就可以在这个连续的波形中查看到逻辑分析仪还原的待测信号,从而查找异常之处。

        逻辑分析仪和示波器都是还原信号的,示波器前端有 ADC,再加上还原算法,可以实现模拟信号的还原。而逻辑分析仪只针对数字信号,不需要 ADC,不需要特殊算法,就用最简单的连点就可以了。此外,示波器往往是台式的,波形显示在示波器本身的显示屏上,而逻辑分析仪当前大多数是和 PC 端的上位机软件结合的,在电脑上直接显示波形。如图 20-11所示,是一款逻辑分析仪的实物图,最大采样率为 500M,通道数为 16 个,硬件采样深度为32M,经过压缩算法,最多可以实现每通道 5G 的采样深度,图 20-12 是该逻辑分析仪的上位机软件。我们先来看图认识一下它们。

3.2 逻辑分析仪的参数

        逻辑分析仪有三个重要参数:阈值电压、采样率和采样深度。

        阈值电压:区分高低电平的间隔。逻辑分析仪和单片机都是数字电路,它在读取外部信号的时候,多高电压识别成高电平、多高电压识别成低电平是有一定限制的。比如一款逻辑分析仪,阈值电压是:1.0~2.0V,那么当它采集外部的数字电路信号的时候,高于 2.0V 识别为高电平,低于 1.0V 识别为低电平,而在这之间的电压是一种不定态,有可能识别成高也可能识别成低,这是数字电路的固有特性所决定的。

        采样率:每秒钟采集信号的次数。比如一个逻辑分析仪的最大采样率是 100M,那么也就是说它一秒钟可以采集 100M 个样点,即每 10ns 采集一个样点,并且高于阈值电压的认定为高电平,低于阈值电压的认定为低电平。我们前边学 UART 通信的时候提到过它每一位都会读取 16 次,而逻辑分析仪的原理也是类似的,就是在超频读取。频率为 1M 的数字信号,我用 100M 的采样率去采集,那么一个信号周期就可以采集 100 次,最后用我们小学学过的描点法把采集到的样点连起来,就会还原出信号,当然 100 倍采样率的脉宽误差大概是百分之一。根据奈奎斯特定理,采样率必须是信号频率的 2 倍以上才能还原出信号,因为逻辑分析仪是数字系统,算法简单,所以最低也是 4 倍于信号的采样率才可以,一般选择 10 倍左右效果就比较好了。比如待测信号频率是 10M,那么你的逻辑分析仪采样率最低也得是 40M的采样率,最好能达到 100M,提高精确度。

        存储深度:我们刚才讲了采样率,那么采集到的高电平或者低电平信号,我们要有一个存储器存储起来。比如我们用 100M 采样率,那么 1 秒就会产生 100M 个状态样点。一款逻辑分析仪能够存储多少个样点数,这是逻辑分析仪很重要的一个指标。如果我们的采样率很高,但是存储的数据量很少,那也没有多大意义,逻辑分析仪可以保存的最大样点数就是一款逻辑分析仪的存储深度。通常情况下,数据采集时间=存储深度/采样率。

        此外,逻辑分析仪还有输入阻抗和耐压值等几个简单参数。所有的逻辑分析仪的通道上,都是有等效电阻和电容的,由于测量信号的时候分析仪通道是并联在通道上的,所以分析仪的输入阻抗如果太小,电容过大,就会干扰到我们线上原来的信号。理论上来讲,阻抗越大越好,电容越小越好。通常情况下,逻辑分析仪的阻抗都在 100K 以上,电容都在 10pF 左右。所谓的耐压值,就是说如果你测量超过这个电压值的信号那么分析仪就可能被烧坏,所以测量的时候必须要注意这个问题。

3.3 逻辑分析仪的使用

        1、硬件通道连接。首先我们要把逻辑分析仪的 GND 和待测板子的 GND 连到一起,以保证信号的完整性。然后把逻辑分析仪的通道接到待测引脚上,待测引脚可以用多种方式引出来。

        2、通道数设置。一般情况下,大多数逻辑分析仪有 8 通道、16 通道、32 通道等数目。而我们采集信号的时候,往往用不到那么多通道,为了更清晰的观察波形,可以把用不到的通道隐藏起来。

        3、采样率和采样深度设置。首先要对待测信号最高频率有个大概的评估,把采样率设置到它的 10 倍以上,还要大概判断一下我们要采集的信号的时间长短,在设置采样深度的时候,尽量设置的有一定的余量。采样深度除以采样率,得到的就是我们可以保存信号的时间。

        4、触发设置。由于逻辑分析仪有深度限制,不可能无限期的保存数据。当我们使用逻辑分析仪的时候,如果没有采用任何触发设置的话,从开始抓取就开始计算时间,一直到存满我们设置的存储深度后,抓取就停止。在实际操作过程中,开始抓取的一段信号可能是无用信号,有用信号可能只是其中一段,但是无用信号还占据了我们的存储空间。在这种情况下,我们就可以通过设置触发来提高存储深度的利用率。比如我们想抓取 UART 串口信号,而串口信号平时没有数据的时候是高电平,因此我们可以设置一个下降沿触发。从点击开始抓取,逻辑分析仪不会把抓到的信号保存到我们的存储器中,而是会等待一个下降沿的产生,一旦产生了下降沿,才开始进行真正的信号采集,并且把采集到的信号存储到存储器中。也就是说,从点击开始抓取到下降沿这段时间内的无用信号,被我们所设置的触发给屏蔽掉了,这是一个非常实用的功能。

        5、抓取波形。逻辑分析仪和示波器不同,示波器是实时显示的,而逻辑分析仪需要点击开始,才开始抓取波形,一直到存满了我们所设置的存储深度后结束,然后我们可以慢慢的去分析我们抓到的信号,因此点击“开始抓取”这个步骤是必须要有的。

        6、设置协议解析(标准协议)。如果你抓取的波形是标准协议,比如 UART、I2C、SPI等这种协议,逻辑分析仪一般都会配有专门的解码器,可以通过设置解码器,不仅仅像示波器那样把波形显示出来,还可以直接把数据解析出来,以十六进制、二进制、ASCII 码等不同形式显示出来。

        7、数据分析。和示波器类似,逻辑分析仪也有各种测量标线,可以测量脉冲宽度,测量波形的频率,占空比等信息,通过数据分析,查找波形是否符合我们的要求,从而帮助我们解决问题。

3.4 应用实例———分析UART、I2C、SPI

        本节我们用实例来讲解逻辑分析仪在分析通信数据方面的应用,我们使用前面提到的LA5016 来进行。

        首先,我把逻辑分析仪的 GND 与我们的 KST-51 开发板的 GND 接起来,随便找一个通道,比如用通道 2 和板子的 P3.1 引脚接起来。然后让单片机以 2400 的波特率、无校验的方式发送几个字节的数据。由于 UART 通信平时默认是高电平,当数据来的时候,会先出现一位起始位,因此我们把触发方式设置成下降沿触发。而后我们要设置一下采样率和采样深度,因为我们的信号是 2400 波特率的,采样率超过 1M 就很准了,抓几个字节,采样深度也要求不高,我们干脆都设置成 1M,那么总的采集时间计算下来就是 1 秒。点击 Start 按钮,这个时候,逻辑分析仪还没有开始采集,因为它要等待一个下降沿产生才开始采集信号。我们让单片机发送串口通信数据,逻辑分析仪就会开始抓取信号,抓到的信号会直接显示在对应软件的界面上,如图 20-13 所示。

        然后点击右侧边栏 Analyzers 右边的加号,在弹出的菜单中,选择 UART 通信协议,进入配置界面,将波特率改成 2400,无校验位,选择通道 2,点击 OK,就会在软件界面上直接给我们把数据解析出来,如图 20-14 所示。

        当我们设置好串口通信选项后,点击 OK,直接就会在我们的通道上把十六进制显示在波形上边的悬浮图上,如果要显示其它进制的数字,还可以点击 UART 右侧的那个小圆圈,点击显示为其它格式,包括二进制、ASCII、十进制都可以显示出来。此外,如果我们的数据量很大,解析出来后想要用文本形式显示,也可以点击那个小圆圈,点击输出选项,就可以把数据导出为 txt 或 csv 格式,如图 20-15 所示。

        同样的方法,我们也可以去抓取和解析 I2C 和 SPI 的信号数据。I2C 和 SPI 都不是一条线,比如 I2C 有 2 个信号,SCL 和 SDA,我们用我们分析仪的通道 3 接到 SCL 上,通道 4 接到SDA 上,也可以将数据抓出来并且解析出来,其中 SDA 上悬浮的就是解析出的数值,如图20-16 所示。

        SPI 是 4 线的,大家在使用的时候,尤其要注意配置 CPOL 和 CPHA 的设置,如果这两项设置的不对,或者是解析不出来数据,或者是解析出的数据是错误的。正确设置后,解析出来的波形数据分别悬浮在 MOSI 和 MISO 的通道上面,如图 20-17 所示.

3.5 数字电路应用中逻辑分析仪比示波器的优势

        示波器是既可以测量模拟信号又可以测量数字信号的,但在测量分析数字信号时,逻辑分析仪比示波器强大许多,主要有以下几个方面。

        1、测量数字信号时,示波器通常可以用来观察有没有信号或者是信号的质量如何,逻辑分析仪主要用来分析信号高低电平时序时间,以及通信的是什么数据等。

        2、逻辑分析仪通道数通常比示波器多得多。示波器常见有单通道、双通道和四通道。而逻辑分析仪常见有 8 通道、16 通道、32 通道或者更多,测量多个信号运行状态,尤其是并行数据,只有通道足够多才能把完整的数据测量分析出来。

        3、具有延迟能力,可以保存更长时间的数据。示波器是实时显示的,实际上它只能显示其中一小段数据,可以实现快速刷新,带来的缺点就是存储深度很低。而逻辑分析仪有较大的存储深度,可以保存大量的数据,而后一点点进行分析。

        4、具有多种灵活的触发功能,可以对获取的数据进行挑选,对系统运行中的程序段进行调试。示波器通常只有上升沿、下降沿和电压设置的触发,而逻辑分析仪不仅仅有上升沿和下降沿触发,还可以设置并行数据等更复杂的触发。

        5、具备强大的数据解析能力。对于一些标准的协议,示波器显示的是波形,而逻辑分析仪可以直接把数据解析出来。除了我们前边讲过的三种协议外,现在很多逻辑分析仪大都具备十种以上的协议解析器,可以方便的解析出各种数据,并且可以把数据显示成为 ASCII码、二进制、十进制、十六进制等直观的形式。

        6、可以将抓到的波形数据以 txt、csv 等格式导出,提供给第三方工具,比如 matlab 等进行时域分析。

        在模拟时代,示波器有着不可替代的优势,但是步入数字世界,逻辑分析仪拥有更强大的功能,可以称之为分析数字通信的利器。

相关文章:

19_单片机开发常用工具的使用

工欲善其事必先利其器,我们做单片机开发的时候,不管是调试电路还是调试程序,都需要借助一些辅助工具来帮助查找和定位问题,从而帮助我们顺利解决问题。没有任何辅助工具的单片机项目开发很可能就是无法完成的任务,不过…...

最新版微服务项目搭建

一,项目总体介绍 在本项目中,我将使用alibabba的 nacos 作为项目的注册中心,使用 spring cloud gateway 做为项目的网关,用 openfeign 作为服务间的调用组件。 项目总体架构图如下: 注意:我的Java环境是17…...

spring揭秘19-spring事务01-事务抽象

文章目录 【README】【1】事务基本元素【1.1】事务分类 【2】java事务管理【2.1】基于java的局部事务管理【2.2】基于java的分布式事务管理【2.2.1】基于JTA的分布式事务管理【2.2.2】基于JCA的分布式事务管理 【2.3】java事务管理的问题 【3】spring事务抽象概述【3.1】spring…...

基于Matlab的图像去雾系统(四种方法)关于图像去雾的基本算法代码的集合,方法包括局部直方图均衡法、全部直方图均衡法、暗通道先验法、Retinex增强。

基于Matlab的图像去雾系统(四种方法) 关于图像去雾的基本算法代码的集合,方法包括局部直方图均衡法、全部直方图均衡法、暗通道先验法、Retinex增强。 所有代码整合到App designer编写的GUI界面中,包括导入图片,保存处…...

油猴插件录制请求,封装接口自动化参数

参考:如何使用油猴插件提高测试工作效率 一、背景 在酷家乐设计工具测试中,总会有许多高频且较繁琐的工作,比如: 查询插件版本:需要打开Chrome控制台,输入好几个命令然后过滤出版本信息。 查询模型商品&…...

循环购模式!结合引流和复购于一体的商业模型!

欢迎各位朋友,我是你们的电商策略顾问吴军。今天,我将向大家介绍一种新颖的商业模式——循环购模式,它将如何改变我们的消费和收益方式。你是否好奇,为何商家会提供如此慷慨的优惠?消费一千元,不仅能够得到…...

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用&…...

c中 int 和 unsigned int

c语言中,char、short、int、int64以及unsigned char、unsigned short、unsigned int、unsigned int64等等类型都可以表示整数。但是他们表示整数的位数不同,比如:char/unisigned char表示8位整数; short/unsigned short表示16位整…...

sheng的学习笔记-AI-话题模型(topic model),LDA模型,Unigram Model,pLSA Model

AI目录:sheng的学习笔记-AI目录-CSDN博客 基础知识 什么是话题模型(topic model) 话题模型(topic model)是一族生成式有向图模型,主要用于处理离散型的数据(如文本集合)​,在信息检索、自然语言处理等领域有广泛应用…...

html 页面引入 vue 组件之 http-vue-loader.js

一、http-vue-loader.js http-vue-loader.js 是一个 Vue 单文件组件加载器,可以让我们在传统的 HTML 页面中使用 Vue 单文件组件,而不必依赖 Node.js 等其他构建工具。它内置了 Vue.js 和样式加载器,并能自动解析 Vue 单文件组件中的所有内容…...

html+css网页设计 旅行 蜘蛛旅行社3个页面

htmlcss网页设计 旅行 蜘蛛旅行社3个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…...

考拉悠然产品发布会丨以悠然远智全模态AI应用平台探索AI行业应用

9月6日,成都市大模型新技术新成果发布暨供需对接系列活动——考拉悠然专场,在成都市高新区菁蓉汇盛大举行。考拉悠然重磅发布了悠然远智丨全模态AI应用平台,并精彩展示了交通大模型应用——智析快处等最新的AI产品和技术成果。 在四川省科学…...

LLM大模型学习:揭秘LLM应用构建:探究文本加载器的必要性及在LangChain中的运用

构建 LLM 应用为什么需要文本加载器,langchain 中如何使用文本加载器? 在不同的应用场景中需要使用不同的文本内容作为内容的载体,针对不同的类型的文本,langchain 提供了多种文本加载器来帮助我们快速的将文本切片,从…...

Flutter函数

在Dart中,函数为 一等公民,可以作为参数对象传递,也可以作为返回值返回。 函数定义 // 返回值 (可以不写返回值,但建议写)、函数名、参数列表 showMessage(String message) {//函数体print(message); }void showMessage(String m…...

P3565 [POI2014] HOT-Hotels

~~~~~ P3565 [POI2014] HOT-Hotels ~~~~~ 总题单链接 思路 ~~~~~ 设 g [ u ] [ i ] g[u][i] g[u][i] 表示在 u u u 的子树内,距离 u u u 为 i i i 的点的个数。 ~~~~~ 设 d p [ u ] [ i ] dp[u][i] dp[u][i] 表示: u u u 的子树内存在两个点 x , …...

设计模式 | 单例模式

定义 单例设计模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。这种模式常用于需要控制对某些资源的访问的场景,例如数据库连接、日志记录等。 单例模式涉…...

Web安全之CSRF攻击详解与防护

在互联网应用中,安全性问题是开发者必须时刻关注的核心内容之一。跨站请求伪造(Cross-Site Request Forgery, CSRF),是一种常见的Web安全漏洞。通过CSRF攻击,黑客可以冒用受害者的身份,发送恶意请求&#x…...

IDEA运行Java程序提示“java: 警告: 源发行版 11 需要目标发行版 11”

遇到这个提示一般是在pom.xml中已经指定了构建的Java版本环境是11例如(此时添加了build插件的情况下虽然不能直接运行代码但是maven是可以正常打包构建)&#xff1a; <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><…...

车载测试| 汽车的五域架构 (含线控技术知识)

汽车的五域架构是一种将汽车电子控制系统按照功能进行划分的架构模式&#xff0c;主要包括动力域、底盘域、座舱域、自动驾驶域和车身域。&#xff08;汽车三域架构通常是指将汽车电子系统划分为三个主要领域&#xff1a;动力域、底盘域和智能座舱域&#xff08;或车身舒适域&a…...

【Linux】gcc/g++ 、make/Makefile、git、gdb 的使用

目录 1. Linux编译器-gcc/g1.1 编译器gcc/g的工作步骤1.2 函数库1.2.1 函数库的作用及分类1.2.2 动态链接和静态链接1.2.3 动态库和静态库的优缺点 1.3 gcc选项 2. Linux项目自动化构建工具-make/Makefile2.1 .PHONY2.2 尝试编写进度条程序 3. git3.1 安装 git3.2 下载项目到本…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...

Vue3 PC端 UI组件库我更推荐Naive UI

一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用&#xff0c;前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率&#xff0c;还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库&#xff08;Naive UI、Element …...

接口 RESTful 中的超媒体:REST 架构的灵魂驱动

在 RESTful 架构中&#xff0c;** 超媒体&#xff08;Hypermedia&#xff09;** 是一个核心概念&#xff0c;它体现了 REST 的 “表述性状态转移&#xff08;Representational State Transfer&#xff09;” 的本质&#xff0c;也是区分 “真 RESTful API” 与 “伪 RESTful AP…...