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

RK3566 MIPI屏调试记录

文章目录

  • 1. 前言
  • 2. 环境介绍
  • 3. 思路介绍
  • 4. 确认要修改的设备树文件
  • 5. 设备树中修改关键引脚
    • 5.1. 添加dsi0节点
    • 5.2. 修改屏幕背光引脚
    • 5.3. 添加屏幕复位引脚
    • 5.4. 添加屏幕使能引脚
  • 6. 修改屏幕timing参数
  • 7. 修改上下电时序
  • 8. 修改初始化序列和反初始化序列
  • 9. 显示路由配置
  • 10. 最终的设备树文件
  • 11. 调试
  • 12. 总结

1. 前言

最近接触RK3566,同时也是第一次调试MIPI屏,本文主要记录,从拿到RK3566原厂SDK后到点亮MIPI屏的过程。

2. 环境介绍

硬件:野火鲁班猫1开发板(RK3566)、野火5.5寸MIPI屏
软件:原厂RK3566 SDK

3. 思路介绍

本文不仅分享点屏的过程,顺便分享当遇到一个新平台时,又应该做哪些准备?
其实在Linux中,想把一块屏幕点亮(无论是MIPI、RGB、LVDS),无非都是改改设备树,一般是不需要改驱动的。那第一个问题来了,既然要改设备树,那具体改哪个设备树文件?里面的参数怎么去改?改完之后怎么编译及如何验证?这些问题就是去熟悉新平台的SDK时,要做的准备工作。
对于MIPI屏而言,在调试层面上来看,只是比别的接口类型的屏幕多了一些调试参数,如初始化序列、反初始化序列,这部分参数要向屏幕厂商获取。
所以调试思路总结如下:
1、确认要修改的设备树文件;
2、设备树中修改关键引脚(背光脚、复位脚、使能脚);
3、修改屏幕timing时序
4、修改上下电时序
5、修改初始化序列和反初始化序列;
6、显示路由配置

4. 确认要修改的设备树文件

在SDK根目录执行./build.sh lunch选择板级配置时,会列出如下选择:
image.png
各配置单的说明如下表:
image.png
这里我选择的是rockchip_rk3566_evb2_lp4x_v10_defconfig,该配置文件的内容如下:

# <SDK>/device/rockchip/rk3566_rk3568/rockchip_rk3566_evb2_lp4x_v10_defconfigRK_KERNEL_DTS_NAME="rk3566-evb2-lp4x-v10-linux"
RK_PARAMETER="parameter-buildroot-fit.txt"
RK_USE_FIT_IMG=y

可以看到,这里写出了编译时所使用的设备树文件为:rk3566-evb2-lp4x-v10-linux.dts
但是打开这个设备树文件一看,什么东西都没有:
image.png
这个设备树文件应该是RK留出来给用户修改用的,后续MIPI屏的适配,主要都是在这个设备树作修改。其它设备树节点的定义都在*.dtsi中。这个设备树文件最后总共会包含4个*.dtsi,分别是:rk3566-evb2-lp4x-v10.dtsirk3566.dtsirk3568.dtsirk3568-evb.dtsi

5. 设备树中修改关键引脚

5.1. 添加dsi0节点

RK3566有两个MIPI-DSI接口,鲁班猫1开发板上的MIPI接口使用的是MIPI-DSI0,那就复制rk3568-evb.dtsi中的dsi0节点到rk3566-evb2-lp4x-v10-linux.dts中,以备后续的修改。
同时先修改status属性为okay:
image.png

5.2. 修改屏幕背光引脚

背光用的是PWM0_M1,而原厂默认用的是PWM4。
image.png
自行添加backlight节点,修改pwms = <&pwm0 0 50000 0>:
image.png
继续自行添加pwm0节点,使能pwm0并修改pinctrl-0为pwm0m1:
image.png
至此,关于背光部分修改结束。

5.3. 添加屏幕复位引脚

根据原理图可以得出复位引脚为GPIO3_A4:
image.png
原本的dsi0节点没有描述复位引脚,所以这里自行添加复位引脚:
image.png

5.4. 添加屏幕使能引脚

