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

嵌入式学习——硬件(IIC、ADC)——day56

1. IIC

1.1 定义(同步串行半双工通信总线)

        IIC(Inter-Integrated Circuit)又称I2C,是是IICBus简称,所以中文应该叫集成电路总线。是飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展而来的一种同步串行半双工通信总线方式。该总线允许同时连接多个设备(芯片)。每块芯片在总线上拥有特定的地址。自2006年10月1日起,使用I²C协议已经不需要支付专利费,但制造商仍然需要付费以获取IIC从属设备地址。

1.2 作用

  1. 设备间通信:I²C用于微控制器和各种外围设备(如传感器、EEPROM、ADC/DAC、LCD显示器等)之间的数据传输。
  2. 多主多从结构:I²C支持多主多从架构,允许多个主设备和多个从设备在同一总线上通信。
  3. 地址分配:每个从设备在总线上都有一个唯一的地址,主设备通过该地址来选择并与特定从设备通信。
  4. 时钟同步:I²C使用单主时钟同步,主设备生成时钟信号,从设备响应时钟信号进行数据传输。
  5. 双向数据传输:I²C支持双向数据传输,主设备可以向从设备发送数据,也可以从从设备读取数据。

1.3 IIC的组网模式

       上图所示是IIC的总线的使用场景,所有挂载在IIC总线上的设备都有两根信号线,一根是数据线SDA,另一根是时钟线SCL。这两个信号线都是双向的。

       作为一种通信方式,IIC总线在某一时刻,总线只允许有一个设备处于发送状态,所发出的数据被总线上所有的设备所接收。IIC通信协议包含有设备地址,只有发送方携带的地址与某个接收方的地址相同时,接收方才真正执行相关的指令。

       IIC总线规定,设备在空闲时,两根总线都处于高电平状态。为保证这种状态,数据线SDA和时钟线SCL都要外接上拉电阻。上拉电阻的阻值一般位4.7~10K。。I2C 总线标准模式下速度可以达到 100Kb/S,快速模式下可以达到 400Kb/S。I2C 总线工作是按照一定的协议来运行的,接下来就看一下 I2C 协议。

1.4 IIC代码

