坑多多之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冲突导致。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
defconfg
-CONFIG_MTK_TINYSYS_SCP_SUPPORT=y
+CONFIG_MTK_TINYSYS_SCP_SUPPORT=n
0214 i2c1
禁用SCP后i2c总线上不再有0xee 0x18的访问。
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
bionic/libc/upstream-freebsd/lib/libc/gen/usleep.c
41 int42 __usleep(useconds_t useconds)43 {44 struct timespec time_to_sleep;4546 time_to_sleep.tv_nsec = (useconds % 1000000) * 1000;47 time_to_sleep.tv_sec = useconds / 1000000;48 return (_nanosleep(&time_to_sleep, NULL));49 }5051 __weak_reference(__usleep, usleep);52 __weak_reference(__usleep, _usleep);
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…...

webpack构建流程
文章目录 [TOC](文章目录) 运行流程初始化流程编译构建流程compile编译make 编译模块build module 完成模块编译 输出流程seal输出资源emit输出完成 小结 运行流程 是一个串行的过程,它的工作流程就是将各个插件串联起来 在运行过程中会广播事件,插件只…...

React - 组件之props属性
在 React 中,props(即属性)是组件之间传递数据的一种方式。它是 React 组件的基础,用于将数据从父组件传递到子组件。 一、类组件中 1. props 的作用 数据传递: props 允许父组件向子组件传递数据。子组件可以使用这些数据来渲…...
PMTUD By UDP
通过UDP探测MTU,并实现udp echo server // Description: UDP echo server. // g udp_echo_server.cc -o udp_echo_server #include <iostream> #include <cstring> #include <arpa/inet.h> #include <unistd.h>#define PORT …...
Hutool - BloomFilter:便捷的布隆过滤器实现
1. 布隆过滤器简介 布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否存在于一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,但缺点是有一定的误判率,即判断元素存在…...

