嵌入式学习——硬件(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/864315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

猫头虎 Gemma和Gemini模型的区别是什么?

猫头虎 &#x1f42f; Gemma和Gemini模型的区别是什么&#xff1f; 摘要&#x1f4d8; 在这篇文章中&#xff0c;我们将深入探讨Gemma和Gemini这两个由Google开发的AI模型。我们会对比它们的参数规模、计算资源需求和集成难度&#xff0c;帮助大家了解这两者之间的主要区别。…

【解锁未来:深入了解机器学习的核心技术与实际应用】

解锁未来&#xff1a;深入了解机器学习的核心技术与实际应用 &#x1f48e;1.引言&#x1f48e;1.1 什么是机器学习&#xff1f; &#x1f48e;2 机器学习的分类&#x1f48e;3 常用的机器学习算法&#x1f48e;3.1 线性回归&#xff08;Linear Regression&#xff09;&#x1…

Redis集群-主从复制、哨兵

●主从复制&#xff1a;主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可用的。 主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。缺陷&#xff1a;故障 恢复无法自动化&#xff1b;写操作无法负载均…

幻兽帕鲁服务器如何安装模组安装

由于模组多数为Window版本的&#xff0c;所以本教程以服务端为Window的作为演示&#xff08;Linux服务端的也是一样的操作&#xff09;百度莱卡云开服 如果你你是Linux版本的&#xff0c;请点击跳转切换服务端教程 接下来是本地安装模组包的方法&#xff08;服务器自带&#xf…

妙笔 WonderPen 专业版会员值得购买吗?

在信息爆炸的时代&#xff0c;写作已经是一项重要技能。无论是学生、职场人士还是自由职业者&#xff0c;都经常需要写点东西。 一个好的工具能让写作成为享受&#xff0c;今天就为大家推荐专业写作工具&#xff1a;妙笔。为长文写作设计&#xff0c;且有云服务功能&#xff0…

自闭症儿童能不能用药

在星贝育园自闭症儿童康复学校&#xff0c;我们一直秉持着谨慎且保守的态度对待自闭症儿童的用药问题。我们坚定地认为&#xff0c;在大多数情况下&#xff0c;药物并非自闭症儿童康复的首选。 自闭症是一种神经发育障碍&#xff0c;其核心症状包括社交沟通障碍、重复刻…

为什么网络爬虫广泛使用HTTP代理?

一、引言 网络爬虫作为自动抓取互联网信息的重要工具&#xff0c;在现代社会中发挥着不可或缺的作用。然而随着网络环境的日益复杂&#xff0c;网站反爬虫技术的不断进步&#xff0c;网络爬虫在获取数据的过程中面临着越来越多的挑战。为了应对这些挑战&#xff0c;HTTP 代理成…

C++专业面试真题(1)学习

进程有多少种状态&#xff0c;如何转换 创建&#xff1a;一个进程启动&#xff0c;首先进入创建状态&#xff0c;需要获取系统资源创建进程管理科PCB完成资源分配。就绪态&#xff1a;在创建完成后&#xff0c;进程已经准备好&#xff0c;处于就绪状态&#xff0c;但是还未获得…

Linux内核——Linux内核体系模式(二)

1 Linux系统的中断机制 Linux内核将中断分为两类&#xff1a;硬件中断和软件中断&#xff08;异常&#xff09;。每个中断是由0-255之间的一个数字进行标识。 中断int0-int31&#xff08;0x00-0x1f&#xff09;作为异常int32-int255由用户自己设定 int32-int47对应与8259A中断…

PCL 基于点云RGB颜色的区域生长算法

RGB颜色的区域生长算法 一、概述1.1 算法定义1.2 算法特点1.3 算法实现二、代码示例三、运行结果🙋 结果预览 一、概述 1.1 算法定义 点云RGB区域生长算法: 是一个基于RGB颜色信息的区域生长算法,用于点云分割。该算法利用了点云中相邻点之间的颜色相似性来将点云分割成…

志愿者管理系统带讲解,保运行

技术栈 后端: SpringBoot Mysql MybatisPlus 前端: Vue Element 分为 管理员端 用户端 功能描述 用户端 管理员端 观看地址&#xff1a; B站 &#xff1a; 【毕设者】志愿者管理系统(安装讲解源码)

进程,线程,虚拟内存,交换技术

参考资料&#xff1a; 参考视频1https://www.bilibili.com/video/BV1Hs421M78w/?spm_id_from333.999.0.0&vd_source97411b9a8288d7869f5363f72b0d7613 参考视频2https://www.bilibili.com/video/BV1jE411W7e8/?spm_id_from333.337.search-card.all.click&vd_source…

Redis基础教程(六):redis 哈希(Hash)

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

3D开发工具HOOPS助力3D制造业仿真应用实现工厂环境规划和模拟!

HOOPS SDK是全球领先的3D领域开发工具提供商Tech Soft 3D 打造的控件产品&#xff0c;HOOPS SDK包括4款3D软件开发工具&#xff0c;其中HOOPS Exchange是一款CAD数据转换工具&#xff0c;可读取和导入30多种CAD文件格式&#xff1b;HOOPS Communicator是一款专注于Web端工程图形…

昇思25天学习打卡营第13天|基于MobileNetV2的垃圾分类

MobileNetv2模型原理介绍 相比于传统的卷积神经网络&#xff0c;MobileNet网络使用深度可分离卷积&#xff08;Depthwise Separable Convolution&#xff09;的思想在准确率小幅度降低的前提下&#xff0c;大大减小了模型参数与运算量。并引入宽度系数α和分辨率系数β使模型满…

根据后端返回的省市区重新封装树结构(省市区通过children表示)

对比图&#xff08;截取部分&#xff09;&#xff1a; 注&#xff1a;先看分步&#xff0c;最后会附上完整代码&#xff08;如果有用&#xff0c;可以给小编点个赞吗&#xff1f;十分感谢&#xff09; 1.首先将前端返回相同的省份只展示一次 const obj {}; let keyList []r…

SpringBoot创建一个初始化项目

提示&#xff1a;这一篇文章&#xff0c;主要是为了之后可以快速的去搭建项目&#xff0c;当然这篇博客&#xff0c;作者也会根据以后学习到的东西&#xff0c;慢慢去整理 文章目录 前言 搭建一个SpringBoot项目&#xff0c;目的是为了快速开发项目 项目列表 响应枚举类 /***…

面向优秀SCI论文写作的语言大模型提示词设计

模板1&#xff1a;Abstract 润色 I want you to act as an SCI reviewer and evaluate the abstract of a research paper. You may check if the abstract is well-written and serves as an informative and descriptive overview of the research. You may also check if it…

Docker 部署 Nacos v2.3.2 版本

文章目录 Github官网文档Nacos 生态图Nacos Dockerdocker-compose.ymlapplication.propertiesNacos 官方示例 Github https://github.com/alibaba/nacos 官网 https://nacos.io/ 文档 https://nacos.io/docs/latest/what-is-nacos/ Nacos 生态图 Nacos Docker 镜像&…

ARM功耗管理软件之DVFSAVS

安全之安全(security)博客目录导读 思考&#xff1a;功耗管理软件栈及示例&#xff1f;WFI&WFE&#xff1f;时钟&电源树&#xff1f;DVFS&AVS&#xff1f; 目录 一、ARM功耗管理软件之DVFS 二、ARM功耗管理软件之AVS 一、ARM功耗管理软件之DVFS 有一个实现特定…