#include <s3c2440.h>
#include <string.h>
#include <stdio.h>
#include "led.h"
#include "key.h"
#include "interrupt.h"
#include "delay.h"
#include "pwm.h"#define ADDRESS 0X08void init_wdt(void)	//初始化看门狗,禁止启动,关闭看门狗
{WTCON &= ~(1 << 0);
}void init_clk(void)
{unsigned int t = MPLLCON; //将PCLK频率存入变量设置好再进行修改,防止频率修改中途器件因为频率过高而短路t &= ~((0xff << 12) | (0x3f << 4) | (3 << 0)); //利用锁相环将12MHz倍频t |= ((127 << 12) | (2 << 4) | (1 << 0)); //配置fclk频率大约为400MhzCLKDIVN |= ((2 << 1) | (1 << 0));//分频,配置HCLK为100MHz,HCLK为50MHz	MPLLCON = t;//将所有频率配置好再进行设置,防止器件被烧坏
}unsigned char buffer[128] = {0};//存储pc给s3c2440发送,s3c2440接收到的字符串
unsigned char tmpbuffer[128];
unsigned int pos;//已经收到字符的个数,下一个要收到字符的位置void uart0_handler(void)
{if (SUBSRCPND & (1 << 0))//如果UART0接收到了数据{buffer[pos++] = URXH0;			}SUBSRCPND = SUBSRCPND;	
}void init_uart0(void)
{unsigned int t = 0;GPHCON &= ~(0x0f << 4);GPHCON |= ((2 << 6) | (2 << 4));//设置中断模式,串口电路引脚寄存器功能t = ULCON0;		//9600 n 8 1 波特率? 校验位? 数据位? 停止位t &= ~(1 << 6);//不使用红外模式t &= ~(7 << 3);//无奇偶校验t &= ~(1 << 2);//每帧 1 个停止位t |= (3 << 0);//每帧用于发送或接收的数据位的个数8位ULCON0 = t;t = UCON0;	 //s3c2440给电脑发送数据用轮询   电脑给s3c2440发送数据,s3c2440接收数据触发中断t &= ~(3 << 10);//选PCLK给 UART 波特率t &= ~(3 << 8);//发送接收方式改为脉冲方式t &= ~(0x0f << 4);// 都设置为普通模式t &= ~(0x0f << 0);t |= (0x05 << 0);//设置UART模式发送轮询  接收模式为中断UCON0 = t;INTSUBMSK &= ~(1 << 0);//uart子中断改为可服务状态enable_irq(IRQ_UART0);//配置中断为IRQ模式,让中断处于可服务模式	  //配置接收的中断register_irq(IRQ_UART0 ,uart0_handler);UBRDIV0 = 325;//波特率分频寄存器 50000000/9600/16-1约等于325pos = 0;		 	 
}void uart0_send_char(unsigned char ch)
{UTXH0 = ch;	// UART0 要发送的数据   UART 发送缓冲 寄存器while(0 == (UTRSTAT0 & (1 << 2)));//数据发完的标志   UART TX/RX 状态 寄存器	
}void send_buffer(const char *p, unsigned int len)
{unsigned int i;for(i = 0;i < len;++i){uart0_send_char(*p++);}
}int parse(const char *p, unsigned int len)//分析上位机pc端发送的信息
{int i = 0;int n = 0;unsigned char tmpnum = 0;if (p[0] != 0xaa || p[len-1] != 0x0D)//判断起始校验位{n = 0;}if (p[1] != ADDRESS) //判断是否为正确的下位机{n = 0;}for (i = 0; i < 8; i++){tmpnum += p[i];}if (p[8] != tmpnum)	 //判断校验位是否正确{n = 0;}if (0x01 == p[2])//调频{n = 1;}else if (0x02 == p[2]) //点灯{n = 2;}return n;	
}int i2c_finished = 0; //中断触发条件void i2c_handler(void)//一条指令发送结束当ACK回复结束触发中断
{i2c_finished = 1;	
} void init_i2c(void)//初始化IIC
{GPECON &= ~((unsigned int)0x0f << 28);GPECON |= ((unsigned int)0x0a << 28);//初始化24C02的I2CSDA、I2CSCLIICCON |= (1 << 7);//允许IIC 总线应答使能位  回复ACKIICCON |= (1 << 6);//50000000/512约等于96000 小于100k IIC 总线发送时钟预分频器的时钟源选择位IICCON |= (1 << 5);//IIC 总线 Tx/Rx 中断使能/禁止位	允许enable_irq(IRQ_I2C);//使能中断register_irq(IRQ_I2C, i2c_handler);//注册中断//	GPECON &= ~((unsigned int)0x0F << 28);
//	GPECON |= ((unsigned int)2 << 30) | (2 << 28);
//
//	IICCON |= (1 << 7) | (1 << 6) | (1 << 5);
//	IICCON &= ~(0x0F << 0);
//
//    enable_irq(IRQ_I2C);
//	register_iqr(IRQ_I2C, i2c_handler);
}void do_and_wait_ack(void)
{i2c_finished = 0;IICCON &= ~(1 << 4); //发送使能,清除挂起位while (0 == i2c_finished)//判断是否发送完成{udelay(100);//不能立马读取,要等一下	}	
}void at24c02_write(unsigned char device_address, unsigned char reg_address, const unsigned char *data, unsigned char n)//主机写——设备地址、寄存器地址、要写入数据的指针、数据字节数 
{unsigned int i = 0;IICDS = device_address;//写设备地址IICSTAT = 0xF0;	//模式选择 主发送模式、产生起始信号、使能 Rx/Txdo_and_wait_ack();//使能数据发送并等待发送结束返回ack触发中断IICDS = reg_address;//写设备中寄存器地址do_and_wait_ack();//使能数据发送并等待发送结束返回ack触发中断for (i = 0; i < n; ++i)//页写,循环发送所有数据{IICDS = *data++;do_and_wait_ack();	}IICSTAT = 0xD0;//模式选择 主发送信号、产生停止信号、使能 Rx/TxIICCON &= ~(1 << 4); //发送使能,清除挂起位udelay(100);//		
}void at24c02_read(unsigned char device_address, unsigned char reg_address, unsigned char *data, unsigned char n)//主机读(从机发数据给主机)——设备地址、寄存器地址、要读出数据的指针、数据字节数
{unsigned int i = 0;IICDS = device_address;//写设备地址IICSTAT = 0xF0;	//模式选择 主发送模式、产生起始信号、使能 Rx/Txdo_and_wait_ack();//使能数据发送并等待发送结束返回ack触发中断IICDS = reg_address;//写设备中寄存器地址do_and_wait_ack();//使能数据发送并等待发送结束返回ack触发中断IICDS = device_address;//写设备地址IICSTAT = 0xB0;	//模式选择 主接收模式、产生起始信号、使能 Rx/Txdo_and_wait_ack();//使能数据发送并等待发送结束返回ack触发中断*data = IICDS;	//第一次没用do_and_wait_ack();	for (i = 0; i < n; ++i){if ((n - 1) == i){IICCON &= ~(1 << 7);//回复NACK			}*data++ = IICDS;do_and_wait_ack();		}IICSTAT = 0x90;IICCON |= (1 << 7);IICCON &= ~(1 << 4);udelay(100);	
}int main(void)
{char s[100] = {0};init_wdt();init_led();init_key();init_clk();init_delay();init_uart0();init_i2c();at24c02_write(0xA0, 0x00, "ABCDEF", 6);at24c02_read(0xA0, 0x00, (unsigned char *)s, 6);while(1){if(pos != 0){mdelay(100);at24c02_write(0xA0, 0x00, buffer, pos);at24c02_read(0xA0, 0x00, (unsigned char *)s, pos);send_buffer(s, pos);pos = 0;}		}}

