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

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一,概述

1. 目的

将调试信息打印串口由uart0改为uart3。

2. 版本信息

Uboot版本:2014.07;
Kernel版本:Linux-3.10;

二,Uboot

1. sys_config.fex改动

使能uart3(TX:PH00 RX:PH01),并让boot0,uboot的debug串口由uart0改为uart3(TX:PH00 RX:PH01)

diff --git a/pack/chips/sun8iw11p1/configs/a40i-p3/sys_config.fex b/pack/chips/sun8iw11p1/configs/a40i-p3/sys_config.fex index 159d3fa..afe98fe 100755
--- a/pack/chips/sun8iw11p1/configs/a40i-p3/sys_config.fex
+++ b/pack/chips/sun8iw11p1/configs/a40i-p3/sys_config.fex@@ -111,9 +111,9 @@ twi_scl         = port:PB0<2><default><default><default>twi_sda         = port:PB1<2><default><default><default>[uart_para]-uart_debug_port = 0-uart_debug_tx         = port:PB22<2><1><default><default>-uart_debug_rx         = port:PB23<2><1><default><default>+uart_debug_port = 3+uart_debug_tx         = port:PH00<4><1><default><default>+uart_debug_rx         = port:PH01<4><1><default><default>[jtag_para]jtag_enable     = 1@@ -387,7 +387,7 @@ uart2_rx         = port:PI19<7><1><default><default>[uart3]-uart3_used       = 0+uart3_used       = 1uart3_port       = 3uart3_type       = 2uart3_tx         = port:PH00<4><1><default><default>

2. 宏定义改动

brandy/u-boot-2014.07/include/configs/sunXXX.h路径中,修改如下:

diff --git a/u-boot-2014.07/include/configs/sun8iw11p1.h b/u-boot
2014.07/include/configs/sun8iw11p1.h
index b733162..22390a9 100755
--- a/u-boot-2014.07/include/configs/sun8iw11p1.h
+++ b/u-boot-2014.07/include/configs/sun8iw11p1.h
@@ -282,7 +282,7 @@
#define CONFIG_SYS_NS16550_COM4                SUNXI_UART3_BASE
#define CONFIG_NS16550_FIFO_ENABLE     (1)
-#define CONFIG_CONS_INDEX                      1                       /* 
which serial channel for console */
+#define CONFIG_CONS_INDEX                      4                       /* 
which serial channel for console */
#define CONFIG_SETUP_MEMORY_TAGS

CONFIG_CONS_INDEX=4,对应serial3 ;如下表:

串口通道CONFIG_CONS_INDEX
serial01
serial12
serial23
serial34
serial45
serial56

指定波特率:

 #define CONFIG_BAUDRATE             115200

3. 初始化改动

boot0已经限制了仅使用uart0,将这一修改去掉,将会按照sys_config.fex中的uart_debug_port配置的uart端口输出信息。

 diff --git a/u-boot-2014.07/arch/arm/cpu/armv7/sun8iw11p1/spl/serial_spl.c 
b/u-boot-2014.07/arch/arm/cpu/armv7/sun8iw11p1/spl/serial_spl.cindex 3f6c141..70955df 100644--- a/u-boot-2014.07/arch/arm/cpu/armv7/sun8iw11p1/spl/serial_spl.c+++ b/u-boot-2014.07/arch/arm/cpu/armv7/sun8iw11p1/spl/serial_spl.c@@ -44,10 +44,10 @@ void sunxi_serial_init(int uart_port, void *gpio_cfg, 
int gpio_max)u32 reg, i;u32 uart_clk;
-       if( (uart_port < 0) ||(uart_port > 0) )
-       {
-               return;-       }+       // if( (uart_port < 0) ||(uart_port > 0) )+       // {+       //      return;+       // }//resetreg = readl(CCMU_BUS_SOFT_RST_REG4);reg &= ~(1<<(CCM_UART_PORT_OFFSET + uart_port));

