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

[ROC-RK3568-PC] [Firefly-Android] 10min带你了解LCD的使用

  • 🍇 博主主页: 【Systemcall小酒屋】
  • 🍇 博主追寻:热衷于用简单的案例讲述复杂的技术,“假传万卷书,真传一案例”,这是林群院士说过的一句话,另外“成就是最好的老师”,技术既要沉淀,也得分享,成就感的正反馈是支持我持续耕耘的动力!
  • 🍇 专栏目录: 【Firefly-RK356x板卡】
  • 🍇 专栏说明:基于Firefly旗下的RK356x板卡进行入门篇讲述,欢迎订阅,博主会持续更新!

文章目录

    • 一、内核Config配置
    • 二、MIPI配置
      • 2.1 引脚配置
      • 2.2 背光配置
      • 2.3 显示时序配置
        • 2.3.1 Power on/off sequence
        • 2.3.2 Display-Timings
    • 三、EDP配置
      • 3.1 引脚配置
      • 3.2 EDP背光配置

一、内核Config配置

ROC-RK3568-PC的SDK下kernel/arch/arm64/configs/firefly_defconfig已经把LCD相关的配置好:

CONFIG_DRM_ROCKCHIP=y
CONFIG_ROCKCHIP_DW_MIPI_DSI=y
CONFIG_DRM_PANEL_SIMPLE=y

二、MIPI配置

ROC-RK3568-PC的SDK有MIPI DSI的DTS文件: kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-roc-pc-mipi101_M101014_BE45_A1.dts,此DTS文件为MIPI_DSI0+HDMI屏配置,MIPI_DSI1 默认关闭。

2.1 引脚配置

从DTS文件中可以看到以下语句:

#include "rk3568-firefly-roc-pc.dtsi"/ {model = "ROC-RK3568-PC MIPI M101014_BE45_A1 + HDMI(Android)";compatible = "rockchip,rk3568-firefly-roc-pc-mipi", "rockchip,rk3568";...
}&route_dsi0 {status = "okay";logo,rotation = "logo_rotation_270"; //support rotation 90,180,270connect = <&vp1_out_dsi0>;
};&video_phy0 {status = "okay";
};&dsi0_in_vp0 {status = "disabled";
};&dsi0_in_vp1 {status = "okay";
};/** mipi_dphy0 needs to be enabled* when dsi0 is enabled*/
&dsi0 {status = "okay";//rockchip,lane-rate = <1000>;dsi0_panel: panel@0 {status = "okay";compatible = "simple-panel-dsi";reg = <0>;backlight = <&backlight>;enable-gpios = <&gpio0 RK_PC7 GPIO_ACTIVE_HIGH>;reset-gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_LOW>;enable-delay-ms = <35>;prepare-delay-ms = <6>;reset-delay-ms = <25>;init-delay-ms = <55>;unprepare-delay-ms = <0>;disable-delay-ms = <20>;mipi-data-delay-ms = <200>;...panel-init-sequence = [//39 00 04 B9 83 10 2E// 15 00 02 CF FF05 78 01 1105 32 01 29//15 00 02 35 00];panel-exit-sequence = [05 00 01 2805 00 01 10];...};
};
...
&route_hdmi {status = "okay";connect = <&vp0_out_hdmi>;
};&hdmi {status = "okay";
};&hdmi_in_vp0 {status = "okay";
};&hdmi_in_vp1 {status = "disabled";
};
...

这里定义了LCD的控制引脚:

NAMEGPIOGPIO ACTIVE
LCD_ENGPIO0_C7GPIO_ACTIVE_HIGH
LCD_RSTGPIO3_B5GPIO_ACTIVE_LOW

在硬件信号上 LCD_EN 引脚高电平有效,而 LCD_RST 引脚是低电平有效。

2.2 背光配置