2. ADC滤波(中值滤波、高斯滤波、高斯加权均值滤波、最小二乘法)

#include <s3c2440.h>
#include <string.h>
#include <stdio.h>
#include "led.h"
#include "key.h"
#include "interrupt.h"
#include "delay.h"
#include "pwm.h"#define ADDRESS 0X08void init_wdt(void)	//初始化看门狗,禁止启动,关闭看门狗
{WTCON &= ~(1 << 0);
}void init_clk(void)
{unsigned int t = MPLLCON; //将PCLK频率存入变量设置好再进行修改,防止频率修改中途器件因为频率过高而短路t &= ~((0xff << 12) | (0x3f << 4) | (3 << 0)); //利用锁相环将12MHz倍频t |= ((127 << 12) | (2 << 4) | (1 << 0)); //配置fclk频率大约为400MhzCLKDIVN |= ((2 << 1) | (1 << 0));//分频,配置HCLK为100MHz,HCLK为50MHz	MPLLCON = t;//将所有频率配置好再进行设置,防止器件被烧坏
}unsigned char buffer[128] = {0};//存储pc给s3c2440发送,s3c2440接收到的字符串
unsigned char tmpbuffer[128];
unsigned int pos;//已经收到字符的个数,下一个要收到字符的位置void uart0_handler(void)
{if (SUBSRCPND & (1 << 0))//如果UART0接收到了数据{buffer[pos++] = URXH0;			}SUBSRCPND = SUBSRCPND;	
}void init_uart0(void)
{unsigned int t = 0;GPHCON &= ~(0x0f << 4);GPHCON |= ((2 << 6) | (2 << 4));//设置中断模式,串口电路引脚寄存器功能t = ULCON0;		//9600 n 8 1 波特率? 校验位? 数据位? 停止位t &= ~(1 << 6);//不使用红外模式t &= ~(7 << 3);//无奇偶校验t &= ~(1 << 2);//每帧 1 个停止位t |= (3 << 0);//每帧用于发送或接收的数据位的个数8位ULCON0 = t;t = UCON0;	 //s3c2440给电脑发送数据用轮询   电脑给s3c2440发送数据,s3c2440接收数据触发中断t &= ~(3 << 10);//选PCLK给 UART 波特率t &= ~(3 << 8);//发送接收方式改为脉冲方式t &= ~(0x0f << 4);// 都设置为普通模式t &= ~(0x0f << 0);t |= (0x05 << 0);//设置UART模式发送轮询  接收模式为中断UCON0 = t;INTSUBMSK &= ~(1 << 0);//uart子中断改为可服务状态enable_irq(IRQ_UART0);//配置中断为IRQ模式,让中断处于可服务模式	  //配置接收的中断register_irq(IRQ_UART0 ,uart0_handler);UBRDIV0 = 325;//波特率分频寄存器 50000000/9600/16-1约等于325pos = 0;		 	 
}void uart0_send_char(unsigned char ch)
{UTXH0 = ch;	// UART0 要发送的数据   UART 发送缓冲 寄存器while(0 == (UTRSTAT0 & (1 << 2)));//数据发完的标志   UART TX/RX 状态 寄存器	
}void send_buffer(const char *p, unsigned int len)
{unsigned int i;for(i = 0;i < len;++i){uart0_send_char(*p++);}
}int parse(const char *p, unsigned int len)//分析上位机pc端发送的信息
{int i = 0;int n = 0;unsigned char tmpnum = 0;if (p[0] != 0xaa || p[len-1] != 0x0D)//判断起始校验位{n = 0;}if (p[1] != ADDRESS) //判断是否为正确的下位机{n = 0;}for (i = 0; i < 8; i++){tmpnum += p[i];}if (p[8] != tmpnum)	 //判断校验位是否正确{n = 0;}if (0x01 == p[2])//调频{n = 1;}else if (0x02 == p[2]) //点灯{n = 2;}return n;	
}int i2c_finished = 0; //中断触发条件void i2c_handler(void)//一条指令发送结束当ACK回复结束触发中断
{i2c_finished = 1;	
} void init_i2c(void)//初始化IIC
{GPECON &= ~((unsigned int)0x0f << 28);GPECON |= ((unsigned int)0x0a << 28);//初始化24C02的I2CSDA、I2CSCLIICCON |= (1 << 7);//允许IIC 总线应答使能位  回复ACKIICCON |= (1 << 6);//50000000/512约等于96000 小于100k IIC 总线发送时钟预分频器的时钟源选择位IICCON |= (1 << 5);//IIC 总线 Tx/Rx 中断使能/禁止位	允许enable_irq(IRQ_I2C);//使能中断register_irq(IRQ_I2C, i2c_handler);//注册中断//	GPECON &= ~((unsigned int)0x0F << 28);
//	GPECON |= ((unsigned int)2 << 30) | (2 << 28);
//
//	IICCON |= (1 << 7) | (1 << 6) | (1 << 5);
//	IICCON &= ~(0x0F << 0);
//
//    enable_irq(IRQ_I2C);
//	register_iqr(IRQ_I2C, i2c_handler);
}void do_and_wait_ack(void)
{i2c_finished = 0;IICCON &= ~(1 << 4); //发送使能,清除挂起位while (0 == i2c_finished)//判断是否发送完成{udelay(100);//不能立马读取,要等一下	}	
}void at24c02_write(unsigned char device_address, unsigned char reg_address, const unsigned char *data, unsigned char n)//主机写——设备地址、寄存器地址、要写入数据的指针、数据字节数 
{unsigned int i = 0;IICDS = device_address;//写设备地址IICSTAT = 0xF0;	//模式选择 主发送模式、产生起始信号、使能 Rx/Txdo_and_wait_ack();//使能数据发送并等待发送结束返回ack触发中断IICDS = reg_address;//写设备中寄存器地址do_and_wait_ack();//使能数据发送并等待发送结束返回ack触发中断for (i = 0; i < n; ++i)//页写,循环发送所有数据{IICDS = *data++;do_and_wait_ack();	}IICSTAT = 0xD0;//模式选择 主发送信号、产生停止信号、使能 Rx/TxIICCON &= ~(1 << 4); //发送使能,清除挂起位udelay(100);//		
}void at24c02_read(unsigned char device_address, unsigned char reg_address, unsigned char *data, unsigned char n)//主机读(从机发数据给主机)——设备地址、寄存器地址、要读出数据的指针、数据字节数
{unsigned int i = 0;IICDS = device_address;//写设备地址IICSTAT = 0xF0;	//模式选择 主发送模式、产生起始信号、使能 Rx/Txdo_and_wait_ack();//使能数据发送并等待发送结束返回ack触发中断IICDS = reg_address;//写设备中寄存器地址do_and_wait_ack();//使能数据发送并等待发送结束返回ack触发中断IICDS = device_address;//写设备地址IICSTAT = 0xB0;	//模式选择 主接收模式、产生起始信号、使能 Rx/Txdo_and_wait_ack();//使能数据发送并等待发送结束返回ack触发中断*data = IICDS;	//第一次没用do_and_wait_ack();	for (i = 0; i < n; ++i){if ((n - 1) == i){IICCON &= ~(1 << 7);//回复NACK			}*data++ = IICDS;do_and_wait_ack();		}IICSTAT = 0x90;IICCON |= (1 << 7);IICCON &= ~(1 << 4);udelay(100);	
}void init_adc(void)	//初始化ADC
{unsigned int t;t = ADCCON;t |= (1 << 14);	//使能预分频t &= ~(0xff << 6);t |= (49 << 6);//给预分频值t &= ~(0x07 << 3);// 模拟输入通道选择AIN0(引脚)t &= ~(1 << 2);// 正常工作模式t |= (1 << 1);//使能ADC转换ADCCON = t;
}void do_adc(void)
{int i = 0;unsigned int ret = 0;//存每次转换好的ADC的值unsigned int adc_buffer[10];//存十次adc采样的值unsigned long long sum = 0;//存十次采样的总和char s[10] = {0};ret = ADCDAT0;//取出转化的值for (i = 0; i < 10; ++i){while (0 == (ADCCON & (1 << 15)))//转换结束标志位、判断ADC是否处理结束ret = ADCDAT0 & 0x3ff;//取出转化的值(只要低十位) adc_buffer[i] = ret;}for (i = 0; i < 10; ++i){sum += adc_buffer[i];}sprintf(s, "%llu\n", sum / 10);//求平均值send_buffer((const char *)s, strlen(s));
}int main(void)
{
//	char s[100] = {0};init_wdt();init_led();init_key();init_clk();init_delay();init_uart0();init_i2c();init_adc();do_adc();
//	at24c02_write(0xA0, 0x00, "ABCDEF", 6);
//	at24c02_read(0xA0, 0x00, (unsigned char *)s, 6);while(1){do_adc();
//		if(pos != 0)
//		{
//			mdelay(100);
//			at24c02_write(0xA0, 0x00, buffer, pos);
//			at24c02_read(0xA0, 0x00, (unsigned char *)s, pos);
//			send_buffer(s, pos);
//			pos = 0;
//		}		}
}