【学习资源】时间序列数据分析方法(1)
时间序列数据分析是一个有趣的话题,让我们多花一些时间来研究。此篇为第一篇文章。主要介绍特征提取方法、深度学习时序数据分析模型、参考资源。期望能帮助大家解决工业领域的相关问题。 1 特征提取方法:信号处理 (来源:INTELLIGENT FAULT DIAGNOSIS A…...

盛铂科技SWFA100捷变频频率综合器:高性能国产射频系统的关键选择
在现代射频系统中,频率综合器是实现精确频率控制和快速跳频的核心组件。盛铂科技推出的SWFA100捷变频频率综合器凭借其卓越的性能和小型化设计,成为高性能射频系统中的理想选择。 SWFA100捷变频频率综合器 高速跳频与宽频覆盖 SWFA100捷变频频率综合器能…...

释放你的元数据:使用 Elasticsearch 的自查询检索器
作者:来自 Elastic Josh Asres 了解如何使用 Elasticsearch 的 “self-quering” 检索器来通过结构化过滤器提高语义搜索的相关性。 在人工智能搜索的世界中,在海量的数据集中高效地找到正确的数据至关重要。传统的基于关键词的搜索在处理涉及自然语言的…...

【快速幂算法】快速幂算法讲解及C语言实现(递归实现和非递归实现,附代码)
快速幂算法 快速幂算法可用分治法实现 不难看出,对任意实数a和非负整数n,有: a n { 1 , n 0 , a ≠ 0 0 , a 0 ( a n 2 ) 2 , n > 0 , n 为偶数 ( a n 2 ) 2 ∗ a , n > 0 , n 为奇数 a^n \begin{cases} 1, & n 0, a\neq 0…...

3. 导入官方dashboard
官方dashboard:https://grafana.com/grafana/dashboards 1. 点击仪表板 - 新建 - 导入 注:有网络的情况想可以使用ID,无网络情况下使用仪表板josn文件 2. 在官方dashboard网页上选择符合你现在数据源的dashboard - 点击进入 3. 下拉网页选…...

怎么理解 Spring Boot 的约定优于配置 ?
在传统的 Spring 开发中,大家可能都有过这样的经历:项目还没开始写几行核心业务代码,就已经在各种配置文件中耗费了大量时间。比如,要配置数据库连接,不仅要在 XML 文件里编写冗长的数据源配置,还要处理事务…...
Dify 是什么?Dify是一个开源的LLM应用开发平台,支持快速搭建生成式AI应用,具有RAG管道、Agent功能、模型集成等特点
首先,Dify是一个开源的LLM应用开发平台,支持快速搭建生成式AI应用,具有RAG管道、Agent功能、模型集成等特点75。根据搜索结果,网页6详细对比了多个RAG和AI开发框架,包括MaxKB、FastGPT、RagFlow、Anything-LLM等。其中…...

数据预处理都做什么,用什么工具
数据预处理是数据分析、数据挖掘和机器学习中的关键步骤,其目的是将原始数据转换为适合后续分析或建模的格式。以下是关于数据预处理的主要内容及常用工具的详细介绍: 一、数据预处理的主要任务 数据预处理的主要任务包括以下几个方面: 数据…...
windows蓝牙驱动开发-在蓝牙配置文件驱动程序中接受 L2CAP 连接
L2CAP 服务器配置文件驱动程序会响应来自远程设备的传入逻辑链接控制和适应协议 (L2CAP) 连接请求。 例如,PDA 的 L2CAP 服务器配置文件驱动程序将响应来自 PDA 的传入连接请求。 接收传入 L2CAP 连接请求 1. 若要接收来自特定 PSM 的任何远程设备的传入 L2CAP 连…...

【原理图PCB专题】自制汉字转码工具,适配Allgero 17版本 Skill
众所周知,在使用Skill来编写Allegro控制脚本时如果程序的源码里是汉字,那么有可能会出现乱码。比如像下图这样的程序: 在Allegro中运行如下图所示: 那么如果我们需要让他转成正常的中文字符,就需要将字符转成GBK编码 打开自制小软件:中文与GBK编码互转V1…...
欧拉公式在信号处理中的魔法:调幅信号的生成与频谱分析
欧拉公式在信号处理中的魔法:调幅信号的生成与频谱分析 “数学不是枯燥的符号,而是宇宙的诗歌。” 当我们用欧拉公式解开调幅信号的频谱密码时,仿佛看到电磁波在时空中跳动的频率之舞。这篇博客将带你亲手触摸信号处理中的数学之美。 一、当欧拉公式遇见调幅信号:一场数学与…...
如何在Ubuntu中切换多个PHP版本
在Ubuntu环境下实现PHP版本的灵活切换,是众多开发者与系统管理员的重要技能之一。下面,我们将深入探讨如何在Ubuntu系统中安装、配置及管理多个PHP版本,确保您的开发环境随心所欲地适应各类项目需求。 开始前的准备 确保您的Ubuntu系统保持…...
基于opencv的HOG+角点匹配教程
1. 引言 在计算机视觉任务中,特征匹配是目标识别、图像配准和物体跟踪的重要组成部分。本文介绍如何使用 HOG(Histogram of Oriented Gradients,方向梯度直方图) 和 角点检测(Corner Detection) 进行特征匹…...

Linux线程概念与线程操作
Linux线程概念与线程操作 线程概念 前面提到进程程序代码和数据进程结构体,在线程部分就需要进一步更新之前的认识 进程实际上承担分配系统资源的基本实体,而线程是进程中的一个执行分支,是操作系统调度的基本单位 此处需要注意࿰…...
AI软件栈:LLVM分析(五)
数据流分析是编译优化、代码生成的关键理论。其数学基础是离散数学中的半格(Semi-Lattice)和格。半格与格不仅是编译优化和代码生成的重要理论基础,也是程序分析、验证及自动化测试的系统理论基础。 文章目录 格、半格与不动点格、半格与不动点 半格是指针对二元组 < S …...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...