在DTS文件中配置了背光信息,如下:

    backlight: backlight {status = "okay";compatible = "pwm-backlight";enable-gpios = <&gpio3 RK_PB0 GPIO_ACTIVE_HIGH>;pwms = <&pwm4 0 50000 1>;brightness-levels = <60  60  60  61  61  61  62  6262  63  63  63  64  64  64  6565  65  66  66  66  67  67  6768  68  68  69  69  69  70  7070  71  71  71  72  72  72  7373  73  74  74  74  75  75  7576  76  76  77  77  77  78  7878  79  79  79  80  80  80  8181  81  82  82  82  83  83  8384  84  84  85  85  85  86  8686  87  87  87  88  88  88  8989  89  90  91  92  93  94  9596  97  98  99 100 101 102 103104 105 106 107 108 109 110 111112 113 114 115 116 117 118 119120 121 122 123 124 125 126 127128 129 130 131 132 133 134 135136 137 138 139 140 141 142 143144 145 146 147 148 149 150 151152 153 154 155 156 157 158 159160 161 162 163 164 165 166 167168 169 170 171 172 173 174 175176 177 178 179 180 181 182 183184 185 186 187 188 189 190 191192 193 194 195 196 197 198 199200 201 202 203 204 205 206 207208 209 210 211 212 213 214 215216 217 218 219 220 221 222 223224 225 226 227 228 229 230 231232 233 234 235 236 237 238 239240 241 242 243 244 245 246 247248 249 250 251 252 253 254 255>;default-brightness-level = <200>;};
  • enable-gpios:背光使能脚,高电平有效。

  • pwms属性:配置PWM,范例里面默认使用pwm4,50000ns是周期(20 KHz),pwm为负极性。

  • brightness-levels属性:配置背光亮度数组,一般以值 255 为一个 scale,当 PWM 设置为正极性时,从 0~255 表示背光为正极,占空比从 0%~100% 变化,255~0 为负极性,占空比从 100%~0% 变化;当 PWM 设置为负极性时,反之。

  • default-brightness-level属性:开机时默认背光亮度,范围为0-255。

具体可参考kernel中的说明文档:kernel/Documentation/devicetree/bindings/leds/backlight/pwm-backlight.txt

2.3 显示时序配置

2.3.1 Power on/off sequence

MIPI屏的上下电时序通常都在规格书的Power on/off sequence章节中,可根据规格书的上下电时序修改dts,panel节点中有如下属性:

&dsi0 {status = "okay";//rockchip,lane-rate = <1000>;dsi0_panel: panel@0 {status = "okay";compatible = "simple-panel-dsi";...enable-delay-ms = <35>;prepare-delay-ms = <6>;reset-delay-ms = <25>;init-delay-ms = <55>;unprepare-delay-ms = <0>;disable-delay-ms = <20>;mipi-data-delay-ms = <200>;...};
};

mipi-data-delay-ms为Firefly 10.1寸 M101014-BE45-A1 MIPI屏所需时序,调试屏幕时可根据本身上下电时序是否需要再配置此属性。MIPI上下电后需要发送初始化或退出指令才能使之正常工作,初始化和退出指令列表可以参考kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-roc-pc-mipi101_CZNB101862T.dts,列表如下:

&dsi0 {status = "okay";//rockchip,lane-rate = <1000>;dsi0_panel: panel@0 {...panel-init-sequence = [15 00 02 E0 0015 00 02 E1 9315 00 02 E2 6515 00 02 E3 F815 00 02 E0 0415 00 02 2D 03		15 00 02 E0 0015 00 02 80 03		//15 00 02 4A 35		15 00 02 E0 0115 00 02 00 00		15 00 02 E0 0115 00 02 4B 04//15 00 02 4A 35		15 00 02 00 0015 00 02 01 66//15 00 02 03 00		//15 00 02 04 6D15 00 02 17 00		15 00 02 18 AF15 00 02 19 01...];panel-exit-sequence = [05 05 01 2805 78 01 10];};
};

dts中的init-sequencepanel-exit-sequence,只是配置了上电和下电指令, 其他的初始化指令已经烧录在M101014-BE45-A1这款MIPI屏的IC里,dts无需配置。接下来来看看上下电时序在驱动中的实现, 具体实现在kernel/drivers/gpu/drm/panel/panel-simple.c中:

static int panel_simple_disable(struct drm_panel *panel)
{...if (p->backlight) {p->backlight->props.power = FB_BLANK_POWERDOWN;p->backlight->props.state |= BL_CORE_FBBLANK;backlight_update_status(p->backlight);}if (p->desc->delay.disable)panel_simple_sleep(p->desc->delay.disable);if (p->cmd_type == CMD_TYPE_MCU) {err = panel_simple_xfer_mcu_cmd_seq(p, p->desc->exit_seq);if (err)dev_err(panel->dev, "failed to send exit cmds seq\n");}...
}static int panel_simple_unprepare(struct drm_panel *panel)
{...if (p->desc->exit_seq) {if (p->dsi)panel_simple_xfer_dsi_cmd_seq(p, p->desc->exit_seq);else if (p->cmd_type == CMD_TYPE_SPI)err = panel_simple_xfer_spi_cmd_seq(p, p->desc->exit_seq);if (err)dev_err(panel->dev, "failed to send exit cmds seq\n");}gpiod_direction_output(p->reset_gpio, 1);if(!p->enable_on_always){gpiod_direction_output(p->enable_gpio, 0);}...
}static int panel_simple_prepare(struct drm_panel *panel)
{...gpiod_direction_output(p->enable_gpio, 1);if (p->desc->delay.prepare)panel_simple_sleep(p->desc->delay.prepare);...gpiod_direction_output(p->reset_gpio, 1);if (p->desc->delay.reset)panel_simple_sleep(p->desc->delay.reset);gpiod_direction_output(p->reset_gpio, 0);  //由于驱动在控制reset脚时序的时候使用了`gpiod`这类的API//如果在DTS配置了低电平有效,那么这里就会将reset引脚拉高,即取反。if (p->desc->delay.init)panel_simple_sleep(p->desc->delay.init);if (p->desc->init_seq) {if (p->dsi)panel_simple_xfer_dsi_cmd_seq(p, p->desc->init_seq);else if (p->cmd_type == CMD_TYPE_SPI)err = panel_simple_xfer_spi_cmd_seq(p, p->desc->init_seq);if (err)dev_err(panel->dev, "failed to send init cmds seq\n");}if(p->desc->delay.mipi_data){panel_simple_sleep(p->desc->delay.mipi_data);}...
}static int panel_simple_enable(struct drm_panel *panel)
{...if (p->cmd_type == CMD_TYPE_MCU) {err = panel_simple_xfer_mcu_cmd_seq(p, p->desc->init_seq);if (err)dev_err(panel->dev, "failed to send init cmds seq\n");}if (p->desc->delay.enable)panel_simple_sleep(p->desc->delay.enable);if (p->backlight) {p->backlight->props.state &= ~BL_CORE_FBBLANK;p->backlight->props.power = FB_BLANK_UNBLANK;backlight_update_status(p->backlight);}...
}

2.3.2 Display-Timings