1. eeprom电容可擦除、可编程的rom

2. IIC总线上两根线都给高电平,如何保证两根总线上为高电平,给两根总线上都加上拉电阻

10k或4.7k

3.IIC数据高位先行

SCK时钟信号主机提供、数据信号SDA

主机在时钟高电平拉低数据线为起始,主机在时钟高电平拉高终止

红主机、绿从机

主机写,从机给主机应答ACK、

主机读,主机给从机非应答NACK

时钟高电平数据要保持稳定

4. 面试问题

简述IIC时序

5. 

末尾0往硬盘写数据,1从硬盘读数据

6. 每完成一步, 产生一次中断

7. 应答ack不应答nack

发ACK时刻,产生中断

7. 第一次读取的数据是无效的

8. 

ADC只能转电压

八位0~255

十位0~1023

十二位0~4095

n位ADC为比较器的个数

ADC工作原理:逐次逼近法(类似于二分查找)

ksps

相关文章:

嵌入式学习——硬件(IIC、ADC)——day56

1. IIC 1.1 定义&#xff08;同步串行半双工通信总线&#xff09; IIC&#xff08;Inter-Integrated Circuit&#xff09;又称I2C&#xff0c;是是IICBus简称&#xff0c;所以中文应该叫集成电路总线。是飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备…...

