第6章_瑞萨MCU零基础入门系列教程之串行通信接口(SCI)
本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id=728461040949
配套资料获取:https://renesas-docs.100ask.net
瑞萨MCU零基础入门系列教程汇总: https://blog.csdn.net/qq_35181236/article/details/132779862
第6章 串行通信接口(SCI)
本章目标
- 了解串行通信协议
- 了解SCI模块内部原理
6.1 协议介绍
6.1.1 通信的基本概念
一个嵌入式产品由许多元器件组成的,它们之间要互相协作,相互之间要进行通信。不同的元器件支持的通信方式是不同的,有的是串行的,有的是并行的;有的是同步的,有的是异步的。
本小节介绍一些常见的通信概念。
- 单工、半双工和全双工通信
- 按照数据传输的方向,通信可以分为全双工、半双工和单工;
- 全双工:双方之间、两个方向的数据都可以同时发送;
- 半双工:双方之间、两个方向的数据都可以发送,但是同一时刻只能一方发送信息;
- 单工:只能一方发信息,一方接受信息,通信是单向的。
全双工就像电话通信,双方任意时刻都可以同时说话、听到声音;半双工就像对讲机通信,两边不能同时说话;单工就像收音机,只能由广播站发送给收音机,是单向的。如图所示:
- 串行通信和并行通信
照数据传输的方式,通信可以分为串行通信和并行通信。串行通信简单的说就是数据依次传输,比如要传输0b11111111,一位一位的发送,需要发送8次。并行通信则是几个数据一起传输,同样是0b11111111,如果8位一起发送,只需要发送1次,如图所示:
由此可见,串行传输占用的通信线更少,成本低,通信速度相对较慢;并行传输占用的通信线多,成本高,通信速度相对更快。但随着对传输速度要求越来越高,并行传输开始出现信号之间的干扰,串行通信反而受干扰影响较小,之后又发展出差分传输等技术,极大地提高了串行传输速率,使得串行通信速度可能比并行通信速度更快。
串行通信就像单车道,行驶的车辆需要依次行驶。并行通信就像多车道,同时多辆汽车并排行驶。但当车速很快的时候,多车道上并列行驶的汽车之间会形成“气流”相互干扰,单车道则受影响较小,速度能够进一步提升。
- 同步通信和异步通信
按每一位数据的传输方式,可以分为同步通信和异步通信。数据在双方之间传输时,需要制定规则约定怎样传输一位数据,在这个基础上再约定怎样传输一个数据包。
同步通信的做法是加一个时钟信号,发送方和接收方在这个时钟的节拍下传输数据,比如常见的SPI、I2C。数据发起方会发出时钟信号,用来通知对方:你要接收数据了。对方可以在时钟信号的上升沿或下降沿采样数据。如下图所示:
对于异步通信,无需时钟信号,但是双方要遵守相同的约定:怎么表示起始信号、停止信号,怎么表示一位数据。如下图所示:
有多种异步通信协议,以红外遥控器的信号为例:
① 起始信号:遥控器发出一个9ms的低电平、4.5ms的高电平。接收器检测到这样的信号后,就知道要准备接收数据了
② 接下来就可以传输若干位的数据了,怎么表示每一位的数据呢?每一位数据都以0.56ms的低脉冲开始,随后是高脉冲:高脉冲为0.56ms时表示这位数据为0,高脉冲为1.69ms时表示这位数据为1。如下图所示:
因此,可以通过这样简单判断:有时钟信号的是同步通信,否则是异步通信。
- 通信的速率
对于同步通信,通信速率由时钟信号决定,时钟信号越快,传输速度就越快。
对于异步通信,需要收发双方提前约定速率,这也就是我们串口调试时,波特率不对显示乱码的原因。
通常使用比特率来描述通信速率的快慢,与之容易混淆的是波特率。
-
比特率(Bitrate):系统在单位时间内传输的比特位(二进制0或1)个数,通常用Rb表示,单位是比特/秒(bit/s),缩写为bps;
-
波特率(Baudrate):系统在单位时间内传输的码元个数,通常用RB表示,单位是波特(Bd);
100bit/s即是一秒钟传输100个0或1,100Bd即是一秒钟传输100个码元。
码元就是“承载信息量的基本信号单位”,以一条电线上传输的信号为例,码元就是电线上的电平值。
如果电线上电平只有0和3.3V两种选择,传输的信号是这2种电平之一,码元的状态只有2种。接收方可以把0V认为是二进制的0,把3.3V认为是二进制1。即:传输1个码元时,能用来表示1位数据。
如果电线上电平有0V、3.3V、5V、12V四种选择,传输的信号是这4种电平之一,码元的状态有4种。接收方可以把这4个电平认为是二级制的4个值:00、01、10、11。即:传输1个码元时,能用来表示2位数据。
因此码元状态为2时,比特率等于波特率,码元状态越多,每次传输的码元能携带的信息越多,自然速率也越高。
码元有N个状态时,比特率与波特率的关系式:
- 常见通信协议
在嵌入式中,有众多通信协议,往往从性能、成本、稳定性、易用性等角度考虑选择合适的协议。常见的通信协议如下所示:
6.1.2 UART协议
通用异步收发器简称UART,即“Universal Asynchronous Receiver Transmitter”,它用来传输串行数据:发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出;接收数据时,UART检测另一根电线上的信号,将串行数据收集放在缓冲区中,CPU即可读取UART获得这些数据。UART之间以全双工方式传输数据,最精简的连线方法只有三根电线:TxD用于发送数据,RxD用于接收数据,GND用于给双方提供参考电平,连线如图所示:
UART使用标准的TTL/CMOS逻辑电平(0~5V、0~3.3V、0~2.5V或0~1.8V四种)来表示数据,高电平表示1,低电平表示0。进行长距离传输时,为了增强数据的抗干扰能力、提高传输长度,通常将TTL/CMOS逻辑电平转换为RS-232逻辑电平,3~12V表示0,-3~-12V表示1。
TxD、RxD数据线以“位”为最小单位传输数据。帧(frame)由具有完整意义的、不可分割的若干位组成,它包含开始位、数据位、较验位(需要的话)和停止位。发送数据之前,UART之间要约定好数据的传输速率(即每位所占据的时间,其倒数称为波特率)、数据的传输格式(即有多少个数据位、是否使用较验位、是奇较验还是偶较验、有多少个停止位)。
数据传输流程如下:
- 平时数据线处于“空闭”状态(1状态)。
- 当要发送数据时,UART改变TxD数据线的状态(变为0状态)并维持1位的时间──这样接收方检测到开始位后,再等待1.5位的时间就开始一位一位地检测数据线的状态得到所传输的数据。
- UART一帧中可以有5、6、7或8位的数据,发送方一位一位地改变数据线的状态将它们发送出去,首先发送最低位。
- 如果使用较验功能,UART在发送完数据位后,还要发送1个较验位。有两种较验方法:奇较验、偶较验──数据位连同较验位中,“1”的数目等于奇数或偶数。
- 最后,发送停止位,数据线恢复到“空闭”状态(1状态)。停止位的长度有3种:1位、1.5位、2位。
下图演示了UART使用7个数据位、偶较验、2个停止位的格式传输字符“A”(二进制值为0b1000001)时,TTL/CMOS逻辑电平、RS-232逻辑电平对应的波形。
6.1.3 I2C协议
- I2C总线的概念
I2C(Inter-Integrated Circuit,又称IIC)总线是一种由PHILIPS公司开发的串行总线,用于连接微控制器及其外围设备,它具有如下特点:
- 只有两条总线线路:一条串行数据线(SDA),一条串行时钟线(SCL)。
- 每个连接到总线的器件都可以使用软件根据它的惟一的地址来识别。
- 传输数据的设备间是简单的主/从关系。
- 主机可以用作主机发送器或主机接收器。
- 它是一个真正的多主机总线,两个或多个主机同时发起数据传输时,可以通过冲突检测和仲裁来防止数据被破坏。
- 串行的8 位双向数据传输,位速率在标准模式下可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可达3.4Mbit/s。
- 片上的滤波器可以增加抗干扰功能,保证数据的完整。
- 连接到同一总线上的IC 数量只受到总线的最大电容400pF的限制。
下图是一条I2C总线上多个设备相连的例子。
先说明一些术语,如下表所示。
- 发送器:发送数据到总线的器件
- 接收器:从总线接收数据的器件
- 主机:发起/停止数据传输、提供时钟信号的器件
- 从机:被主机寻址的器件
- 多主机:可以有多个主机试图去控制总线,但是不会破坏数据
- 仲裁:当多个主机试图去控制总线时,通过仲裁可以使得只有一个主机获得总线控制权,并且它传输的信息不被破坏
- 同步:多个器件同步时钟信号的过程
- I2C总线的形象类比
在讲解协议细节前,先使用生活示例形象理解I2C协议:
体育老师:可以把球发给学生,也可以把球从学生中接过来。
- 老师想发球时,步骤如下:
- 老师想接球时,步骤如下:
依照这个简单的例子,可以引入IIC的传输协议:
① 老师说开始了,表示开始信号(start)
② 老师提醒某个学生要发球,表示发送地址和方向(address/read/write)
③ 老师发球/接球,表示数据的传输
④ 到球要回应:回应信号(ACK)
⑤ 老师说结束,表示IIC传输结束§
- I2C总线的信号类型
I2C总线在传送数据过程中共有三种类型信号:开始信号、结束信号和响应信号。
- 开始信号(S):SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
- 结束信号§:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。
- 响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA电平。
它们的波形如图所示:
SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化,如图所示。
- I2C总线的数据传输格式:
发送到SDA线上的每个字节必须是8位的,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB)。如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能继续接收或发送下一个字节,从机可以拉低SCL迫使主机进入等待状态。当从机准备好接收下一个数据并释放SCL后,数据传输继续。如果主机在传输数据期间也需要完成一些其他功能(例如一个内部中断服务程序)也可以拉低SCL以占住总线。
启动一个传输时,主机先发出S信号,然后发出8位数据。这8位数据中前7位为从机的地址,第8位表示传输的方向(0表示写操作,1表示读操作)。被选中的从机发出响应信号。紧接着传输一系列字节及其响应位。最后,主机发出P信号结束本次传输。
下图是几种I2C总线上数据传输的格式。
并非每传输8位数据之后,都会有ACK信号。有以下3种例外:
a) 当从机不能响应从机地址时(例如它正忙于其他事而无法响应I2C总线的操作,或者这个地址没有对应的从机),在第9个SCL周期内SDA线没有被拉低,即没有ACK信号。这时,主机发出一个P信号终止传输或者重新发出一个S信号开始新的传输。
b) 如果从机接收器在传输过程中,不能接收更多的数据时,它也不会发出ACK信号。这样,主机就可以意识到这点,从而发出一个P信号终止传输或者重新发出一个S信号开始新的传输。
主机接收器在接收到最后一个字节后,也不会发出ACK信号。于是,从机发送器释放SDA线,以允许主机发出P信号结束传输。
6.1.4 SPI协议
SPI(Serial Peripheral Interface,串行外设接口)是由摩托罗拉(Motorola)在1980前后提出的一种全双工同步串行通信接口,它用于MCU与各种外围设备以串行方式进行通信以交换信息,通信速度最高可达25MHz以上。
SPI接口主要应用在EEPROM、FLASH、实时时钟、网络控制器、OLED显示驱动器、AD转换器,数字信号处理器、数字信号解码器等设备之间。
SPI通常由四条线组成,一条主设备输出与从设备输入(Master Output Slave Input,MOSI),一条主设备输入与从设备输出(Master Input Slave Output,MISO),一条时钟信号(Serial Clock,SCLK),一条从设备使能选择(Chip Select,CS)。假设现在主控芯片要传输一个0x56数据给SPI Flash,时序如下:
首先拉低CS0选中SPI Flash,0x56的二进制就是0b0101 0110,因此在每个SCK时钟周期,DO输出对应的电平。SPI Flash会在每个时钟周期的上升沿读取D0上的电平.
SPI和I²C对比如下表所示。SPI可以同时发出和接收数据,因此SPI的理论传输速度比I²C更快。SPI通过片选引脚选择从机,一个片选一个从机,因此在多从机结构中,需要占用较多引脚,而I²C通过设备地址选择从机,只要设备地址不冲突,始终只需要两个引脚。
功能说明 | SPI总线 | I2C总线 |
---|---|---|
通信方式 | 同步 串行 全双工 | 同步 串行 半双工 |
通信速度 | 一般50MHz以下 | 100KHz、400KHz、3.4MHz |
从设备选择 | 引脚片选 | 设备地址片选 |
总线接口 | MOSI、MISO、SCK、CS | SDA、SCL |
- SPI的物理拓扑结构
SPI可以一个主机连接单个或多个从机,每个从机都使用一个引脚进行片选,物理连接示意图如图所示:
- SPI的数据交换
在SCK时钟周期的驱动下,主机把数据驱动到MOSI上传给从机,从机把数据驱动到MISO上传给主机,如下图所示。
主机发送N字节给从机时,必定能接收到N字节,至于接收到的N字节是否有意义由从机决定。如果主机只想对从机进行写操作,主机只需忽略接收的从机数据即可。如果主机只想读取从机数据,它也要发送数据给从机(发送的数据可以是空数据)。
- SPI的传输模式
SPI有四种传输模式,如下表所示,主要差别在于CPOL和CPHA的不同。
- CPOL(Clock Polarity,时钟极性)表示SCK在空闲时为高电平还是低电平。当CPOL=0,SCK空闲时为低电平,当CPOL=1,SCK空闲时为高电平。
- CPHA(Clock Phase,时钟相位)表示SCK在第几个时钟边缘采样数据。当CPHA=0,在SCK第一个边沿采样数据,当CPHA=1,在SCK第二个边沿采样数据。
SPI模式 | CPOL | CPHA | 说明 |
---|---|---|---|
0 | 0 | 0 | 时钟空闲状态为低电平;在时钟第一个边沿(上升沿)采样数据 |
1 | 0 | 1 | 时钟空闲状态为低电平;在时钟第二个边沿(下降沿)采样数据 |
2 | 1 | 0 | 时钟空闲状态为高电平;在时钟第一个边沿(下降沿)采样数据 |
3 | 1 | 1 | 时钟空闲状态为高电平;在时钟第二个边沿(上升沿)采样数据 |
如下图所示,CPHA=0时,表示在时钟第一个时钟边沿采样数据。当CPOL=1,即空闲时为高电平,从高电平变为低电平,第一个时钟边沿(下降沿)即进行采样。当CPOL=0,即空闲时为低电平,从低电平变为高电平,第一个时钟边沿(上升沿)即进行采样。
- CPHA=1时,表示在时钟第二个时钟边沿采样数据。
- 当CPOL=1,即空闲时为高电平,从高电平变为低电平再变为高电平,第二个时钟边沿(上升沿)即进行采样。
- 当CPOL=0,即空闲时为低电平,从低电平变为高电平再变为低电平,第二个时钟边沿(下降沿)即进行采样,如图所示:
6.2 SCI模块
6.2.1 概述
SCI的含义是“Serial Communications Interface”,即串行通信接口,它的结构图如下:
上图的“PSR”含义为“Receive Shift Register”,即“接收移位寄存器”,它可以接收一位一位的数据,组合好后保存在上面的RDR寄存器里供程序读取。“RDR”含义为“Receive Data Register”,即接收数据寄存器。
“TSR”含义为“Transmit Shift Register”,即“发送移位寄存器”。程序把数据写到TDR寄存器后,里面的数据就经过TSR一位一位地发送出去。“TDR”含义为“Transmit Data Register,”即发送数据寄存器。
正因为SCI模块里有PSR、TSR移位寄存器,再结合其他控制单元(比如引脚、时钟、波特率产生器),就可以支持多种串行协议,比如UART、I2C、SPI、Smart Card等。
以UART、I2C、SPI为例,它们的硬件实现里都用到了“移位寄存器”,对比如下:
UART | I2C | SPI | |
---|---|---|---|
时钟信号 | 无 | 有 | 有 |
数据信号 | TXD、RXD两条 | SDA一条 | MOSI、MISO两条 |
片选信号 | 无 | 无 | 有 |
速率 | 双方事先约定 | 由时钟信号决定 | 由时钟信号决定 |
通过移位寄存器发送 | 是 | 是 | 是 |
通过移位寄存器接收 | 是 | 是 | 是 |
6.2.2 使用方法
RA6M5芯片的SCI模块有10个SCI通道,每个通道能支持的协议(也被称为模式)如下表所示:
模式 | SCI0、SCI5~SCI9 | SCI3、SCI4 | SCI1、SCI2 |
---|---|---|---|
Asynchronous 异步模式 | 支持 | 支持 | 支持 |
Clock synchronous 时钟同步模式 | 支持 | 支持 | 支持 |
Smart cardinterface | 支持 | 支持 | 支持 |
Simple I2C 简化版本的I2C | 支持 | 支持 | 支持 |
Simple SPI 简化版本的SPI | 支持 | 支持 | 支持 |
FIFO 模式 | 支持 | 支持 | 不支持 |
Address match 地址匹配 | 支持 | 支持 | 不支持 |
Manchester mode | 不支持 | 支持 | 不支持 |
Extended serial | 不支持 | 不支持 | 支持 |
GPT clock input | 不支持 | 不支持 | 支持 |
使用SCI模块时,步骤如下:
① 查看原理图,确定引脚
根据引脚编号在芯片手册里找到引脚名,如果引脚名里有“TXDn”、“RXDn”字样更好。比如对于下面的原理图,使用P100作为SPI的MISO引脚:
在芯片手册的《1.7 Pin Lists》中查找P100,得到它的引脚名“RXD0/SCK1/MISOB_A/QSPCLK/OM_SCLK”,如下所示:
② 根据引脚名确定使用哪个SCI通道
SCIn通道使用TXDn、RXDn引脚,所以可以根据TXDn或RXDn的编号确定SCI通道。
以P100引脚为例,它的引脚名里含有“RXD0”,就表示这个引脚可以连接到SCI模块的通道0;再根据表6.5可以知道SCI0支持“Simple SPI”,以后就可以使用RASC配置SCI0工作于“Simple SPI”模式,并选择P100这些引脚。
怎么使用RASC进行配置、怎么编写程序,在后续章节讲解。
6.2.3 与其他模块的关系
以I2C、SPI为例,可以使用SCI模块实现这些功能,也可以使用单独的I2C模块、SPI模块实现这些功能。SCI模块和I2C、SPI模块是并列的关系,如下图所示:
当引脚连接到SCI模块时,SCI可以工作于“Simple I2C”、“Simple SPI”模式。如果想使用更完善的I2C、SPI功能,需要配置这些引脚连接到专门的I2C模块、SPI模块。
以P100为例,它的引脚名为“RXD0/SCK1/MISOB_A/QSPCLK/OM_SCLK”,解析如下:
- RXD0:可以连接到SCI0通道,用作RXD0信号,SCI0可被配置为UART、I2C、SPI等模式
- SCK1:可以连接到SCI1通道,用作SCK1信号,SCI1被配置为SPI模式时用到SCK1
- MISOB_A:可以连接到SPIB通道,用作MISO引脚
- QSPCLK:可以连接到QSPI模块(有4条数据线的、类似SPI的协议)
- OM_SCLK:可以连接到OSPI模块(有8条数据线的、类似SPI的协议)
需要注意的是,引脚被连接到I2C模块,或者被连接到SCI模块并工作于“Simple I2C”模式时,这些引脚的功能是相反的。比如I2C1模块使用P511作为SDA引脚,使用P512作为SCL引脚;但是SCI4通道工作于“Simple I2C”模式时刚好反过来,它使用P511作为SCL引脚,使用P512作为SDA引脚。
相关文章:
第6章_瑞萨MCU零基础入门系列教程之串行通信接口(SCI)
本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...
开源免费的流程图软件draw.io
2023年9月16日,周六上午 想买微软的visio,但发现不是很值得,因为我平时也不是经常需要画图。 所以我最后还是决定使用开源免费的draw.io来画图 draw.io网页版的网址: Flowchart Maker & Online Diagram Software draw.io的…...
Python绘图系统19:添加时间轴以实现动态绘图
文章目录 时间轴单帧跳转源代码 Python绘图系统: 📈从0开始的3D绘图系统📉一套3D坐标,多个函数📊散点图、极坐标和子图自定义控件:绘图风格📉风格控件📊定制绘图风格坐标设置进阶&a…...
深度解析shell脚本的命令的原理之rm
rm 是 Unix/Linux 系统中的一个基本命令,用于删除文件或目录。以下是对这个命令的深度分析: 基本操作:rm 命令删除一个或多个文件或目录。这是通过从文件系统中移除链接来完成的。在 Unix/Linux 中,文件是通过链接(可以…...
RPA机器人流程自动化专题培训大纲(供大家参考使用)
一、RPA机器人流程自动化概述 RPA的定义和发展历程RPA的应用场景和优势RPA与人工智能的关系 二、RPA机器人流程自动化基础知识 RPA的基本原理和技术架构RPA的常用技术和工具RPA的编程语言和开发环境 三、RPA机器人流程自动化实战应用 如何进行业务流程分析与优化如何利用R…...
Python用若干列的数据多条件筛选、去除Excel数据并批量绘制直方图
本文介绍基于Python,读取Excel数据,以一列数据的值为标准,对这一列数据处于指定范围的所有行,再用其他几列数据数值,加以筛选与剔除;同时,对筛选与剔除前、后的数据分别绘制若干直方图ÿ…...
驱动开发,IO多路复用实现过程,epoll方式
1.框架图 被称为当前时代最好用的io多路复用方式; 核心操作:一棵树(红黑树)、一张表(内核链表)以及三个接口; 思想:(fd代表文件描述符) epoll要把检测的事件…...
java在mysql中查询内容无法塞入实体类中,报错 all elements are null
目录 一、问题描述二、解决方案 一、问题描述 java项目中整体配置了mysql的驼峰式字段匹配规则。 mybatis.configuration.map-underscore-to-camel-casetrue由于项目需求,需要返回字段为file_id,file_url,并且放入实体类中,实体…...
Linux 挂载
挂载需要挂载源和挂载点 虚拟机本身就有的挂源 添加硬件 重启虚拟机 操作程序 sudo fdisk -l //以管理员权限查看电脑硬盘使用情况sudo mkfs.ext4 /dev/sdb //以管理员身份格式化硬盘sudo mkdir guazai //创建挂载文件夹 sudo mount /dev/sdb/guazai //将挂载源接上挂载点 s…...
[面试] 15道最典型的k8s面试题
文章目录 在 Kubernetes 中,有以下常见的资源对象:1.什么是 Kubernetes?它的主要特点是什么?2. Kubernetes 中的 Pod 是什么?它的作用是什么?3.Kubernetes 中的 Deployment 和 StatefulSet 有何区别&#x…...
lintcode 552 · 创建最大数 【算法 数组 贪心 hard】
题目 https://www.lintcode.com/problem/552/description 描述 给出两个长度分别是m和n的数组来表示两个大整数,数组的每个元素都是数字0-9。从这两个数组当中选出k个数字来创建一个最大数,其中k满足k < m n。选出来的数字在创建的最大数里面的位置…...
ModbusTCP服务端
1在Device下,添加设备net: 公交车。 2在net下添加 ModbusTCP...
Middleware ❀ Hadoop功能与使用详解(HDFS+YARN)
文章目录 1、服务概述1.1 HDFS1.1.1 架构解析1.1.1.1 Block 数据块1.1.1.2 NameNode 名称节点1.1.1.3 Secondary NameNode 第二名称节点1.1.1.4 DataNode 数据节点1.1.1.5 Block Caching 块缓存1.1.1.6 HDFS Federation 联邦1.1.1.7 Rack Awareness 机架感知 1.1.2 读写操作与可…...
Matlab图像处理-从RGB转换为HSV
从RGB转换为HSV HSV彩色系统基于圆柱坐标系。从RGB转换为HSV需要开发将(笛卡儿坐标系中的)RGB值映射到圆柱坐标系的公式。多数计算机图形学教材中已详细推导了这一公式,故此处从略。 从RGB转换为HSV的MATLAB函数是rgb2hsv,其语法为: hsv_imag…...
iOS Error Domain=PHPhotosErrorDomain Code=3300
AVCapturePhoto的数据保存到 PHPhotoLibrary的时候报错Error DomainPHPhotosErrorDomain Code3300解决代码(也可以使用addResourceWithType:data:options:来添加数据到request,JEPG的实测可以,raw的不确定): [PHPhoto…...
LeetCode(力扣)435. 无重叠区间Python
LeetCode435. 无重叠区间 题目链接代码 题目链接 https://leetcode.cn/problems/non-overlapping-intervals/ 代码 class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:if not intervals:return 0intervals.sort(keylambda x: x[0])co…...
opencv c++实现鼠标框选区域并显示选择的图片区域
OpenCV可以使用setMouseCallback设置鼠标事件的回调函数,从而然后根据需要进行处理。 setMouseCallback原型为: void cv::setMouseCallback(const cv::String& windowName, MouseCallback onMouse, void* userData = 0); 其中,参数说明如下:windowName:窗口名称 onMo…...
Python实现自主售卖机
1 问题 在python中我们常常使用到条件判断,if语句时常见的条件判断语句之一。那么如何使用if语句实现根据情况自动选择商品进行售卖呢? 2 方法 根据if语句执行时从上往下执行的特点,使用if语句、dict和list来实现整个流程。 代码清单 1 drink…...
任务复杂度与人机
任务复杂度计算是指根据任务的难易程度和需要的资源投入来评估任务的复杂程度。一般来说,任务复杂度计算会考虑以下几个因素: 难度程度:任务的难度程度是指完成任务所需要的知识、技能和经验等的要求。较高的难度程度会增加任务的复杂度。任务…...
Windows关闭zookeeper、rocketmq日志输出以及修改rocketmq的JVM内存占用大小
JDK-1.8zookeeper-3.4.14rocketmq-3.2.6 zookeeper 进入到zookeeper的conf目录 清空配置文件,只保留下面这一行。zookeeper关闭日志输出相对简单。 log4j.rootLoggerOFFrocketmq 进入到rocketmq的conf目录 logback_broker.xml <?xml version"1.0&q…...
Convai:让虚拟游戏角色更智能的对话AI人工智能平台
【产品介绍】 名称 Convai 具体描述 Convai是一款专为虚拟世界而设计的对话人工智能平台,它可以让你为你的游戏或应用中的角色 赋予人类般的对话能力。Convai利用了最先进的生成式对话人工智能技术,让你的角色可以…...
【送书活动】大模型赛道如何实现华丽的弯道超车
文章目录 导读前言AI/ML 模型训练任务对数据平台的需求01 具备对海量小文件的频繁数据访问的 I/O 效率02 提高 GPU 利用率,降低成本并提高投资回报率03 支持各种存储系统的原生接口04 支持单云、混合云和多云部署 核心密码01 通过数据抽象化统一数据孤岛02 通过分布…...
opencv dnn模块 示例(16) 目标检测 object_detection 之 yolov4
博客【opencv dnn模块 示例(3) 目标检测 object_detection (2) YOLO object detection】 测试了yolov3 及之前系列的模型,有在博客【opencv dnn模块 示例(15) opencv4.2版本dnn支持cuda加速(vs2015异常解决)】 说明了如何使用dnn模块进行cuda…...
Python提取JSON数据中的键值对并保存为.csv文件
本文介绍基于Python,读取JSON文件数据,并将JSON文件中指定的键值对数据转换为.csv格式文件的方法。 在之前的文章Python提取JSON文件中的指定数据并保存在CSV或Excel表格文件内(https://blog.csdn.net/zhebushibiaoshifu/article/details/132…...
使用IDEA开发Servlet
一、新建工程 二、填写新工程的基本信息 javaee8的项目可以运行在tomcat9 三、配置tomcat 1、编辑server信息 “On frame deactivation”的意思是idea窗口发生切换时。 2、编辑部署信息 war exploded方式,这种方式是以文件夹方式部署的,支持热加载。 …...
腾讯mini项目-【指标监控服务重构】2023-07-21
今日已办 当在Docker容器中运行程序时,可能会遇到使用os.Getpid()函数时出现异常的情况。这是因为Docker容器中的进程隔离机制与宿主机器不同,容器内部的进程可能无法访问宿主机器的进程信息。 要解决这个问题,可以尝试: 使用do…...
Spring MVC里的DispatchServlet(结合Spring官网翻译)
Spring MVC里的DispatchServlet 前言1.Spring Web MVC1.1 DispatcherServlet(中央调度器)1.1.1 Context Hierarchy(上下文层次结构)1.1.2 Special Bean Types(特定的bean类型)1.1.3 Web MVC Config1.1.4 Se…...
数据分享|R语言武汉流动人口趋势预测:灰色模型GM(1,1)、ARIMA时间序列、logistic逻辑回归模型...
全文链接:http://tecdat.cn/?p32496 人口流动与迁移,作为人类产生以来就存在的一种社会现象,伴随着人类文明的不断进步从未间断(点击文末“阅读原文”获取完整代码数据)。 相关视频 人力资源是社会文明进步、人民富裕…...
解决 Axios 跨域问题,轻松实现接口调用
跨域是指访问另外一个域的资源,由于浏览器的同源策略,默认情况下使用 XMLHttpRequest 和 Fetch 请求时是不允许跨域的。跨域的根本原因是浏览器的同源策略,这是由浏览器对 JavaScript 施加的安全限制。 Axios 跨域常见报错 跨域请求被阻止 (…...
Layui快速入门之第十节 表单
目录 一:基本用法 二:输入框 普通输入框 输入框点缀 前置和后置 前缀和后缀 动态点缀 密码显隐 内容清除 自定义动态点缀 点缀事件 三:复选框 默认风格 标签风格 开关风格 复选框事件 四:单选框 普通单选框 自…...
当前疫情最新情况/北京seo服务行者
1. 什么是锁消除?什么是锁膨胀 锁消除: 对数据进行逃逸分析。对象实例都是存在于线程共享的堆中的,即便是局部变量的对象,也是存在于堆中,但是局部变量对象的引用是存在于方法栈中的,方法栈是线程私有&am…...
做app网站需要什么条件/市场营销模式有哪些
Zebra项目图解...
wordpress自定义登录页/关键词排名怎么上首页
tar格式,会打包成一个文件,可以对多个目录,或者多个文件进行打包 tar命令只是打包,不会压缩,打包前后大小是一样的 tar命令 -c //打包 -x //解压 -f //指定文件 -t //查看 tar cf 压缩后的文件名 要…...
wamp做的网站上传/西安网站建设优化
生成客户端程序,访问已有的服务器 生成cs文件E:\>WSDL http://localhost/asp/WebService1/Service1.asmx生成dll文件E:\>CSC /out:MyWs.dll /t:library /r:System.Web.Services.dll Service1.cs 根据wsdl生成服务器的接口,供别人调用 wsdl.exe /si…...
泰安做网站公司哪家好/seo顾问服务 乐云践新专家
目录注释变量和常量标识符的命名规范字符串输出键盘输入数据类型整数类型浮点类型字符类型布尔类型Unit类型,Null类型和Nothing类型(重点)Unit类型Null类型Nothing类型类型转换数值类型自动转换强制类型转换注释 scala的注释的使用跟JAVA是一…...
爱客crm系统/湖南网站seo地址
题意: 有n*m的格子 v[i][j]代表该位置的价值 (n,m<5) 两个人轮流选格子 只有相邻格子至少有两个为空的才能选 选择之后该格子变空,得到v[i][j] 求问先手能达到的最大价值 爆搜可过,状态不多。 记忆化搜索用map记录 4000ms过 无剪枝 还可以…...