根据原理图可以得出使能引脚为GPIO0_C0:
image.png
原本的dsi0节点没有描述使能引脚,所以这里自行添加使能引脚。但在最后的测试中,屏幕一直点不亮,对比野火已经适配好的设备树发现,这里的enable-gpios并不起作用,同时还需添加power-supply属性,这应该是屏幕电源相关的控制:
image.png
同时在rk3568-evb.dtsi中添加mipi_dsi0_power属性和在pinctrl节点下添加mipi_dsi0_pwr_en引脚:image.png
image.png

6. 修改屏幕timing参数

修改dsi0节点下的屏幕timing参数,这部分参考规格书或直接向屏厂咨询:
image.png

# 分辨率fps = 60
其中clock-frequency = (hactive+hsync+hbp+hfp) * (vactive+vsync+vbp+vfp) * fps

7. 修改上下电时序

MIPI屏的上下电时序通常都在规格书的Power on/off sequence章节中:
image.png

8. 修改初始化序列和反初始化序列

MIPI上下电后需要发送初始化或退出指令才能使之正常工作,我们需要向屏幕厂商获得所谓的初始化序列,如下图只是一部分:
image.png
图中的是初始化代码,不是初始化序列,我们需要将初始化代码转换成初始化序列后填入设备树中。
这些初始化代码可以总结出三个指令:SET_GENERIC、W_D、delay_ms,不同厂商呈现出的代码可能不同,但实际是一个意思。
SET_GENERIC:写命令
W_D:写数据
delay_ms:毫秒延时
了解了代码的基本构成后,如何将这些初始化代码转换成初始化序列呢?
首先初始化序列的格式如下:

命令类型 + 延时数量 + 数据长度 + 数据

转换可以分三个步骤:
1、确认数据的个数;
2、根据数据的个数确定命令类型;
3、确定延时时间;

现在以下图为例将初始化代码转换成初始化序列:
image.png
1、有几个W_D(),就代表数据个数有几个,这里的数据个数为4;
2、命令类型一共有三种(0x05、0x15、0x39):
0x05: 单字节数据 (DCS Short Write, no parameters)
0x15: 双字节数据 (DCS Short Write, 1 parameter)
0x39: 多字节数据 (DCS Long Write, n parameters n > 2)
这个例子中,数据个数超过了两个,所以命令类型为0x39;
3、这里没有延时时间,所以延时时间为0x00
所以最后的初始化序列为:

39 00 04 B9 FF 83 99

再举一个双字节数据的例子:
image.png
1、有几个W_D(),就代表数据个数有几个,这里的数据个数为2;
2、命令类型一共有三种(0x05、0x15、0x39):
0x05: 单字节数据 (DCS Short Write, no parameters)
0x15: 双字节数据 (DCS Short Write, 1 parameter)
0x39: 多字节数据 (DCS Long Write, n parameters n > 2)
这个例子中,数据个数为两个,所以命令类型为0x15;
3、这里没有延时时间,所以延时时间为0x00
所以最后的初始化序列为:

15 00 02 D2 77

再举一个有延时的例子:
image.png
1、有几个W_D(),就代表数据个数有几个,这里的数据个数为1;
2、命令类型一共有三种(0x05、0x15、0x39):
0x05: 单字节数据 (DCS Short Write, no parameters)
0x15: 双字节数据 (DCS Short Write, 1 parameter)
0x39: 多字节数据 (DCS Long Write, n parameters n > 2)
这个例子中,数据个数为1个,所以命令类型为0x05;
3、这里的延时时间为200ms,需要转为16进制,转换后为0xC8;
所以最后的初始化序列为:

05 C8 01 11

了解了转换方法后,将所有初始化代码转换成初始化序列,这个过程需要耐心。最后填到设备树dsi0节点的panel-init-sequence属性中:
image.png
反初始化序列也是如此:
image.png

9. 显示路由配置

Rockchip平台的LCD Controller称为VOP(Video Output Processor),芯片中一般集
成1~2个VOP。只有支持两个VOP的芯片,才能支持双屏异显。RK3566不支持双屏异显。
自行在设备树中添加关于dsi的相关配置:
image.png
route_dsi0:打开logo显示,指定VOP为vp0
video_phy0:使能phy0
dsi0_in_vp0:VOP Rounting,使能vp0
dsi0_in_vp1:VOP Rounting,关闭vp1
同时关闭hdmi的相关配置:
image.png

10. 最终的设备树文件

这里给出最终修改后的设备树文件作参考:

# rk3566-evb2-lp4x-v10-linux.dts// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/** Copyright (c) 2020 Rockchip Electronics Co., Ltd.**/#include "rk3566-evb2-lp4x-v10.dtsi"
#include "rk3568-linux.dtsi"
#include <dt-bindings/display/rockchip_vop.h>&vp0 {cursor-win-id = <ROCKCHIP_VOP2_CLUSTER0>;
};// 电源域配置,和本次调试MIPI屏无关
&pmu_io_domains {status = "okay";pmuio2-supply = <&vcc3v3_pmu>;vccio1-supply = <&vccio_acodec>;vccio3-supply = <&vccio_sd>;vccio4-supply = <&vcc_3v3>;vccio5-supply = <&vcc_3v3>;vccio6-supply = <&vcc_1v8>;vccio7-supply = <&vcc_3v3>;
};// dsi Host
&dsi0 {status = "okay";#address-cells = <1>;#size-cells = <0>;dsi0_panel: panel@0 {compatible = "simple-panel-dsi";reg = <0>;backlight = <&backlight>;reset-gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_LOW>;power-supply = <&mipi_dsi0_power>;//enable-gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_HIGH>;enable-delay-ms = <35>;prepare-delay-ms = <6>;reset-delay-ms = <0>;init-delay-ms = <20>;unprepare-delay-ms = <0>;disable-delay-ms = <20>;size,width = <74>;size,height = <133>;dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;dsi,format = <MIPI_DSI_FMT_RGB888>;dsi,lanes  = <4>;panel-init-sequence = [39 00 04 B9 FF 83 9915 00 02 D2 7739 00 10 B1 02 04 74 94 01 32 33 11 11 AB 4D 56 73 02 0239 00 10 B2 00 80 80 AE 05 07 5A 11 00 00 10 1E 70 03 D415 00 02 36 0239 00 2D B4 00 FF 02 C0 02 C0 00 00 08 00 04 06 00 32 04 0A 08 21 03 01 00 0F B8 8B 02 C0 02 C0 00 00 08 00 04 06 00 32 04 0A 08 01 00 0F B8 0139 05 22 D3 00 00 00 00 00 00 06 00 00 10 04 00 04 00 00 00 00 00 00 00 00 00 00 01 00 05 05 07 00 00 00 05 4039 05 21 D5 18 18 19 19 18 18 21 20 01 00 07 06 05 04 03 02 18 18 18 18 18 18 2F 2F 30 30 31 31 18 18 18 1839 05 21 D6 18 18 19 19 40 40 20 21 06 07 00 01 02 03 04 05 40 40 40 40 40 40 2F 2F 30 30 31 31 40 40 40 4039 00 11 D8 A2 AA 02 A0 A2 A8 02 A0 B0 00 00 00 B0 00 00 0015 00 02 BD 0139 00 11 D8 B0 00 00 00 B0 00 00 00 E2 AA 03 F0 E2 AA 03 F015 00 02 BD 0239 00 09 D8 E2 AA 03 F0 E2 AA 03 F015 00 02 BD 0039 00 03 B6 8D 8D39 05 37 E0 00 0E 19 13 2E 39 48 44 4D 57 5F 66 6C 76 7F 85 8A 95 9A A4 9B AB B0 5C 58 64 77 00 0E 19 13 2E 39 48 44 4D 57 5F 66 6C 76 7F 85 8A 95 9A A4 9B AB B0 5C 58 64 7705 C8 01 1105 C8 01 29];panel-exit-sequence = [05 78 01 2805 00 01 10];disp_timings0: display-timings {native-mode = <&dsi0_timing0>;dsi0_timing0: timing0 {clock-frequency = <126884880>;hactive = <1080>;		//vactive = <1920>;		//hfront-porch = <5>;		//hsync-len = <5>;		//hback-porch = <5>;		//vfront-porch = <2>;		//vsync-len = <2>;		//vback-porch = <2>;		//hsync-active = <0>;vsync-active = <0>;de-active = <0>;pixelclk-active = <0>;};};ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;panel_in_dsi: endpoint {remote-endpoint = <&dsi_out_panel>;};};};};ports {#address-cells = <1>;#size-cells = <0>;port@1 {reg = <1>;dsi_out_panel: endpoint {remote-endpoint = <&panel_in_dsi>;};};};
};// backlight
&backlight {pwms = <&pwm0 0 50000 0>;
};// backlight
&pwm0 {status = "okay";pinctrl-0 = <&pwm0m1_pins>;
};// dsi logo
&route_dsi0 {status = "okay";connect = <&vp0_out_dsi0>;
};// dsi phy
&video_phy0 {status = "okay";
};// dsi VOP Routing
&dsi0_in_vp0 {status = "okay";
};// dsi VOP Routing
&dsi0_in_vp1 {status = "disabled";
};// hdmi logo
&route_hdmi {status = "disabled";
};// hdmi VOP Routing
&hdmi_in_vp0 {status = "disabled";
};// hdmi VOP Routing
&hdmi_in_vp1 {status = "disabled";
};// hdmi Host
&hdmi {status = "disabled";
};