vCenter VXR01405C ALARM Certificate is about to expire

vCenter VXR01405C ALARM Certificate is about to expire 需要更新证书 步骤如下 ===vCenter=== root@vc [ ~ ]# for i in $(/usr/lib/vmware-vmafd/bin/vecs-cli store list); do echo STORE $i; sudo /usr/lib/vmware-vmafd/b STORE MACHINE_SSL_CERT Alias : __MACHINE…...

安装和微调大模型(基于LLaMA-Factory)

打开终端&#xff08;在Unix或macOS上&#xff09;或命令提示符/Anaconda Prompt&#xff08;在Windows上&#xff09;。 创建一个名为lora的虚拟环境并指定Python版本为3.9。 https://github.com/echonoshy/cgft-llm/blob/master/llama-factory/README.mdGitHub - hiyouga/…...

使用docker搭建squid和ss5

docker run -d --name squid-container -e TZAsia/Shanghai -p 自定义端口并记得开放:3128 ubuntu/squid docker exec -it squid-container /bin/bash apt update && apt install vim # 修改 http_port 3128 为 http_port 0.0.0.0:3128 # 修改 http_access deny all 为…...

大数据面试题之Flink(1)

目录 Flink架构 Flink的窗口了解哪些&#xff0c;都有什么区别&#xff0c;有哪几种?如何定义? Flink窗口函数&#xff0c;时间语义相关的问题 介绍下Flink的watermark(水位线)&#xff0c;watermark需要实现哪个实现类&#xff0c;在何处定义?有什么作用? Flink的…...