display_timings在dts中定义:

    disp_timings0: display-timings {native-mode = <&dsi0_timing0>;dsi0_timing0: timing0 {clock-frequency = <72600000>;//<80000000>;hactive = <800>;//<768>;vactive = <1280>;hsync-len = <14>;   //20, 50,10hback-porch = <26>; //50, 56,10hfront-porch = <32>;//50, 30,180vsync-len = <8>;//4vback-porch = <20>;//4vfront-porch = <80>;//8hsync-active = <0>;vsync-active = <0>;de-active = <0>;pixelclk-active = <0>;};};

相关的参数一般可以在屏的规格书中找到,然后在kernel/drivers/gpu/drm/panel/panel-simple.cpanel_simple_probe中初始化了获取时序的函数。

static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
{...panel->base.funcs = &panel_simple_funcs;...
}
...
static const struct drm_panel_funcs panel_simple_funcs = {.loader_protect = panel_simple_loader_protect,.disable = panel_simple_disable,.unprepare = panel_simple_unprepare,.prepare = panel_simple_prepare,.enable = panel_simple_enable,.get_modes = panel_simple_get_modes,.get_timings = panel_simple_get_timings,
};
...

该函数在kernel/drivers/gpu/drm/panel/panel-simple.c中定义:

static int panel_simple_get_timings(struct drm_panel *panel, unsigned int num_timings, struct display_timing *timings)
{struct panel_simple *p = to_panel_simple(panel);unsigned int i;if (p->desc->num_timings < num_timings)num_timings = p->desc->num_timings;if (timings)for (i = 0; i < num_timings; i++)timings[i] = p->desc->timings[i];return p->desc->num_timings;
}

三、EDP配置

3.1 引脚配置

ROC-RK3568-PC的SDK有EDP的DTS文件:kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-roc-pc-edp_M156X40.dts,从该文件中我们可以看到以下语句:

    edp_panel: edp-panel {compatible = "simple-panel";status = "okay";power-supply = <&vcc3v3_lcd_edp>;enable-gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_HIGH>;//bus-format = <MEDIA_BUS_FMT_RBG888_1X24>;		backlight = <&backlight>;...ports {panel_in_edp: endpoint {remote-endpoint = <&edp_out_panel>;};};};...
};&edp {status = "okay";hpd-gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_HIGH>;force-hpd;ports {edp_out: port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;edp_out_panel: endpoint@0 {reg = <0>;remote-endpoint = <&panel_in_edp>;};};};
};

这里定义了LCD的电源控制引脚:

NAMEGPIOGPIO_ACTIVE
BL_ENGPIO3_C3GPIO_ACTIVE_HIGH
EDP_HPDGPIO0_C2GPIO_ACTIVE_HIGH

3.2 EDP背光配置

因为背光接口是公用的,所以可以参考上述MIPI的配置方法。

4.3.3. EDP显示时序配置
不同于MIPI屏,EDP屏对上下电时序没有那么高的要求,当然还是要看调试屏幕的上下电时序图来配置:

    edp_panel: edp-panel {compatible = "simple-panel";status = "okay";...display-timings {native-mode = <&timing0>;		timing0: timing0 {clock-frequency = <140000000>;hactive = <1920>;vactive = <1080>;hfront-porch = <40>;hsync-len = <40>;hback-porch = <80>;vfront-porch = <16>;vsync-len = <8>;vback-porch = <16>;hsync-active = <0>;vsync-active = <0>;de-active = <0>;pixelclk-active = <0>;};};...};

display-timings同样在kernel/drivers/gpu/drm/panel/panel-simple.c中使用到:

static int panel_simple_get_timings(struct drm_panel *panel, unsigned int num_timings, struct display_timing *timings)
{struct panel_simple *p = to_panel_simple(panel);unsigned int i;if (p->desc->num_timings < num_timings)num_timings = p->desc->num_timings;if (timings)for (i = 0; i < num_timings; i++)timings[i] = p->desc->timings[i];return p->desc->num_timings;
}

相关文章:

[ROC-RK3568-PC] [Firefly-Android] 10min带你了解LCD的使用

&#x1f347; 博主主页&#xff1a; 【Systemcall小酒屋】&#x1f347; 博主追寻&#xff1a;热衷于用简单的案例讲述复杂的技术&#xff0c;“假传万卷书&#xff0c;真传一案例”&#xff0c;这是林群院士说过的一句话&#xff0c;另外“成就是最好的老师”&#xff0c;技术…...

【redis】redis分布式锁

目录一、为什么需要分布式锁二、分布式锁的实现方案三、redis分布式锁3.1 简单实现3.2 成熟的实现一、为什么需要分布式锁 1.在java单机服务中&#xff0c;jvm内部有一个全局的锁监视器&#xff0c;只有一个线程能获取到锁&#xff0c;可以实现线程之间的互斥 2.当有多个java服…...

UEditorPlus v3.0.0 接口请求头参数,插入换行优化,若干问题优化

UEditor是由百度开发的所见即所得的开源富文本编辑器&#xff0c;基于MIT开源协议&#xff0c;该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器&#xff0c;主要做了样式的定制&#xff0c;更符…...

LabVIEW 2015介绍

这里写目录标题LabVIEW 2015安装包LabVIEW 2020安装包Labview2015安装过程1、LabVIEW 2015 的介绍2、LabVIEW 2015 的特点3、LabVIEW 2015 的功能4、LabVIEW 2015 快捷键LabVIEW 2015安装包 链接&#xff1a;https://pan.baidu.com/s/1I1cxtbBkmJbHvDTc5JnOyQ 提取码&#xff1…...

大一被忽悠进了培训班

大家好&#xff0c;我是帅地。 最近我的知识星球开始营业&#xff0c;不少大一大二的小伙伴也是纷纷加入了星球&#xff0c;并且咨询的问题也是五花八门&#xff0c;反正就是&#xff0c;各种迷茫&#xff0c;其中有一个学弟&#xff0c;才大一&#xff0c;就报考培训班&#…...

编写一个存储过程,输入一个日期,判定其距离年底还有多少天

--编写一个存储过程&#xff0c;输入一个日期&#xff0c;判定其距离年底还有多少天 create or replace procedure sp_end(i_date varchar2,o_end out varchar2) is --声明两个变量&#xff0c;v_end存放经过转化的年底日期&#xff0c;v_errm用来存放异常 v_end date; v_errm…...

HTB-Inject

HTB-Inject信息收集开机root信息收集 228080 8080端口如下。 主界面有一个上传图片的功能。 简单测试后发现对上传文件后缀名应该有过滤&#xff0c;只允许jpg后缀名文件上传。将一个内容为”test“的txt文件修改后缀为jpg后上传会出现错误。 验证一下是否存在LFI。 验证一…...

java基础知识——13.类与对象

这篇文章&#xff0c;我们来介绍java中的类与对象 目录 1.面向对象的介绍 2.类的设计与使用 2.1 类和对象 2.1.1 如何定义类 2.2 类的注意事项 3.封装 3.1 private关键字 4.this关键字 5.构造方法 6.标准JavaBean 7.对象内存图 8.成员变量与局部变量 1.面向对象的…...

北邮22信通:(10)第三章 3.2栈的实现

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 上一篇文章&#xff1a; 北邮22信通&#xff1a;&#xff08;9&#xff09;实验1 题目六&#xff1a;模拟内存管理&#xff08;搬运官方代码&#xff09;_青…...

Vue3之使用js实现动画

概述 动画的实现其实不仅可以使用CSS的方式实现&#xff0c;而且还可以使用js的方式实现&#xff0c;二者有啥区别呢&#xff1f;CSS更加注重动画的展现&#xff0c;性能更好&#xff0c;而js的方式性能稍微差点&#xff0c;但是可以在动画执行的每一个过程中做些额外的操作。…...

金三银四,你准备好面试了吗? (附30w字软件测试面试题总结)

不知不觉&#xff0c;已是3月下旬。最近有很多小伙伴都在跟我谈论春招面试的问题&#xff0c;其实对于面试&#xff0c;我也没有太多的经验&#xff0c;只能默默地把之前整理的软件测试面试题分享给Ta。今天就来大致的梳理一下软件测试的面试体系&#xff08;每一部分最后都有相…...

【C语言学习】数组

数组&#xff08;Array&#xff09;就是一些列具有相同类型的数据的集合&#xff0c;这些数据在内存中依次挨着存放&#xff0c;彼此之间没有缝隙。 数组不是C语言的专利&#xff0c;Java、C、C#、JavaScript、PHP 等其他编程语言也有数组。 C语言数组属于构造数据类型。一个…...

ElasticSearch序列 - SpringBoot整合ES:根据指定的 ids 查询

文章目录1. ElasticSearch 根据 ids 查询文档2. SpringBoot整合ES实现 ids 查询1. ElasticSearch 根据 ids 查询文档 ① 索引文档&#xff0c;构造数据 PUT /my_index/_doc/1 {"price":10 }PUT /my_index/_doc/2 {"price":20 }PUT /my_index/_doc/3 {&qu…...

Spark SQL实战(08)-整合Hive

1 整合原理及使用 Apache Spark 是一个快速、可扩展的分布式计算引擎&#xff0c;而 Hive 则是一个数据仓库工具&#xff0c;它提供了数据存储和查询功能。在 Spark 中使用 Hive 可以提高数据处理和查询的效率。 场景 历史原因积累下来的&#xff0c;很多数据原先是采用Hive…...

堆(数据结构系列11)

目录 前言&#xff1a; 1.优先级队列概念 2.堆的概念 3.堆的存储方式 4.堆的创建 5.创建堆的时间复杂度 6.堆的插入和删除 6.1堆的插入 6.2堆的删除 结束语&#xff1a; 前言&#xff1a; 上一次博客中小编主要与大家分享了 二叉树一些相关的知识点和一些练习题&…...

算法训练第四十二天|01背包问题 二维 、01背包问题 一维、416. 分割等和子集

动态规划part0401背包问题 二维01 背包二维dp数组01背包完整c测试代码总结01背包问题 一维一维dp数组&#xff08;滚动数组&#xff09;一维dp01背包完整C测试代码416. 分割等和子集题目描述思路01背包问题总结01背包问题 二维 视频链接&#xff1a;https://www.bilibili.com/…...

Java-如何使用Java将图片和文字拼接在一起(并非是给图片加水印)

之前有遇到一个问题 问题背景&#xff1a;项目中&#xff0c;有一个功能&#xff0c;管理端可以将客户创建的小程序码下载到本地&#xff0c;方便客户将对应门店的小程序码打印出来并张贴到门店&#xff0c;做门店的引流和会员入会。 具体问题&#xff1a;当小程序码的数量较少…...

Metasploit入门到高级【第三章】

来自公粽号&#xff1a;Kali与编程预计更新第一章&#xff1a;Metasploit 简介 Metasploit 是什么Metasploit 的历史和发展Metasploit 的组成部分 第二章&#xff1a;Kali Linux 入门 Kali Linux 简介Kali Linux 安装和配置常用命令和工具介绍 第三章&#xff1a;Metasploi…...

枚举的使用

Java 枚举是一个特殊的类&#xff0c;一般表示一组常量&#xff0c;比如一年的 4 个季节&#xff0c;一个年的 12 个月份&#xff0c;一个星期的 7 天&#xff0c;方向有东南西北等。1 问题如何在类中使用枚举&#xff0c;例如枚举出一年的四个季度&#xff0c;并且通过迭代枚举…...

Python进阶语法

1.1 Python进阶语法 1.1.1 交换变量 一行代码快速交换两个变量&#xff0c;无需创建临时变量。 from icecream import ica 2 b 4 a, b b, a ic(a, b)ic| a: 4, b: 2 1.1.2 链式比较 from icecream import ica 97 if 90 < a < 100:ic(a)ic| a: 97 1.1.3 初始化列表…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...