11. 调试

编译设备树:

./build.sh kernel

打包:

./build.sh firware

更新镜像,如果成功的话,在启动过程中会显示RK的logo,最后会启动一个应用程序:
79200a8e-4209-4436-b53a-cdfff1d3daed.jpg

12. 总结

初次接触RK平台和MIPI调试,以上描述存在个人理解,如有错误欢迎指正点评!
参考文章:LKD3568、RK3399 Linux-SDK mipi屏幕驱动及调试

相关文章:

RK3566 MIPI屏调试记录

文章目录 1. 前言2. 环境介绍3. 思路介绍4. 确认要修改的设备树文件5. 设备树中修改关键引脚5.1. 添加dsi0节点5.2. 修改屏幕背光引脚5.3. 添加屏幕复位引脚5.4. 添加屏幕使能引脚 6. 修改屏幕timing参数7. 修改上下电时序8. 修改初始化序列和反初始化序列9. 显示路由配置10. 最…...

爬虫数据模拟真实设备请求头User-Agent生成(fake_useragent:一个超强的Python库)

在Python开发中&#xff0c;处理HTTP请求时经常需要模拟不同的用户代理&#xff08;User-Agent&#xff09;来绕过网站的反爬虫机制或进行兼容性测试。fake_useragent正是这样一个强大的Python库&#xff0c;它能够生成随机且多样化的用户代理字符串&#xff0c;让你的请求看起…...

【教育宝-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

3.达梦数据库基础运维管理

文章目录 前言一、基础数据库管理权限角色管理1.1 DM 系统管理员的类型1.2 角色责则分类 DM 数据库2.1 数据库评估2.2 状态和模式 参考内容 前言 本篇博客为上一篇博客的进阶版&#xff0c;主要针对常规达梦数据库的基本管理上面 一、基础数据库管理 权限角色管理 1.1 DM 系…...

【Linux】【系统纪元】Linux起源与环境安装

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C游记》《进击的C》《Linux迷航》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 一、Linux的起源1.1 计算机硬件1.2 计算机软件 二、Linux的环境安装2.1 安装方式2.2 安装版本2.3 安装过程2.4 远程…...

Android笔试面试题AI答之Activity(9)

文章目录 1.如何在Application中获取当前Activity实例 &#xff1f;方法一&#xff1a;使用全局变量或单例方法二&#xff1a;使用LocalBroadcastManager或EventBus方法三&#xff1a;通过Fragment方法四&#xff1a;使用Service和Intent注意事项 2.Activity A跳转Activity B&a…...

什么是嵌入式

1、什么是嵌入式 对专用设备的控制&#xff0c;把不需要的功能能够裁剪、删除&#xff0c;适配于专用设备&#xff0c;就叫做嵌入式&#xff08;也叫做嵌入式系统&#xff09; 嵌入式系统定义&#xff1a;用于控制、监视或者辅助机器和设备的运行 一个嵌入式系统由硬件和软件…...

SAM 2:Segment Anything in Images and Videos 论文详解

SAM 2:Segment Anything in Images and Videos 文章目录 SAM 2:Segment Anything in Images and Videos摘要1 Introduction具体分析 2 Related work具体分析&#xff1a; 3 任务&#xff1a;可提示的视觉分割4 模型具体分析具体分析 5 数据5.1 Data engine5.2 SA - V数据集 6 Z…...

PYTHON专题-(10)基操之我要玩并发

什么是并发&#xff1f; 并发指的是两个或多个事件在同一时间间隔内发生。在计算机科学中&#xff0c;并发通常指的是一个程序同时执行多个独立的任务。这些任务可以同时进行&#xff0c;而不会相互干扰或阻塞彼此。并发可以提高程序的执行效率和资源利用率&#xff0c;但也需要…...