策略模式、工厂模式和模板模式的应用

1、策略模式、工厂模式解决if else Cal package com.example.dyc.cal;import org.springframework.beans.factory.InitializingBean;public interface Cal extends InitializingBean {public Integer cal(Integer a, Integer b); }Cal工厂 package com.example.dyc.cal;impo…...

在postman中调试supabase的API接口

文章目录 在supabase中获取API地址和key知道它的restfull风格在postman中进行的设置1、get请求调试2、post新增用户调试3、使用patch更新数据&#xff0c;不用put&#xff01;4、delete删除数据 总结 在supabase中获取API地址和key 首先登录dashboard后台&#xff0c;首页- 右…...

微信小程序毕业设计-英语互助系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…...

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第49课-机器人自动跳舞

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第49课-机器人自动跳舞 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎…...

【LLM教程-llama】如何Fine Tuning大语言模型?

今天给大家带来了一篇超级详细的教程,手把手教你如何对大语言模型进行微调(Fine Tuning)&#xff01;&#xff08;代码和详细解释放在后文&#xff09; 目录 大语言模型进行微调(Fine Tuning)需要哪些步骤&#xff1f; 大语言模型进行微调(Fine Tuning)训练过程及代码 大语言…...

PHP 比 Java 的开发效率高在哪?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「JAVA的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;做了几年PHP&#xff0c;最近…...

高德定位获取详细位置失败的处理方法