4. 打包改动

由于平台适配性问题,在更改了uart_para参数后,会出现采用PhoenixSuit无法烧录固件的情况。由于在pack阶段,会解析sys_confg.fex的uart_para配置项,然后更新boot0,fes1,uboot的头部信息,路径(tools/pack/pack

 update_fes1  fes1.fex           sys_config.bin > /dev/null

出现无法烧录的原因是pack更新了fes1的头部信息,导致校验不通过,所以需要屏蔽fes1的更新,修改如下:

diff --git a/pack_tools/update_fes1/update_fes1.c 
b/pack_tools/update_fes1/update_fes1.c
index 6134c96..536dfb1 100755--- a/pack_tools/update_fes1/update_fes1.c+++ b/pack_tools/update_fes1/update_fes1.c@@ -230,6 +230,21 @@ int update_for_fes1(char *fes1_name, int storage_type)}}+       fes1_head->prvt_head.uart_port = 0;+       fes1_head->prvt_head.uart_ctrl[0].port      = 2;+       fes1_head->prvt_head.uart_ctrl[0].port_num  = 22;+       fes1_head->prvt_head.uart_ctrl[0].mul_sel   = 2;+       fes1_head->prvt_head.uart_ctrl[0].pull      = 1;+       fes1_head->prvt_head.uart_ctrl[0].drv_level = -1;+       fes1_head->prvt_head.uart_ctrl[0].data      = -1;++       fes1_head->prvt_head.uart_ctrl[1].port      = 2;+       fes1_head->prvt_head.uart_ctrl[1].port_num  = 23;+       fes1_head->prvt_head.uart_ctrl[1].mul_sel   = 2;+       fes1_head->prvt_head.uart_ctrl[1].pull      = 1;+       fes1_head->prvt_head.uart_ctrl[1].drv_level = -1;+       fes1_head->prvt_head.uart_ctrl[1].data      = -1;+//取出数据进行修正,debugenable参数if(!script_parser_fetch("jtag_para", "jtag_enable", value)){

更新update_fes1工具:进入brandy/pack_tools/update_fes1/ 目录,执行make命令,用生成的 update_fes1覆盖tools/pack/pctools/linux/mod_update/update_fes1 ,再进行 pack 操作即可。
但这样会造成fes1的输出依然还是uart0,所以我们需要更改fes1的代码,如下:

diff --git a/lichee/brandy/u-boot-2014.07/sunxi_spl/fes_init/main/fes1_main.c b/lichee/brandy/u-boot-2014.07/sunxi_spl/fes_init/main/fes1_main.c
index 31a01017c5..1b794e2010 100755
--- a/lichee/brandy/u-boot-2014.07/sunxi_spl/fes_init/main/fes1_main.c
+++ b/lichee/brandy/u-boot-2014.07/sunxi_spl/fes_init/main/fes1_main.c
@@ -101,9 +101,35 @@ int main(void){__s32 dram_size=0;-       timer_init();
+       timer_init();       
+if(CONFIG_CONS_INDEX == 4)
+{
+               boot0_file_head_t fes1_head_fix;
+               fes1_head_fix.prvt_head.uart_port = 3;
+               fes1_head_fix.prvt_head.uart_ctrl[0].port = 8;      
+               fes1_head_fix.prvt_head.uart_ctrl[0].port_num  = 0;
+               fes1_head_fix.prvt_head.uart_ctrl[0].mul_sel  = 4;
+               fes1_head_fix.prvt_head.uart_ctrl[0].pull   = 1;   
+               fes1_head_fix.prvt_head.uart_ctrl[0].drv_level = -1;
+               fes1_head_fix.prvt_head.uart_ctrl[0].data = -1;      
+               
+
+               fes1_head_fix.prvt_head.uart_ctrl[1].port  = 8;
+               fes1_head_fix.prvt_head.uart_ctrl[1].port_num  = 0;
+               fes1_head_fix.prvt_head.uart_ctrl[1].mul_sel  = 4;
+               fes1_head_fix.prvt_head.uart_ctrl[1].pull   = 1;
+               fes1_head_fix.prvt_head.uart_ctrl[1].drv_level = -1;
+               fes1_head_fix.prvt_head.uart_ctrl[1].data = -1;
+               
+               //serial init
+               sunxi_serial_init(fes1_head_fix.prvt_head.uart_port, (void *)fes1_head_fix.prvt_head.uart_ctrl, 2);
+ }
+ else
+ {//serial init
-       sunxi_serial_init(fes1_head.prvt_head.uart_port, (void *)fes1_head.prvt_head.uart_ctrl, 2);
+       sunxi_serial_init(fes1_head_fix.prvt_head.uart_port, (void *)fes1_head_fix.prvt_head.uart_ctrl, 2);
+ }
+#ifdef CONFIG_SUNXI_MULITCORE_BOOTpmu_init();set_pll_voltage(1260);

其中,CONFIG_CONS_INDEX即为brandy/u-boot-2014.07/include/configs/sunXXX.h路径中的宏。

5. 启动参数改动

更改uboot传递给kernel的启动参数,路径pack/chips/sun8iw11p1/configs/default/env.cfg可能
因为配置有所不同

diff --git a/pack/chips/sun8iw11p1/configs/default/env.cfg 
b/pack/chips/sun8iw11p1/configs/default/env.cfgindex eb60f41..922057e 100755
--- a/pack/chips/sun8iw11p1/configs/default/env.cfg
+++ b/pack/chips/sun8iw11p1/configs/default/env.cfg@@ -1,9 +1,9 @@#kernel command argumentsenforcing=1-earlyprintk=sunxi-uart,0x01c28000+earlyprintk=sunxi-uart,0x01c28c00initcall_debug=0-console=ttyS0,115200+console=ttyS3,115200nand_root=/dev/systemmmc_root=/dev/mmcblk0p7nor_root=/dev/mtdblock2

重新编译boot0,uboot。


三. Kernel

1. config改动

修改 kernel 的 menuconfig 中 uart 的打印端口和基地址:

diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debugindex 4d17934..3aea83e 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -443,6 +443,13 @@ choiceSay Y here if you want kernel low-level debugging supporton Allwinner A1X based platforms on the UART1.+       config DEBUG_SUNXI_UART3+               bool "Kernel low-level debugging messages via sunXi UART3"+               depends on ARCH_SUNXI+               help+                 Say Y here if you want kernel low-level debugging support+                 on Allwinner A1X based platforms on the UART3.+config DEBUG_TEGRA_UARTdepends on ARCH_TEGRAbool "Use Tegra UART for low-level debug"@@ -662,7 +669,7 @@ config DEBUG_LL_INCLUDEDEBUG_MMP_UART3default "debug/sirf.S" if DEBUG_SIRFPRIMA2_UART1 || 
DEBUG_SIRFMARCO_UART1default "debug/socfpga.S" if DEBUG_SOCFPGA_UART-       default "debug/sunxi.S" if DEBUG_SUNXI_UART0 || DEBUG_SUNXI_UART1+       default "debug/sunxi.S" if DEBUG_SUNXI_UART0 || DEBUG_SUNXI_UART1 || DEBUG_SUNXI_UART3default "debug/tegra.S" if DEBUG_TEGRA_UARTdefault "debug/ux500.S" if DEBUG_UX500_UARTdefault "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT || \
diff --git a/arch/arm/include/debug/sunxi.S b/arch/arm/include/debug/sunxi.Sindex 04eb56d..5f66699 100644--- a/arch/arm/include/debug/sunxi.S+++ b/arch/arm/include/debug/sunxi.S@@ -16,6 +16,9 @@#elif defined(CONFIG_DEBUG_SUNXI_UART1)#define SUNXI_UART_DEBUG_PHYS_BASE 0x01c28400#define SUNXI_UART_DEBUG_VIRT_BASE 0xf1c28400+#elif defined(CONFIG_DEBUG_SUNXI_UART3)+#define SUNXI_UART_DEBUG_PHYS_BASE 0x01c28c00+#define SUNXI_UART_DEBUG_VIRT_BASE 0xf1c28c00#endif.macro  addruart, rp, rv, tmp

增加DEBUG_SUNXI_UART3后,在menuconfig中选择:

make ARCH=arm menuconfig

在这里插入图片描述

2. 设备树改动

dts可改可不改,为了统一,这里的设备树也一起更改,实际上这里的配置会被uboot传递的启动参数覆盖

 diff --git a/arch/arm/boot/dts/sun8iw11p1.dtsi 
b/arch/arm/boot/dts/sun8iw11p1.dtsiindex 526fe29..4e00a86 100755--- a/arch/arm/boot/dts/sun8iw11p1.dtsi+++ b/arch/arm/boot/dts/sun8iw11p1.dtsi@@ -61,7 +61,7 @@};chosen {-               bootargs = "earlyprintk=sunxi-uart,0x01c28000 loglevel=8 
initcall_debug=1 console=ttyS0 init=/init";+               bootargs = "earlyprintk=sunxi-uart,0x01c28c00 loglevel=8 
initcall_debug=1 console=ttyS3 init=/init";linux,initrd-start = <0x0 0x0>;linux,initrd-end = <0x0 0x0>;};

四,文件系统

1. defconfig改动

修改buildroot-201611/configs/sun8iw11p1_defconfig 下的配置:

 diff --git a/configs/sun8iw11p1_defconfig b/configs/sun8iw11p1_defconfigindex e4b6313..89c9e01 100755--- a/configs/sun8iw11p1_defconfig+++ b/configs/sun8iw11p1_defconfig@@ -273,7 +273,7 @@ BR2_SYSTEM_BIN_SH_BASH=y# BR2_SYSTEM_BIN_SH_NONE is not setBR2_SYSTEM_BIN_SH="bash"BR2_TARGET_GENERIC_GETTY=y-BR2_TARGET_GENERIC_GETTY_PORT="ttyS0"+BR2_TARGET_GENERIC_GETTY_PORT="ttyS3"# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set

注:
执行build.sh编译builroot的过程:
tools/build/mkcommon.sh 会执行buildroot-201611/scripts/mkcommon.sh ,然后在buildroot-201611/scripts/build.sh 的build_buildroot函数中,
会判断是否存在out/sun8iw11p1/linux/common/buildroot/.config
如果存在,则使用该配置,否则使用buildroot-201611/configs/sun8iw11p1_defconfig ,所以需要
清空out目录,或者直接删除out/sun8iw11p1/linux/common/buildroot/.config

如果不确定是否配置成功,可以在buildroot-201611/package/skeleton/skeleton.mk 增加打印:

diff --git a/package/skeleton/skeleton.mk b/package/skeleton/skeleton.mkindex a4788e1..702596b 100644--- a/package/skeleton/skeleton.mk+++ b/package/skeleton/skeleton.mk@@ -223,6 +223,7 @@ endefelse ifeq ($(BR2_INIT_BUSYBOX),y)# Add getty to busybox inittabdefine SKELETON_SET_GETTY+       echo "SKELETON_TARGET_GENERIC_GETTY_PORT$(SKELETON_TARGET_GENERIC_GETTY_PORT)"$(SED) '/# 
GENERIC_SERIAL$$/s~^.*#~$(SKELETON_TARGET_GENERIC_GETTY_PORT)::respawn:/sbin/getty -L $(SKELETON_TARGET_GENERIC_GETTY_OPTIONS) 
$(SKELETON_TARGET_GENERIC_GETTY_PORT) $(SKELETON_TARGET_GENE$(TARGET_DIR)/etc/inittabendef

五,整体重新编译打包

 ./build.sh && ./build.sh pack

相关文章:

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...