双指针实现删除字符串中的所有相邻重复项

class Solution:def removeDuplicates(self, s: str) -> str:res list(s)slow fast 0length len(res)while fast < length:# 如果一样直接换&#xff0c;不一样会把后面的填在slow的位置res[slow] res[fast]# 如果发现和前一个一样&#xff0c;就退一格指针if slow …...

vue(vue2和vue3)项目打包去除console.log

1.Vue2去除 module.exports { configureWebpack: (config) > {// 取消console打印config.optimization.minimizer[0].options.terserOptions.compress.drop_console truereturn {name: "项目名称",resolve: {alias: {"": resolve("src")}}…...

Visual Studio 2022社区版、专业版、企业版功能对比表

https://visualstudio.microsoft.com/zh-hans/vs/compare/...

Codeforces 888 div3 A-G

A. Escalator Conversations 分析 二者身高差为k的倍数且不超过m-1倍&#xff0c;身高差不能为0&#xff08;即不能在同一个阶梯&#xff09; C代码 #include<iostream> using namespace std; void solve(){int n,m,k,H,ans0;cin>>n>>m>>k>>H;…...

IDEA如何去掉编辑框右侧的竖线

打开 IntelliJ Idea 软件 依次找到 File—>Settings—>Editor—>General—>Appearance 去掉勾选 Show hard wrap and visual guides (configured in Code Style options)...

3DCoat v2023 激活版下载与安装教程 (数字雕刻程序)

前言 3DCoat 是一款数字雕塑软件&#xff0c;由乌克兰开发。该软件专注于游戏模型的细节设计&#xff0c;集三维模型实时纹理绘制和细节雕刻功能为一身&#xff0c;可以加速细节设计流程&#xff0c;在更短的时间内创造出更多的内容。 一、下载地址 下载链接&#xff1a;分享…...

【Unity/XLua】xlua自带教程示例分析(一)——打印Hello world

第一步 创建Monobehavior脚本 public class Helloworld : MonoBehaviour {void Start(){} }第二步 在类中或Start函数中创建Lua虚拟机环境 LuaEnv luaenv new LuaEnv();第三步 使用LuaEnv的DoString方法直接运行字符串存储的lua语句&#xff08;字符串前使用可强制不进行转义…...

虚拟机(VMware16)安装rocky9.2详细过程,附镜像下载链接

rocky官方站点 链接: 官方站点 rocky9.2镜像下载路径 链接: Rocky-x86_64-dvd.iso 打开虚拟机&#xff0c;选择新建虚拟机 新建虚拟机 选择典型 由于VMware16没有rocky的版本&#xff0c;所以我们这里选择其他liunx 5.x 内核 64位 因为rocky9默认内核版本就是5开头的&#xf…...

C语言新手小白详细教程(6)函数

希望文章能够给到初学的你一些启发&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏支持一下笔者吧&#xff5e; 阅读指南&#xff1a; 开篇说明为什么要使用函数&#xff1f;1.定义一个函数2.调用函数3.定义函数详解 开篇说明 截止目前&#xff0c;我们已…...

力扣1488.避免洪水泛滥

力扣1488.避免洪水泛滥 贪心 二分 将所有晴天存入集合用哈希表存每次池子上一次下雨的日期当下雨并且池子满了时&#xff0c;二分找到上一次下雨之后最近的晴天 class Solution {unordered_map<int,int> mp;public:vector<int> avoidFlood(vector<int>&a…...

System类、BigDecimal类、Calendar类 用法详解

System类 System 类是Java中的一个核心类&#xff0c;提供了访问与系统相关的一些属性和方法。它包含了一些静态字段和静态方法&#xff0c;用于获取系统的标准输入、标准输出、标准错误流&#xff0c;以及加载动态链接库和系统属性等功能。 常见方法&#xff1a; public stat…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

解析“道作为序位生成器”的核心原理

解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制&#xff0c;重点解析"道作为序位生成器"的核心原理与实现框架&#xff1a; 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...

【java】【服务器】线程上下文丢失 是指什么

目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失&#xff1f; 直观示例说明 为什么上下文如此重要&#xff1f; 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程&#xff0c;代码应该如何实现 推荐方案&#xff1a;使用 ManagedE…...