在使用高德地图定位功能获取位置信息有时候会获取详细位置失败,但是经纬度是有的,这种情况下怎么处理呢,可以使用逆地理编码通过返回的经纬度来再次获取位置信息,如果再次失败那么获取详细位置信息就失败了。 具体工具类如下: package com.demo.map.utils;import androi…...

PX2平台Pytorch源码编译

写在前面&#xff1a;以下内容完成于2019年底&#xff0c;只是把笔记放到了CSDN上。 需要注释掉NCLL及分布式相关的配置 libcudart.patch diff --git a/torch/cuda/__init__.py b/torch/cuda/__init__.py index 4591702..07e1268 100644 --- a/torch/cuda/__init__.pyb/torc…...

昇思25天学习打卡营第6天|简单的深度学习模型实战 - 函数式自动微分

自动微分(Automatic Differentiation)是什么&#xff1f;微分是函数在某一处的导数值&#xff0c;自动微分就是使用计算机程序自动求解函数在某一处的导数值。自动微分可用于计算神经网络反向传播的梯度大小&#xff0c;是机器学习训练中不可或缺的一步。 这些公式难免让人头大…...

基于Linux的云端垃圾分类助手

项目简介 本项目旨在开发一个基于嵌入式系统的智能垃圾分类装置。该装置能够通过串口通信、语音播报、网络通信等多种方式&#xff0c;实现垃圾的自动识别和分类投放。系统采用多线程设计&#xff0c;确保各功能模块高效并行工作。 项目功能 垃圾分类识别 系统使用摄像头拍摄…...

【PYG】Planetoid中边存储的格式,为什么打印前十条边用edge_index[:, :10]

edge_index 是 PyTorch Geometric 中常用的表示图边的张量。它通常是一个形状为 [2, num_edges] 的二维张量&#xff0c;其中 num_edges 表示图中边的数量。每一列表示一条边&#xff0c;包含两个节点的索引。 实际上这是COO存储格式&#xff0c;官方文档里也有写&#xff0c;…...

【知识图谱系列】(实例)python操作neo4j构建企业间的业务往来的知识图谱

本章节通过聚焦于"金额"这一核心属性&#xff0c;构建了一幅知识图谱&#xff0c;旨在揭示"销售方"与"购买方"间的商业互动网。在这张图谱中&#xff0c;绿色节点象征着购买方&#xff0c;而红色节点则代表了销售方。这两类节点间的紧密连线&…...

解决MySQL删除/var/lib/mysql下的所有文件后无法启动的问题

