坑多多之AC8257 i2c1 rtc-pcf8563
pcf85163
ordering information
Ordering information | Package | Description | Version | Marking code |
PCF85163T/1 | SO8 | ① | SOT96-1 | PF85163 |
PCF85163TS/1 | TSSOP8 | ② | SOT505-1 | 85163 |
①plastic small outline package; 8 leads;body width 3.9 mm
②plastic thin shrink small outline package;8 leads; body width 3 mm
register
HYM8563 vs PCF85163
reg | HYM8563 | PCF85163 |
0x00 | CTL1 | |
0x01 | CTL2 | |
0x02 | SEC | |
0x03 | MIN | |
0x04 | HOUR | |
0x05 | DAY | |
0x06 | WEEKDAY | |
0x07 | MONTH | |
0x08 | YEAR | |
0x09 | ALM_MIN | |
0x0a | ALM_HOUR | |
0x0b | ALM_DAY | |
0x0c | ALM_WEEK | |
0x0d | CLKOUT | |
0x0e | TMR_CTL | |
0x0f | TMR_CNT |
detail
Bit positions labeled as x are not relevant. Bit positions labeled with N should always be written with logic 0; if read, they couldbe either logic 0 or logic 1.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
TEST | N | STOP | N | TESTC | N | N | N |
N | N | N | TI_TP | AF | TF | AIE | TIE |
VL | |||||||
x | |||||||
x | x | ||||||
x | x | ||||||
x | x | x | x | x | |||
CENTURY | x | x | |||||
AE_M | |||||||
AE_H | x | ||||||
AE_D | x | ||||||
AE_W | x | x | x | x | |||
FE | x | x | x | x | x | ||
TE | x | x | x | x | x | ||
clkout_ops
clkout_ops | function | ||
pcf8563_clkout_prepare | pcf8563_clkout_control | R | W |
pcf8563_clkout_unprepare | pcf8563_clkout_control | R | W |
pcf8563_clkout_is_prepared | R | ||
pcf8563_clkout_recalc_rate | R | ||
pcf8563_clkout_round_rate | |||
pcf8563_clkout_set_rate | R | W |
问题
佰维BWMECX32H2A-08Gb停产,内存颗粒换成BWMZFX32H2A-8G-X,linux内核启动时间与之前的内存颗粒比提前100ms左右,rtc芯片驱动访问i2c1与MTK sensor hub协处理器访问i2c1冲突导致i2c读写失败,最终probe失败,rtc设备不存在,厂测失败,厂线停产。rtc驱动初始化时增加100毫秒延时可以避开冲突。
日志
异常
<3>[ 0.523511] (2)[1:swapper/0]rtc-pcf8563 1-0051: pcf8563_read_block_data: read error
<3>[ 0.523516] (2)[1:swapper/0]rtc-pcf8563 1-0051: pcf8563_probe: read error996 : preloader813 : lk<3>[ 0.520859] (3)[1:swapper/0]rtc-pcf8563 1-0051: pcf8563_write_block_data: err=-121 addr=0e, data=03
<3>[ 0.520867] (3)[1:swapper/0]rtc-pcf8563 1-0051: pcf8563_probe: write error
<4>[ 0.520892] (3)[1:swapper/0]rtc-pcf8563: probe of 1-0051 failed with error -5<3>[ 0.524627] (3)[1:swapper/0]rtc-pcf8563 1-0051: low voltage detected, date/time is not reliable.
<6>[ 0.524737] (3)[1:swapper/0]rtc-pcf8563 1-0051: rtc core: registered rtc-pcf8563 as rtc1
<3>[ 0.525180] (3)[1:swapper/0]rtc-pcf8563 1-0051: pcf8563_write_block_data: err=-121 addr=0d, data=00
<6>[ 0.739091] (3)[1:swapper/0]rtc-pcf8563 1-0051: setting system clock to 2009-01-01 00:01:11 UTC (1230768071)
正常
991 : preloader977 : lk
<6>[ 0.574644] (2)[1:swapper/0]rtc-pcf8563 1-0051: rtc core: registered rtc-pcf8563 as rtc1
<6>[ 0.782513] (3)[1:swapper/0]rtc-pcf8563 1-0051: setting system clock to 2009-01-01 23:38:17 UTC (1230853097)
0121 i2c1 rtc-pcf8563
设备上电3.18秒左右访问0xee,9次,1ms后2个9次,3ms后访问0x18,3个9次。对应的kernel时间0.841042左右。lk里boot_linux_fdt不启动linux kernel,不会有0xee 0x18访问。
delayed work
--- a/drivers/rtc/rtc-pcf8563.c
+++ b/drivers/rtc/rtc-pcf8563.c
@@ -650,7 +650,39 @@ static struct i2c_driver pcf8563_driver = {.id_table = pcf8563_id,};+#ifdef MODULEmodule_i2c_driver(pcf8563_driver);
+#else
+static struct delayed_work rtc_init_work;
+
+static void rtc_init_work_callback(struct work_struct *work)
+{
+ i2c_add_driver(&pcf8563_driver);
+ return;
+}
+
+static int __init pcf8563_init(void)
+{
+ int rval = 0;
+
+ INIT_DELAYED_WORK(&rtc_init_work, rtc_init_work_callback);
+ rval = schedule_delayed_work(&rtc_init_work, HZ * 2);
+ if (rval < 0) {
+ pr_info("pcf8563 init fail %d\n", rval);
+ }
+
+ return rval;
+}
+
+static void __exit pcf8563_exit(void)
+{
+ i2c_del_driver(&pcf8563_driver);
+ return;
+}
+
+module_init(pcf8563_init)
+module_exit(pcf8563_exit)
+#endifMODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");MODULE_DESCRIPTION("Philips PCF8563/Epson RTC8564 RTC driver");
dts
--- a/arch/arm/boot/dts/ac8257_demo_1g_32.dts
+++ b/arch/arm/boot/dts/ac8257_demo_1g_32.dts
@@ -993,7 +993,7 @@compatible = "autochips,lcm_bridge_ic";reg = <0x0c>;lcm_id = <0>;
- status = "okay";
+ status = "disabled";};};@@ -1007,7 +1007,7 @@compatible = "autochips,lcm_bridge_ic";reg = <0x0c>;lcm_id = <1>;
- status = "okay";
+ status = "disabled";};/* 720P demo board */
@@ -1038,7 +1038,7 @@interrupt-parent = <&pio>;interrupts = <12 IRQ_TYPE_EDGE_FALLING 12 0>;- status = "okay";
+ status = "disabled";};/* 720P Main */
delay 100ms
--- a/drivers/rtc/rtc-pcf8563.c
+++ b/drivers/rtc/rtc-pcf8563.c
@@ -22,6 +22,7 @@#include <linux/module.h>#include <linux/of.h>#include <linux/err.h>
+#include <linux/delay.h>#define PCF8563_REG_ST1 0x00 /* status */#define PCF8563_REG_ST2 0x01
@@ -650,7 +651,31 @@ static struct i2c_driver pcf8563_driver = {.id_table = pcf8563_id,};+#ifdef MODULEmodule_i2c_driver(pcf8563_driver);
+#else
+static int __init pcf8563_init(void)
+{
+ int rval = 0;
+
+ msleep(100);
+ rval = i2c_add_driver(&pcf8563_driver);
+ if (rval < 0) {
+ pr_info("pcf8563 init fail %d\n", rval);
+ }
+
+ return rval;
+}
+
+static void __exit pcf8563_exit(void)
+{
+ i2c_del_driver(&pcf8563_driver);
+ return;
+}
+
+module_init(pcf8563_init)
+module_exit(pcf8563_exit)
+#endifMODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");MODULE_DESCRIPTION("Philips PCF8563/Epson RTC8564 RTC driver");
0122 debug
i2c1接pcf8563(写地址0xa2,读地址0xa3),2ms后访问0xee,9次,1ms后2个9次,3ms后访问0x18,3个9次。
kernel设备树中禁用pcf8563,示波器已经量不到pcf8563驱动的i2c操作;在此基础上,把i2c1上的rtc芯片pcf8563断开,示波器抓到的i2c信号变成,访问0xa2 3个9次,访问0xee 3个9次,访问0x18 3个9次。
dts
--- a/arch/arm/boot/dts/ac8257_demo_1g_32.dts
+++ b/arch/arm/boot/dts/ac8257_demo_1g_32.dts
@@ -1106,7 +1106,7 @@};rtc: pcf8563@51 {
- status = "okay";
+ status = "disabled";compatible = "nxp,pcf8563";reg = <0x51>;};
i2c-mtk.c
--- a/drivers/i2c/busses/i2c-mtk.c
+++ b/drivers/i2c/busses/i2c-mtk.c
@@ -1428,6 +1428,9 @@ static int mt_i2c_transfer(struct i2c_adapter *adap,int ret;struct mt_i2c *i2c = i2c_get_adapdata(adap);+ if (1 == i2c->adap.nr) {
+ pr_info("zzz i2c bus %d, client 0x%02x\n", i2c->adap.nr, msgs->addr);
+ }if (i2c->multiplexing) {/* Once AP use i2c to transfer, It means bus belong AP.*/i2c->multiplexing = 0;
rtc-pcf8563.c
--- a/drivers/rtc/rtc-pcf8563.c
+++ b/drivers/rtc/rtc-pcf8563.c
@@ -13,6 +13,7 @@* it under the terms of the GNU General Public License version 2 as* published by the Free Software Foundation.*/
+#define DEBUG#include <linux/clk-provider.h>#include <linux/i2c.h>
@@ -245,6 +246,8 @@ static int pcf8563_get_datetime(struct i2c_client *client, struct rtc_time *tm)tm->tm_sec, tm->tm_min, tm->tm_hour,tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);+ dump_stack();
+return 0;}@@ -357,6 +360,7 @@ static int pcf8563_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *tm)tm->time.tm_hour, tm->time.tm_mday, tm->time.tm_wday,tm->enabled, tm->pending);+ dump_stack();return 0;}
main.c
--- a/init/main.c
+++ b/init/main.c
@@ -979,6 +979,7 @@ static int __ref kernel_init(void *unused){int ret;+ msleep(5000);kernel_init_freeable();/* need to finish all async __init code before freeing the memory */async_synchronize_full();
0123 /proc/interrupts
proc.c
--- a/kernel/irq/proc.c
+++ b/kernel/irq/proc.c
@@ -441,6 +441,12 @@ int show_interrupts(struct seq_file *p, void *v)int i = *(loff_t *) v, j;struct irqaction *action;struct irq_desc *desc;
+ const char *trigger_type_sz[IRQ_TYPE_PROBE] = {
+ "", "rising", "falling", "both",
+ "high", "", "", "",
+ "low", "", "", "",
+ "high|low", "", "", "",
+ };if (i > ACTUAL_NR_IRQS)return 0;
@@ -489,6 +495,7 @@ int show_interrupts(struct seq_file *p, void *v)seq_printf(p, " %*d", prec, (int) desc->irq_data.hwirq);#ifdef CONFIG_GENERIC_IRQ_SHOW_LEVELseq_printf(p, " %-8s", irqd_is_level_type(&desc->irq_data) ? "Level" : "Edge");
+ seq_printf(p, "(%-8s)", trigger_type_sz[irqd_get_trigger_type(&desc->irq_data)]);#endifif (desc->name)seq_printf(p, "-%-8s", desc->name);
0213 MTK TINYSYS SCP
defconfig中禁用SCP后,i2c总线上不再有写地址0xee 0x18的访问。
defconfg
-CONFIG_MTK_TINYSYS_SCP_SUPPORT=y
+CONFIG_MTK_TINYSYS_SCP_SUPPORT=n
0214 i2c1
禁用SCP后i2c总线上只有rtc芯片相关的数据访问,示波器解码出来的i2c数据,与rtc-pcf8563驱动代码一致。
i2c1数据分析
function | i2c | |
pcf8563_probe | a2 0e 03 | Set timer to lowest frequency to save power |
pcf8563_get_alarm_mode | a2 01 A3 00 | |
pcf8563_rtc_read_time | a2 00 a3 08 00 38 08 02 14 3d 22 25 | __rtc_read_alarm |
pcf8563_rtc_read_alarm | a2 09 a3 80 81 80 | __rtc_read_alarm |
pcf8563_get_alarm_mode | a2 01 a3 00 | |
pcf8563_rtc_read_time | a2 00 a3 08 00 38 08 02 14 3d 22 25 | __rtc_read_alarm |
pcf8563_rtc_read_time | a2 00 a3 08 00 38 08 02 14 3d 22 25 | rtc_initialize_alarm |
pcf8563_clkout_register_clk | a2 0d 00 | disable the clkout output |
a2 0d a3 38 | pcf8563_clkout_recalc_rate | |
200ms | ||
pcf8563_rtc_read_time | a2 00 a3 08 00 38 08 02 14 3d 22 25 | rtc_hctosys |
usleep
可能出现返回值小于0,实际休眠时间可能比想要的时间短的情况,接触到的大部分人没有判断函数返回值、man命令查看帮助的习惯,量产后程序时不时出现莫名其妙的情况。
bionic/libc/upstream-freebsd/lib/libc/gen/usleep.c
sleep
bionic/libc/upstream-freebsd/lib/libc/gen/sleep.c
43 unsigned int44 __sleep(unsigned int seconds)45 {46 struct timespec time_to_sleep;47 struct timespec time_remaining;4849 /*50 * Avoid overflow when `seconds' is huge. This assumes that51 * the maximum value for a time_t is >= INT_MAX.52 */53 if (seconds > INT_MAX)54 return (seconds - INT_MAX + __sleep(INT_MAX));5556 time_to_sleep.tv_sec = seconds;57 time_to_sleep.tv_nsec = 0;58 if (_nanosleep(&time_to_sleep, &time_remaining) != -1)59 return (0);60 if (errno != EINTR)61 return (seconds); /* best guess */62 return (time_remaining.tv_sec +63 (time_remaining.tv_nsec != 0)); /* round up */64 }6566 __weak_reference(__sleep, sleep);67 __weak_reference(__sleep, _sleep);
nanosleep
kernel/time/hrtimer.c
1666 SYSCALL_DEFINE2(nanosleep, struct timespec __user *, rqtp,
1667 struct timespec __user *, rmtp)
1668 {
1669 struct timespec tu;
1670
1671 if (copy_from_user(&tu, rqtp, sizeof(tu)))
1672 return -EFAULT;
1673
1674 if (!timespec_valid(&tu))
1675 return -EINVAL;
1676
1677 return hrtimer_nanosleep(&tu, rmtp, HRTIMER_MODE_REL, CLOCK_MONOTONIC);
1678 }
相关文章:
坑多多之AC8257 i2c1 rtc-pcf8563
pcf85163 ordering information Ordering information Package Description Version Marking code PCF85163T/1 SO8 ① SOT96-1 PF85163 PCF85163TS/1 TSSOP8 ② SOT505-1 85163 ①plastic small outline package; 8 leads;body width 3.9 mm ②plastic thin…...
制作一个项目用于研究elementUI的源码
需求:修改el-tooltip的颜色,发现传递参数等方法都不太好用,也可以使用打断点的方式,但也有点麻烦,因此打算直接修改源码,把组件逻辑给修改了 第一步下载源码 源码地址 GitHub - ElemeFE/element: A Vue.j…...
Docker高级篇
1.Mysql主从复制Docker版本 mysql主从复制原理 binlog 1.新建主服务器容器实例 docker run -d -p 3307:3306 --privilegedtrue \ -v /opt/mysql8.4.3/log:/var/log/mysql \ -v /opt/mysql8.4.3/conf:/etc/mysql/conf.d \ -v /opt/mysql8.4.3/data:/var/lib/mysql \ -e MYSQL…...
OSI 参考模型和 TCP/IP 参考模型
数据通信是很复杂的,很难在一个协议中完成所有功能。因此在制定协议时经常采用的思路是将复杂的数据通信功能由若干协议分别完成,然后将这些协议按照一定的方式组织起来。最典型的是采用分层的方式来组织协议,每一层都有一套清晰明确的功能和…...
rocketmq-netty通信设计-request和response
1、NettyRemotingServer启动分析 org.apache.rocketmq.remoting.netty.NettyRemotingServer#start public void start() {this.defaultEventExecutorGroup new DefaultEventExecutorGroup(nettyServerConfig.getServerWorkerThreads(),new ThreadFactory() {private AtomicI…...
初识计算机网络
从此篇我将开始网络新篇章! 1. 网络发展史 最初的计算机之间相互独立存在,每个计算机只能持有自己的数据,数据无法共享。此时的计算机为独立模式 随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据&#x…...
kamailio常见问题解答
常见问题解答 本页面接受贡献,你必须通过注册表单创建一个用户账户: https://www.kamailio.org/wiki/start?doregister 如果你有一个适合收录进常见问题解答的问题,并且你不知道答案,那就添加这个问题,并将答案设置…...
Flask框架入门完全指南
一、初识Flask:轻量级框架的魅力 1.1 Flask框架定位 Flask作为Python最受欢迎的轻量级Web框架,以"微核心可扩展"的设计哲学著称。其核心代码仅约2000行,却支持通过扩展实现完整Web开发功能。这种设计使得开发者可以: …...
用deepseek学大模型05逻辑回归
deepseek.com:逻辑回归的目标函数,损失函数,梯度下降 标量和矩阵形式的数学推导,pytorch真实能跑的代码案例以及模型,数据,预测结果的可视化展示, 模型应用场景和优缺点,及如何改进解决及改进方法数据推导。…...
为什么要选择3D机器视觉检测
选择3D机器视觉检测的原因主要包括以下几点: 高精度测量 复杂几何形状:能够精确测量复杂的三维几何形状。 微小细节:可捕捉微小细节,适用于高精度要求的行业。全面数据获取 深度信息:提供深度信息,弥补2D视…...
CentOS上安装WordPress
在CentOS上安装WordPress是一个相对直接的过程,可以通过多种方法完成,包括使用LAMP(Linux, Apache, MySQL, PHP)栈或使用更现代的LEMP(Linux, Nginx, MySQL, PHP)栈。 我选择的是(Linux, Nginx…...
webshell通信流量分析
环境安装 Apatche2 php sudo apt install apache2 -y sudo apt install php libapache2-mod-php php-mysql -y echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php sudo ufw allow Apache Full 如果成功访问info.php,则环境安…...
高效高并发调度架构
以下是从架构层面为你提供的适合多核CPU、多GPU环境下API客户端、服务端高级调度,以实现高效并发大规模与用户交互的技术栈: 通信协议 gRPC:基于HTTP/2协议,具有高性能、低延迟的特点,支持二进制序列化(通…...
MYSQL下载安装及使用
MYSQL官网下载地址:https://downloads.mysql.com/archives/community/ 也可以直接在服务器执行指令下载,但是下载速度比较慢。还是自己下载好拷贝过来比较快。 wget https://dev.mysql.com/get/Downloads/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz 1…...
Python elasticsearch客户端连接常见问题整理
python 访问 elasticsearch 在python语言中,我们一般使用 pip install elasticsearch 软件包,来访问es服务器。 正确用法 本地安装elasticsearch时,应指定与服务端相同的大版本号: pip install elasticsearch7.17.0然后就可以…...
相得益彰,Mendix AI connector 秒连DeepSeek ,实现研发制造域场景
在当今快速发展的科技领域,低代码一体化平台已成为企业数字化转型的关键工具,同时,大型语言模型(LLM)如 DeepSeek 在自动生成代码和提供智能建议方面表现出色。 Mendix 于近期发布的 GenAI 万能连接器,目前…...
Python PyCharm DeepSeek接入
Python PyCharm DeepSeek接入 创建API key 首先进入DeepSeek官网,https://www.deepseek.com/ 点击左侧“API Keys”,创建API key,输出名称为“AI” 点击“创建",将API key保存,复制在其它地方。 在PyCharm中下…...
pytest测试专题 - 2.1 一种推荐的测试目录结构
<< 返回目录 1 pytest测试专题 - 2.1 一种推荐的测试目录结构 2 pytest 项目目录结构及文件功能 以下是典型 pytest 项目中常见的文件和目录结构及其功能的概述: 2.1 文件/目录结构 文件/目录功能描述test_ 文件* 主测试文件,命名通常以 test_…...
Dify本地安装
目录 方式一docker安装: 方式二源码安装: Dify本地安装可以用docker方式,和源码编译方式。 先到云厂商平台申请一台Centos系统云主机,网络选择海外,需要公网IP,再按一下流程操作: 方式一doc…...
MySQL、MariaDB 和 TDSQL 的区别
MySQL、MariaDB 和 TDSQL 是三种不同的数据库管理系统,它们在设计理念、功能、性能和使用场景上有一些显著的区别。 以下是对这三者的详细比较和介绍。 1. MySQL 概述 类型:关系型数据库管理系统(RDBMS)。开发者:最…...
Java 设计模式之桥接模式
文章目录 Java 设计模式之桥接模式概述UML代码实现 Java 设计模式之桥接模式 概述 桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。通过桥接模式,可以避免类爆炸问题,并提高系统的可扩展性。 UML 核心…...
【Linux】网络基础
目录 一、协议分层 (一)计算机网络 (二)协议分层 (三)OSI模型 (四)TCP/IP协议 二、网络传输过程 三、IP地址和MAC地址 (一)IP地址 (二&a…...
[C++]多态详解
目录 一、多态的概念 二、静态的多态 三、动态的多态 3.1多态的定义 3.2虚函数 四、虚函数的重写(覆盖) 4.1虚函数 4.2三同 4.3两种特殊情况 (1)协变 (2)析构函数的重写 五、C11中的final和over…...
Python常见面试题的详解7
1. 内置的数据结构有哪几种 Python 中有多种内置的数据结构,主要分为以下几种: 1.1 数值类型 整数(int):用于表示整数,没有大小限制。例如:1, -5, 100。浮点数(float)…...
C++ ——构造函数
1、作用:创建对象时,给对象的属性进行初始化 2、特点 (1)构造函数与类同名 (2)如果没有显式给出构造函数,编译器会给出默认的构造函数(参数为空,并且函数体也为空&#…...
PostgreSQL如何关闭自动commit
PostgreSQL如何关闭自动commit 在 PostgreSQL 中,默认情况下,每个 SQL 语句都会自动提交(即 AUTOCOMMIT 是开启的)。如果希望关闭自动提交,以便手动控制事务的提交和回滚,可以通过以下方法实现。 1 使用 …...
HCIA项目实践--静态路由的总结和简单配置
七、静态路由 7.1 路由器获取未知网段的路由信息: (1)静态路由:网络管理员手工配置的路由条目,它不依赖网络拓扑的变化进行自动更新,而是根据管理员预先设定的路径来转发数据包。其优点是配置简单、占用系…...
B站视频同步思维导图(全)
前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z 文章目录 前言分段视频一张思维导图版本手写版本联系作者 分段视频 Java基础 并发编程 MySQL redis…...
C++游戏开发流程图
C游戏开发流程图如下: #mermaid-svg-by3hx6H65qEwr5mV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-by3hx6H65qEwr5mV .error-icon{fill:#552222;}#mermaid-svg-by3hx6H65qEwr5mV .error-text{fill:#5…...
回顾Golang的Channel与Select第二篇
深入掌握Go Channel与Select:从原理到生产级实践 一、Channel基础:不只是数据管道 1.1 通道的完整生命周期(可运行示例) package mainimport ("fmt""time" )func main() {// 创建缓冲通道ch : make(chan i…...
将OpenWrt部署在x86服务器上
正文共:1234 字 40 图,预估阅读时间:2 分钟 如果你问ChatGPT有哪些开源的SD-WAN方案,他会这样答复你: 我们看到,OpenWrt也属于比较知名的开源SD-WAN解决方案。当然,在很久之前,我就发…...
Spring Boot 常用依赖详解:如何选择和使用常用依赖
在Spring Boot项目中,依赖(Dependencies)是项目的核心组成部分。每个依赖都提供了一些特定的功能或工具,帮助我们快速开发应用程序。本文将详细介绍Spring Boot中常用的依赖及其作用,并指导你如何根据项目需求选择合适…...
day51 第十一章:图论part02
99. 岛屿数量 深搜 每一块的上下左右都遍历过了之后,这块陆地就遍历完了。是深搜,不是广搜 深搜:递归 def dfs(): if .....: 终止条件 dfs(子节点) directions [[0,1],[1,0],[0,-1],[-1,0]]def dfs(grid, visited, x, y):if grid[x][y]…...
介绍一下 Octave
已思考完成 收起 好的,我现在要回答用户关于介绍Octave的问题。首先,我需要整理提供的参考内容,看看有哪些关键点需要覆盖。 用户给的参考内容很多,包括知乎文章和网页资料,涵盖了Octave的历史、功能、语法、与MATLAB的…...
垃圾回收器
一、GC分类与性能指标 1.垃圾回收器概述: 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器,可以将…...
前端为什么要使用new Promise包裹一个函数
在前端开发中,使用 new Promise 包裹一个函数主要是为了将原本不支持 Promise 规范的操作转化为支持 Promise 规范的操作,从而可以更好地处理异步操作,提升代码的可读性和可维护性。下面详细介绍这么做的常见原因和应用场景: 1. …...
【设计模式】【行为型模式】访问者模式(Visitor)
👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 🎵 当你的天空突…...
深入理解 MQTT 协议:物联网通信的核心
目录 一、什么是 MQTT? 二、MQTT 的核心特点 2.1 轻量级 2.2 发布/订阅模式 2.3 可靠传输 2.4 安全性 三、MQTT 协议架构 3.1 核心组件 3.2 通信流程 四、MQTT 协议详解 4.1 消息格式 4.2 消息类型 4.3 QoS 级别 五、MQTT 的应用场景 六、MQTT 的实现 6.1 常用 Bro…...
25/2/16 <算法笔记> MiDas原理
MiDaS(Monocular Depth Sensing)是一种基于单目深度估计的技术,它通过深度学习方法使用单张RGB图像(普通2D图像)来估算场景的深度图(Depth Map)。相比于传统的依赖专用深度传感器(如…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_ssl_init 函数
#if (NGX_OPENSSL)ngx_ssl_init(log); #endif objs/ngx_auto_config.h 中 #ifndef NGX_OPENSSL #define NGX_OPENSSL 1 #endif 所以这个条件编译成立 NGX_OPENSSL 是一个宏定义,用于控制与 OpenSSL 相关的功能是否被启用 若用户通过./configure参数(如-…...
时间盲注Boolen盲注之获取表、列、具体数据的函数
时间盲注 时间盲注(Time-Based Blind SQL Injection)是一种利用数据库响应时间的差异来推断数据的SQL注入技术。它的核心原理是通过构造特定的SQL查询,使得数据库在执行查询时产生时间延迟,从而根据延迟的有无来推断数据。 时间…...
人工智能在文化遗产保护中的创新:科技与文化的完美融合
人工智能在文化遗产保护中的创新:科技与文化的完美融合 引言 文化遗产是人类历史的见证,是我们了解过去、感知现在、展望未来的重要宝贵资源。然而,随着时间的流逝,自然灾害、战争、气候变化以及人为因素等,都对文化遗产的保护造成了严峻挑战。传统的文化遗产保护方法虽…...
linux下OSD使用SDL_ttf生成点阵数据,移植+开发代码详解
前言 在做音视频开发的时候,一般会在视频上增加osd水印,时间或者logo之类的,这种水印其实就是由点阵数据构成,本文使用freetypeSDLSDL_ttf生成文字点阵数据,并保存为bmp格式图片。使用这种方式的优点: 方便…...
渗透测试方向的就业前景怎么样?
互联网各领域资料分享专区(不定期更新): Sheet 前言 渗透测试作为网络安全领域的重要分支,近年来就业前景持续向好,尤其在数字化转型加速、安全威胁加剧的背景下,市场需求显著增长。以下是详细分析: 一、市场需求旺盛 …...
SQL Server:查看当前连接数和最大连接数
目录标题 **1. 查看当前连接数****使用系统视图****使用动态管理视图** **2. 查看最大连接数****通过配置选项****通过服务器属性** **3. 查看连接数的实时变化****4. 设置最大连接数****5. 查看连接的详细信息****6. 使用 SQL Server Management Studio (SSMS)****7. 使用 SQL…...
Windows环境搭建ES集群
搭建步骤 下载安装包 下载链接:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.27-windows-x86_64.zip 解压 解压并复制出3份 es-node1配置 config/elasticsearch.yml cluster.name: xixi-es-win node.name: node-1 path.data: D:\\wor…...
【第15章:量子深度学习与未来趋势—15.3 量子深度学习在图像处理、自然语言处理等领域的应用潜力分析】
一、开篇:为什么我们需要关注这场"量子+AI"的世纪联姻? 各位技术爱好者们,今天我们要聊的这个话题,可能是未来十年最值得押注的技术革命——量子深度学习。这不是简单的"1+1=2"的物理叠加,而是一场可能彻底改写AI发展轨迹的范式转移。 想象这样一个…...
DeepSeek与ChatGPT:AI语言模型的全面对决
DeepSeek与ChatGPT:AI语言模型的全面对决 引言:AI 语言模型的时代浪潮一、认识 DeepSeek 与 ChatGPT(一)DeepSeek:国产新星的崛起(二)ChatGPT:AI 界的开拓者 二、DeepSeek 与 ChatGP…...
DeepSeek-V3模型底层架构的核心技术一(多Token预测(MTP)技术)
一、DeepSeek-V3的框架结构 DeepSeek-V3的框架结构基于三大核心技术构建:多头潜在注意力(MLA)、DeepSeekMoE架构和多token预测(MTP)。这些创新使得模型在处理长序列、平衡计算负载以及生成连贯文本方面表现出色。 1. 基础架构 DeepSeek-V3的基础架构仍然基于Transformer框…...
QT c++ QMetaObject::invokeMethod函数 线程给界面发送数据
在项目开发时,常常需要用线程采集数据,如果要给界面发送数据,本文是方法之二,动态调用。 第一步:在界面类里定义一个带Q_INVOKABLE关键字的函数接收信息 第二步:在线程类里,用 QMetaObject::i…...