解决MySQL删除/var/lib/mysql下的所有文件后无法启动的问题 确保清空/var/lib/mysql初始化启动mysql参考 确保清空/var/lib/mysql rm-rf /var/lib/mysql/* 初始化 mysql_install_db --usermysql --basedir/usr --datadir/var/lib/mysql 其中的mysql用户不要改成root。否则会…...

探索WebKit的Flexbox奇境:CSS Flexbox支持全解析

探索WebKit的Flexbox奇境&#xff1a;CSS Flexbox支持全解析 在现代网页设计中&#xff0c;响应式布局的需求日益增长&#xff0c;CSS Flexbox作为布局模式的一个突破性进展&#xff0c;提供了一种更加高效和灵活的方式来设计复杂的用户界面。WebKit&#xff0c;作为众多流行浏…...

Unity--协程--Coroutine

Unity–协程–Coroutine 1. 协程的基本概念 基本概念:不是线程,将代码按照划分的时间来执行,这个时间可以是具体的多少秒,也可以是物理帧的时间,也可以是一帧的绘制结束的时间。 协程的写法&#xff1a;通过返回IEnumerator的函数实现&#xff0c;使用yield return语句暂停执…...

Java 类型参数 T、R 、 O 、K、V 、E 、? 区别

在 Java 泛型和函数式编程中&#xff0c;T、R 和 O 都是类型参数&#xff08;Type Parameters&#xff09;&#xff0c;它们的主要区别在于命名约定和上下文含义&#xff0c;而不是语言层面的区别。它们可以互换使用&#xff0c;但通常遵循一定的命名习惯以提高代码可读性。 1.…...

《前端面试题:CSS3新特性》

CSS3新特性指南&#xff1a;从基础到实战详解 CSS3作为现代Web开发的核心样式标准&#xff0c;彻底改变了前端开发者的工作方式。它不仅解决了传统CSS的诸多痛点&#xff0c;还引入了强大的布局模型、动画系统和响应式设计能力。本文将全面解析CSS3的十大核心新特性&#xff0…...

开始在本地部署自己的 Gitea 服务器

0.简介 在软件开发和团队协作中&#xff0c;代码管理是至关重要的环节。笔者一直使用gitblit管理自己的仓库。然鹅&#xff0c;这个软件已经很久没有更新了。经过多方考察&#xff0c;发现Gitea 是一款轻量级的开源代码托管平台&#xff0c;具有易于部署、资源占用少、功能丰富…...

【React】useId

在 React 中&#xff0c;useId 是 React 18 引入的一个 Hook&#xff0c;用于生成一个在组件生命周期中保持稳定的唯一 ID。它主要用于&#xff1a; 无障碍&#xff08;accessibility&#xff09;场景&#xff0c;比如表单控件需要一个 id 和 label 的 htmlFor 属性配对。服务…...

OpenBayes 一周速览|TransPixeler 实现透明化文本到视频生成;统一图像定制框架 DreamO 上线,一键处理多种图像生成任务

公共资源速递 2 个公共数据集&#xff1a; * s1K-1.1 数学推理数据集 * HPA 人类蛋白质图谱数据集 3 个公共模型&#xff1a; * MedGemma-4B-IT * Devstral-Small-2505 * DeepSeek-Prover-V2-7B 12 个公共教程&#xff1a; 视频生成 * 2 语音交互 * 3 代码生成 * 3 …...

C#报错 iText.Kernel.Exceptions.PdfException: ‘Unknown PdfException

【问题】 直接new一个PdfWriter的对象直接会报错&#xff1a; iText.Kernel.Exceptions.PdfException: Unknown PdfException. NotSupportedException: Either com.itextpdf:bouncy-castle-adapter or com.itextpdf:bouncy-castle-fips-adapter dependency must be added in…...

PLSQLDeveloper配置OracleInstantClient连接Oracle数据库

PL/SQLDeveloper配置Oracle Instant Client连接Oracle数据库 文章目录 PL/SQLDeveloper配置Oracle Instant Client连接Oracle数据库 1. Oracle Instant Client下载与配置1. Oracle Instant Client下载2. Oracle Instant Client解压配置1. 解压2. 配置 2. PL/SQL Developer下载、…...

免费无限使用GPT Plus、Claude Pro、Grok Super、Deepseek满血版

渗透智能-ShirtAI&#xff0c;可以免费无限使用GPT Plus、Claude Pro、Grok Super、Deepseek满血版、除此之外还能免费使用AI搜索、Gemini AI、AI照片修复、AI橡皮擦、AI去背景、AI智能抠图、AI证件照、OCR识别、在线思维导图、在线绘图工具、PDF工具箱、PDF翻译。 传送入口&a…...

Vue.js 组件:深入理解与实践

Vue.js 组件:深入理解与实践 引言 随着前端技术的不断发展,Vue.js 作为一种流行的前端框架,因其简洁、易学、高效的特点受到越来越多开发者的青睐。在Vue.js中,组件是构建用户界面的基石。本文将深入探讨Vue.js组件的概念、特性、创建方式以及在实际开发中的应用,帮助读…...

【Go语言基础【3】】变量、常量、值类型与引用类型

文章目录 一、值&#xff08;Value&#xff09;与字面量&#xff08;Literal&#xff09;1. 值2. 字面量 二、变量&#xff08;Variable&#xff09;1. 声明方式2. 赋值方式3. 变量默认值4. 类型与值的匹配 三、常量&#xff08;Constant&#xff09;1. 声明方式2. 常量的特性3…...