[Android5.1][RK3288] LCD Mipi 调试方法及问题汇总

2023-11-03

调试流程

1. 设置 dts 中的参数 并 配置管脚

仿造平台的其他 lcd-*-mipi.dtsi 编写 lcd-xxx-mipi.dtsi 后 需要在 主 dts 文件中包含这个 dtsi

#include “lcd-xxx-mipi.dtsi“

先看屏的手册

里面的关键信息有 分辨率(540×960) 接口(2条lanes)

## MIPI Host配置
disp_mipi_init: mipi_dsi_init{
        compatible = "rockchip,mipi_dsi_init";

        /* 是否要在 dtsi 中初始化 1 0 */
        rockchip,screen_init    = <1>;

        /* 要几条数据 lane ,根据原理图和 mipi 规格书*/
        rockchip,dsi_lane       = <2>;

        /* ddr clk 一条 lane 的传输速率 Mbits/s  */
        /* 100 + H_total×V_total×fps×3(一个rgb为3字节)×8(8bits)/lanes  */
        /* 这里的 total 指的是 sync + front + back + active */
        /* 比如 H_total = Hsync + HFP(hfront-proch)  + HBP(hback-porch) + Hactive  */
        rockchip,dsi_hs_clk     = <1000>;

        /* 单mipi 还是双 mipi*/
        rockchip,mipi_dsi_num   = <1>;
};

看原理图,完成管脚的配置

可以看到,我这里只用到了 LCD_RST,没有用到 LCD_EN (是 VCC_LCD),说明是默认使能的,也没有 LCD_CS
所以进行如下配置

## 屏电源控制配置
disp_mipi_power_ctr: mipi_power_ctr {
        compatible = "rockchip,mipi_power_ctr";
        mipi_lcd_rst:mipi_lcd_rst{
                compatible = "rockchip,lcd_rst";
                rockchip,gpios = <&gpio2 GPIO_B7 GPIO_ACTIVE_LOW>;
                rockchip,delay = <100>;
        };
        /*
        // 配置 lcd_en GPIO 哪一路 ,有可能没有 LCD_EN 那么就是 VCC 常供电
        mipi_lcd_en:mipi_lcd_en {
                compatible = "rockchip,lcd_en";
                rockchip,gpios = <&gpio0 GPIO_C1 GPIO_ACTIVE_HIGH>;
                rockchip,delay = <100>;
        };
        */
        //还可能有片选 cs
};

根据屏的规格书 完成 timings 配置
垂直方向的信息:

重要的参数有 垂直同步信号 VFP VBP VS 对应填充到屏参中的 Vfront-proch Vback-proch Vsync-len
同样
水平方向的信息:

要注意的是, HS HBP HFP 虽然最小值是 5,但是不能设置的这么低
因为后面还有两条要求,HBLK = HS + HBP + HFP >= 24 且 HS + HBP > 19
所以最初设置 HS = HBP = HFP = 10

// lcd-xxx-mipi.dtsi 中的 屏参
disp_timings: display-timings {
        native-mode = <&timing0>;
        compatible = "rockchip,display-timings";
        timing0: timing0 {
            screen-type = <SCREEN_MIPI>;        //单mipi SCREEN_MIPI 双mipi SCREEN_DUAL_MIPI
            lvds-format = <LVDS_8BIT_2>;        //不用配置
            out-face    = <OUT_P888>;       //屏的接线格式 
            //配置颜色,可为OUT_P888(24位)、OUT_P666(18位)或者OUT_P565(16位)
            clock-frequency = <120000000>;      //dclk频率,看规格书,或者 H×V×fps
            hactive = <540>;            //水平有效像素
            vactive = <960>;            //垂直有效像素
            hback-porch = <80>;         //水平同步信号
            hfront-porch = <81>;            //水平同步信号
            vback-porch = <21>;
            vfront-porch = <21>;            
            hsync-len = <10>;           //水平同步信号
            vsync-len = <3>;
            hsync-active = <0>;         //hync 极性控制 置 1 反转极性
            vsync-active = <0>;
            de-active = <0>;            //DEN 极性控制
            pixelclk-active = <0>;          //dclk 极性控制
            swap-rb = <0>;              //设 1 反转颜色
            swap-rg = <0>;
            swap-gb = <0>;

2. 背光部分

在 rk3288-tb_8846.dts 中还需要打开 mipi 相关的通道 并 配置背光相关的信息。
首先根据这颗背光 IC 的 datasheet

我们了解到 EN 拉高时背光使能,拉低时背光禁能; FB 接受反馈信号,动态控制背光亮度

我们知道这颗背光芯片有两种调光方式
一是 EN 输入 PWM 信号进行调光
二是 EN 使能后,通过 FB 获得反馈信号进行调光。
根据我们的原理图


BL_EN 是普通的 GPIO ,LCDC_BL 是支持 PWM 输出的管脚,所以得知我们硬件采用的是第二种调光方式

backlight {
        compatible = "pwm-backlight";
        pwms = <&pwm0 0 25000>;     //在这里配置采用的是 pwm0 还是 pwm1
        brightness-levels = <255 254 253 252 251 250 249 248 247 246 245 244 243 242 241 240
             239 238 237 236 235 234 233 232 231 230 229 228 227 226 225 224 223 222 221 220
             219 218 217 216 215 214 213 212 211 210 209 208 207 206 205 204 203 202 201 200
             199 198 197 196 195 194 193 192 191 190 189 188 187 186 185 184 183 182 181 180
             179 178 177 176 175 174 173 172 171 170 169 168 167 166 165 164 163 162 161 160
             159 158 157 156 155 154 153 152 151 150 149 148 147 146 145 144 143 142 141 140
             139 138 137 136 135 134 133 132 131 130 129 128 127 126 125 124 123 122 121 120
             119 118 117 116 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100
             99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70
             69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40
             39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10
             9 8 7 6 5 4 3 2 1 0>;
        default-brightness-level = <200>;
        enable-gpios = <&gpio7 GPIO_A2 GPIO_ACTIVE_HIGH>;   //BL_EN 背光使能管脚
    };

3. LCD 初始化序列 cmds

最后如果有初始化序列的,打开之前的 screen-init = < 1 > ,并且填充初始化序列

## 屏初始化序列
disp_mipi_init_cmds: screen-on-cmds {
        compatible = "rockchip,screen-on-cmds";
        /*rockchip,cmd_debug = <1>;
        rockchip,on-cmds1 { //指的是一条初始化命令
                compatible = "rockchip,on-cmds";
                rockchip,cmd_type = <LPDT>;     //命令是在 low power(LPDT)还是 high speed(HSDT)下发送
                rockchip,dsi_id = <2>;          //选择通过哪个mipi发送 0==》单mipi0  1==》mipi1 2==》双mipi0+1
                rockchip,cmd = <0x05 0x01>;     //初始化命令
                    //第一个字节 DSI 数据类型; 第二个字节为 LCD 的 CMD; 后面为指令内容
                rockchip,cmd_delay = <0>;
        };
        */
};

值得一讲的是 cmd,一般屏厂或者FAE都会给出初始化序列。
比如这里我拿到的是 MTK 平台的 LCD 初始化代码:

data_array[0]=0x00043902;
data_array[1]=0x8983FFB9; 
dsi_set_cmdq(&data_array, 2, 1); 
MDELAY(10);

分析得知
array[0] 中 04 代表要传输的字节数,3902 代表传输的是长包数据
//MTK平台 3900 代表不传值 3905 表示传一个数据 3902 表示传多个数据
array[1] 中的参数全部为传输的参数,而且正确的传参数据为 B9 FF 83 89
所以移植到 RK 平台就是:

rockchip,on-cmds1 {
                            compatible = "rockchip,on-cmds";
                            rockchip,cmd_type = <LPDT>;
                            rockchip,dsi_id = <0>;
                            rockchip,cmd = <0x39 0xB9 0xFF 0x83 0x89>;
                            //0x39 为 DSI 数据类型、  0xB9 为LCD CMD、后面为参数
                            rockchip,cmd_delay = <10>;
}

我们根据 这块 lcd 的 规格书,也能够验证结果初始化命令参数的正确性:

DSI 协议中 ,0x29 和 0x39 区别:在 Mipi 协议中,它俩都表示 长包(Long Packet)数据类型。
但是 Mipi DSI 的 Spec 中写着两者的区别 0x29 属于 Generic long write ,0x39 属于 DCS long write。
DCS 系的读写命令,可带参数,常用于 LCD 初始化参数命令。
Generic 系读写命令,是协议规范外的命令,通常是一些 IC 定制的,只要确保主机和外设同意这些数据格式即可,通常和 DCS 通用。

另外值得一说的是大部分初始化代码的最后一般都是 exit_sleep 和 display_on。

rockchip,on-cmds15 {
                            compatible = "rockchip,on-cmds";
                            rockchip,cmd_type = <LPDT>;
                            rockchip,dsi_id = <0>;
                            rockchip,cmd = <0x05 dcs_exit_sleep_mode>;
                            rockchip,cmd_delay = <120>;
                    };
                    rockchip,on-cmds16 {
                            compatible = "rockchip,on-cmds";
                            rockchip,cmd_type = <LPDT>;
                            rockchip,dsi_id = <0>;
                            rockchip,cmd = <0x05 dcs_set_display_on>;
                            rockchip,cmd_delay = <100>;
                    };

这里 dcs_exit_sleep_mode dcs_set_display_on 在 drivers/video/rockchip/transmitter/mipi_dsi.h 中有定义

#define dcs_set_display_on  0x29
#define dcs_exit_sleep_mode 0x11

所以表示的 0x05 0x11 表示的含义为,短包传输 发送 exit_sleep_mode 命令
这两个命令后的延时*相当重要*!!务必确认好。

4. 打开 config

根据 RK 手册中的要求
make menuconfig
打开三个宏

这里也可以顺手把 LVDS 的相关代码给关掉

5. 检查电压

先不要接上屏,编译完代码烧录后开机。
检查原理图上各个供电管脚的电压(DVDD、IOVDD 是否为 3.3V,VDD_LCDA 是否为 5-10V,VDD_LCDK 是否为 0V),确认电压正常后,关机,上屏,结合 开机log 看能否正常开机。

6. 调试顺序

6.1 背光有没有亮

背光没亮的话确认一下接上屏的时候,量一量 VDD_LCDA 的电压为多少(串联电路大概能到 20V+)
没有就去检查背光电路供电电压和 backlight 相关的配置

6.2 开机 以及 从休眠状态唤醒 都没有显示内容

之所以这样说是因为可能存在 休眠唤醒 能显示,但 开机 无法显示的情况
如果两种情况都没有显示,那么很有可能是 cmds 或者 timing 仍然有问题
1. 用示波器量波形看 DCLKP 的频率为多少,是否为 clock-frequency 中设置的(可能实际的会略低一点)
2. 量 RST 是否有一个 低-高 的变化,没有则是 rst 设置的触发方式可能反了
3. 在 RST 高低高后会开始传输数据,量 lanes 是否有数据输出。抓取数据需要专门的仪器,我们用示波器大致看看有没有数据输出就够了。

我在调试的时候就发现 lane 一直为低电平,没有数据传输,然后采取量 RST 发现唤醒屏后待到屏幕快灭了 RST 才会被拉高。跟代码发现 RK 平台的实现是

!你设置的触发电平
你设置的触发电平

但是我设置的触发电平是 低电平有效 ACTIVE_LOW

!ACTIVE_LOW
ACTIVE_LOW

即先高再低,所以是错的,改为 ACTIVE_HIGH 后正常。
但是虽然填的是 ACTIVE_HIGH ,但是应该还是属于低电平有效的,这里是 RK 平台 driver 的实现有问题。
修改后 lane 有数据传递了。

但是有数据传递仍然怎么样都没有显示。
这时候有极大可能是 cmds 有问题。
下面着重讲一下我 cmds 碰到的问题。

6.3 我碰到的 cmds 问题

我当时拿到 MTK 平台参数的时候,有的参数超过了 32个字节(有个有36个字节,有个有39个字节),完成 dtsi 中 cmds 编写后
烧录,板子跑飞,空指针异常。
发现传递 这个超长 参数的时候有内存溢出情况。
于是跟代码发现 dcs_cmd.cmds 的大小为 int cmds[32],所以擅自想当然的将包拆成了 39 = 28+11,还将其中的延时设置为 0 。
这样当然是不行的。但是一切都是基于这个拆了包的 cmds 来调,走了不少弯路。
后来一切的其他参数都确定没问题了。
于是去联系原厂的工程师,说平台参数大小有限制,咨询拆包是否可行。他们说建议修改 cmds[32] 改成了 cmds[400] 。
修改后发现屏幕终于点亮了。
终于点亮了。
点亮了。

问题集锦

RK 手册中已经有相当一部分很有参考价值的了。
这里的一部分是自己碰到的,有的是查资料时候收集到觉得很有意义的,都放这里了。

1. 我调试中碰到的问题

  1. 在点亮屏后刚开始有开机 logo 闪烁,向右偏移了近半个屏幕的长度,等问题。
    重新确认 clock-frequence 后发现少打了一个 0 。
    修改后解决了 闪烁,大偏移 的问题。
  2. 最初偏移还是有点大,如下图。

    稍微降低 hs_clk ,由 504 降低到 496 解决。
  3. 垂直方向会显示多一点内容,如下图。

    调整 VFP 后解决,将 VFP 增大为 15 。
  4. 下面会有黑边,如下图。

    稍微增大 VBP 后解决,将 VBP 增大为 15。
  5. 开机 android 最左边会被裁剪一部分,如下图。

    增大 HBP 后解决,将 HBP 由 10 增加到 30。
    至此屏幕已完美显示。

2. 其他一些杂散的需要确认的内容

是否有framebuffer輸出,要是改動了display這塊的clk很有可能沒有buffer輸出的,可以通過cat /dev/graphyics/fb0查看有沒有輸出字符。(我是通过google 插件 vysor 直接连接开发板看有没有内容显示,windows 平台也可以用 total control 软件来看)

3. 参数为 8 字节、16字节 传输会异常?错,可以正常传输。

看到一篇文章中说,数据 cmds 为 8 字节 和 16 字节 的时候,写命令和数据的函数要注意变化。
然后在调试的时候发现 如果 参数为这两种情况的时候, 传输模式会自动由 LP 模式 变成 HS 模式。但这只是个意外
跟踪代码后发现,其实是可以正常传输的,我这只是个意外而已:
http://blog.csdn.net/dearsq/article/details/52369879

4. 显示偏移、图像位置偏差

timing 中的参数设置有误。优先确认。
看着图像调节前扫、回扫进行左右上下移动

5. 白屏

随机出现白屏有可能是静电问题,把LCD拿到头发上擦几下,如果很容易出现白屏那肯定就是静电问题了。另外一个在有Backend IC的情况下,也有可能bypass没处理好。
結束開機logo至android動畫出現之間出現閃屏或者閃白光的情況。原因:在這個時間點kernel會會對屏再次初始化,我們可以軟件上屏蔽第一次初始化動作從而解决。

6. 屏在进出睡眠或者显示过程中白屏

喚醒屏幕閃白光問題,說白了是背光早亮了,很有可能是下序列mdelay太久,改小點就沒有這個問題了。根本原因屏幕初始化序列下慢了。
sleep out(0x11)和 display on(0x29)之间需要 mdelay(120ms)左右。

7. 花屏

说明 lcd 初始化成功,但是没有 rgb 刷过来。
timing 中的参数设置有误。优先确认 pclk。
花屏 还可能是总线速度有问题。
开机就花屏最简单的解决方式是,在 Init 结束的地方加一个刷黑屏的功能。也可以在睡眠函数里加延时函数。

8. 屏幕闪烁

  1. pclk 有问题
    在最开始的时候,我的 pclk 漏了一个 0 ,为之前的 1/10 此时就有图像闪烁问题。
  2. proch 有问题
    在调试完后,我尝试将 proch 增加到极限,发现会出现图像闪烁的问题。

9. 屏幕抖动

测时序,延时不足

10. 屏幕闪动

通过调节电压来稳定,一般调节的电压为VRL、VRH、VDV和VCM

11. 唤醒闪屏问题

这是由於每次重新RST下序列過程delay久了導致,适當減少delay時間

12. 屏幕唤醒显示灰色底面

寄存器没有使能外部升压电路

13. 水波纹

通常都是rgb interface polarity導致,需要調整pclk hsync vsync de極性使之符合平台極性

14. 调节对比度

VRL、VRH、VDV和VCM,这些电压也可以用来调节亮暗(对比度)
也可以通过调节Gamma值来实现,要调节的对象为 PRP、PRN、VRP、VRN 等

15. 确认有没有 framebuffer 输出

要是改动了display这块的clk很有可能没有buffer输出的,可以通过cat /dev/graphyics/fb0 查看有没有输出字符
如果有说明是 mipi 还没有调通,如果没有说明是 fb 有问题

16. 图像颜色不正常

可能时钟型号极性反了
可能 VCOM 调节不正常
进行 GAMMA 校正

感谢

这段时间基本上把有些 Mipi 移植和 RK 平台 LCD 移植的文章看遍了。以下文章很有帮助。本文的问题集锦部分有一部分是将以下文章中的内容搜罗过来的:
android lcd調試 高通平台lcd調試深入分析總結(mipi和rgb接口)
firefly rk3288 的 wiki 百科
Mipi DSI 协议介绍
Mipi 调试经验

最后,得感谢这段时间师兄 Baker 和 Nick 的指点。
还有网上两位 RK 刘哥和“llg”和“勇气” 的指点。
收益颇丰。谢谢谢谢!
另外 刘哥 llg 提出了一种方法:不起 android ,直接写 framebuffer 。这样对像素点的直接操作会比对图片的操作更加直观。
暂时还不了解是什么意思,准备今晚下班了去了解一下。
也顺便帮刘哥打个广告:刘哥的站点: http://www.laoliu-soft.net/

[版权声明]本文地址:http://blog.csdn.net/dearsq/article/details/52354593
欢迎转载,转载请著名出处和作者 Younix~谢谢~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Android5.1][RK3288] LCD Mipi 调试方法及问题汇总 的相关文章

  • 20190226-LCD_GUI

    LCD GUI 这里需要先剃度填色 xff0c 然后再显示汉字 xff0c 最后在显示符号和数字 xff0c 否则会被覆盖 xff0c 显示不出来汉字或者数字符号
  • LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)

    阴码 43 逐列 式 43 顺向 43 C51 格式 span class token keyword void span span class token function LCD ShowChar span span class tok
  • ILI9341的使用之【一】TFT-LCD原理(转载)

    近期开始研究手上的LCD屏的使用 该LCD屏使用了ILI9341的IC做为驱动 因此边研究边留下记录 与上一个时钟系列类似 xff0c 想必这又是一个大工程 xff0c 因为ILI9341的数据手册就有200多页 xff0c 从硬件原理 x
  • LCD液晶屏没有点亮,为什么会自动出现笔段、走线、乱码等现象?

    一般LCD段码液晶屏在不触碰的情况下 xff0c 是不会产生这种自动出现笔段 走线 乱码等现象 只有在物体或手碰到液晶屏的时候才会或多或少的出现这种问题 xff0c 而造成这种现象的是 静电 静电是一种处于静止状态的电荷 在干燥和多风的秋天
  • IMX6ULL + SPI LCD(驱动IC ILI9341)显示简单的QT界面

    1 硬件 xff1a 使用正点原子的IMX6ULL Linux开发板 开发板底板原理图版本 xff1a V2 1 核心板原理图版本 xff1a V1 6 LCD xff1a MSP2402 IC ILI9341 2 查找可用引脚 开发板上引
  • MIPI 打怪升级之DCS篇

    目录 1 Overview2 Display Architectures2 1 The Type 1 Display Architecture 3 Power Level3 1 Type 1 Display Architecture Pow
  • Linux-LCD驱动实现

    一 帧缓冲设备驱动在Linux子系统中的结构 xff1a 二 帧缓冲相关的重要数据结构 从帧缓冲设备驱动程序结构 看 xff0c 该驱动主要跟fb info结构体有关 xff0c 该结构体记录了帧缓冲设备的全部信息 xff0c 包括设备的设
  • MIPI CSI介绍

    文章目录 1 概述2 MIPI接口的演变2 1 CSI 12 2 CSI 22 3 CSI 32 4 更多关于CSI 3 其他3 1 为什么用MIPI CSI 2代替USB 3 2 MIPI CSI 2的性能亮点3 3 MIPI相机 它是如
  • BH1750 传感器实战教学 —— 驱动移植篇

    前言 上一篇 BH1750 的实战教学我们说明的实际应用中传感器的硬件设计 BH1750 传感器实战教学 硬件设计篇 我们提到过在本次使用的芯片为 51 内核 I2C 通讯驱动实现与 STM32 上还是有很大区别的 对于我们来说 已经掌握了
  • MSP430 LCD控制器解释

    CC430F613x的LCD控制器最多能控制160段 The LCD B controller features are Display memory Automatic signal generation Configurable fra
  • 在rk平台设置关于v4l2-ctrl -l 打印不出结果情况

    关于v4l2 ctrl l 不出的现象 本次项目使用的rk3588J 搭载5 10版本内核 在调试通摄像头之后 想通过设置曝光 增益等功能 使用v4l2 ctrl l 命令致使没有任何打印 最后使用 v4l2 ctrl l d dev v4
  • MIPI信号简单介绍

    1 MIPI介绍 MIPI是由ARM Nokia ST IT等公司成立的一个联盟 旨在把手机内部的接口如存储接口 显示接口 射频 基带接口等标准化 减少兼容性问题并简化设计 MIPI联盟通过不同的工作组 分别定义一系列手机内部的接口标准 如
  • linux LCD驱动实验

    文章目录 一 linux下LCD驱动解析 1 Framebuffer设备 2 LCD驱动解析 二 硬件原理图分析 三 LCD驱动程序编写 1 LCD 屏幕 IO 配置 2 LCD 屏幕参数节点信息修改 3 LCD 屏幕背光节点信息 四 运行
  • MIPI入门——D-PHY介绍(二)

    前面的文章中提到了 MIPI D PHY协议中规定了两种模式 LP模式和HS模式 其中HS模式只在高速数据传输中使用 而LP模式则同时包含控制模式 Control Mode 低功耗数据传输模式 LPDT 和极低功耗模式 ULPS 为了方便描
  • MIPI入门——DSI介绍(二)

    这一篇来简单的介绍一下MIPI DSI Video Mode的三种操作模式 Non Busrt Mode with Sync Pluses Non Burst Mode with Sync Events Burst Mode 其中Non B
  • LCD(五)Backlight背光子系统

    一 Backlight背光子系统概述 LCD的背光原理主要是由核心板的一根引脚控制背光电源 一根PWM引脚控制背光亮度组成 应用程序可以通过改变PWM的频率达到改变背光亮度的目的 Backlight背光子系统构建过程结构关系图 黑色加粗部分
  • 我所理解的DRM显示框架

    什么是DRM DRM全称是DirectRenderingManager 是linux主流的一种显示框架 支持多图层合成 为用户图层提供统一的API libdrm 来访问GPU 实现统一管理 它是为了解决多个程序对video card访问协同
  • 基于STM32F407的摄像头(不带FIFO的OV7670)图像采集及LCD显示实验-笔记整理

    硬件说明 STM32F4开发板 stm32f4系列的芯片处理的能力可以说非常强大了的 而且内部还自带有数字摄像头接口 DCMI 可以说stm32f407的核心板和不带FIFO的摄像头模块OV7670简直就是绝配 我手上的这块张这个样子 图片
  • HT1621B液晶驱动(附电路图)

    最近做了一个项目用到了HT1621 电路图 datasheet code HT1621B datasheet include ht1621 h void ht1621 send high order data UCHAR data UCHA
  • Raspberry Pi上设置I2C LCD

    在本教程中 我将向您展示使用I2C设置LCD所需的一切 连接LCD I2C也被称为两线接口 因为它仅使用两根线来发送和接收数据 实际上 如果算上Vcc和地线 则是4线 但是电源始终可以来自其他来源 连接启用I2C的LCD 将LCD与I2C背

随机推荐

  • 中断管理基础学习笔记 - 6. 软中断

    目录 1 前言 2 软中断概述 软中断类型 软中断数据结构 3 注册软中断 4 触发软中断 raise softirq raise softirq irqoff 5 执行软中断 中断返回 ksoftirqd local bh enable
  • 在windows环境下使用wget

    众所周知呢wget这个工具是Linux Unix下才能使用的 但是本人公司的电脑上没有这两个系统 产品经理又硬性要求 所以查百度 问朋友终于搞定了 wget在windows的环境下使用原来以前都有前辈做到了 这里是自己做下笔记 以方便自己以
  • telbot负载均衡设置

    telbot负载均衡设置 概述 golang 横向扩展电报机器人 采用webhook方式 nginx做负载均衡 这样就可以分担请求 减小单个服务器的负担 配置方式 负载端 package main import tele gopkg in
  • idea eclipse 快捷键全局搜索替换代码 修改包名

    全局搜索替换 选中项目右击 点击Replace in files 在文件中替换 输入查找 替换的内容 replaceAll 替换所有 全局搜索查找代码Ctrl H File mask 选择文件类型 可以更精确查找 文件查找Ctrl Shif
  • STM32+LZMA的移植经历

    连续一天加一个晚上 查资料 发现无解 压缩不可能在STM32上进行的 因为代码中那个内存分配的结构体占内存太大了 解压是可以实现的 因此这个算法在STM32上也是有一些作用 在某些场合可以在PC机进行压缩存入ARM中 然后ARM解压 比如某
  • Sql Server判断数据库、表、存储过程、函数是否存在

    判断数据库是否存在 if exists select from sys databases where name 数据库名 drop database 数据库名 判断表是否存在 if exists select from sysobject
  • 【无标题】vxworks ARM Pl330DMA 数据传输指令流创建

    pl330DmaChanMicroCodeCreate create micro code for dma transfer This routine create micro code for dma transfer RETURNS O
  • Linux chromium 源码下载及编译

    1 Chromium Souce Code Download 1 1 download source code 1 gt 方法一 获得所有发布tag的信息 git fetch tags 根据37 0 2062 103版本建立一个你自己的分支
  • 实现一款高可用的 TCP 数据传输服务器(Java版)

    1 netty能做什么 首先netty是一款高性能 封装性良好且灵活 基于NIO 真 非阻塞IO 的开源框架 可以用来手写web服务器 TCP服务器等 支持的协议丰富 如 常用的HTTP HTTPS WEBSOCKET 并且提供的大量的方法
  • STM32 之五 Core Coupled Memory(CCM)内存

    写在前面 今天在搞STM32F4时 用到了一部分特殊内存 CCM 搜了搜网上没多少介绍 索性自己查手册 某些芯片没有CCM 基本架构 废话少说 先看看这块内存特殊在哪里 官方的基本架构说明如下 The main system consist
  • VSCode 菜单栏不见了,该怎么办

    问题描述 某一天 自己独自一人使用VSCode写代码正嗨的时候 不晓得按到哪个快捷键了 导致菜单栏不见了 这下可慌了 以前从未遇到过这样的事情 界面如下 问题解决办法 经过各种尝试 终于找到了 解决办法 先将解决办法贴在下面 第一步 使用快
  • 华为OD机试 - 阿里巴巴找黄金宝箱(III) (Java & JS & Python)

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上 无意中发现了强盗集团的藏宝地 藏宝地有编号从0 N的箱子 每个箱子上面贴有一个数字 阿里巴巴念出一个咒语数字 查看宝箱是否存在两个不同箱子 这两个箱子上贴的数字相同 同时这两个箱了的编号之差的
  • Java小练习01

    猜数字0 9 package day2 import java util Random import java util Scanner public class day2 4 public static void main String
  • python中函数和属性的区别

    函数 有括号 属性 没有括号
  • 二维码Data Matrix编码、解码使用举例

    二维码Data Matrix的介绍见 http blog csdn net fengbingchun article details 44279967 这里简单写了个生成二维码和对二维码进行识别的测试例子 如下 int test data
  • 服务器要如何提高性能

    服务器要如何提高性能 一 将服务器虚拟化 如果同期拥有多个项目 增加额外服务器会显得浪费 成本费用也会大幅度上升 这时不妨通过技术将其划分成多个虚拟空间 而每个空间又可以使用不同操作系统 运行不同应用程序 使得符合项目要求 这种方式通常能增
  • Java 多线程 线程8锁(含示例代码)

    以下内容根据视频https www bilibili com video BV1vE411D7KE p 6学习整理 线程8锁 目录 1 标准访问 2 线程休眠 3 新增普通方法 4 两个对象调用两个线程 5 一个对象调用两个静态同步方法 6
  • Unity中加入虚拟按钮不可见

    忙活了一个多小时 按钮老是看不到 调整了半天按钮坐标 最后发现首先将主角 first person control 的x y轴坐标调整到 0 0 Z轴坐标无所谓 再将按钮坐标调整到 0 0 就会在屏幕出现按钮了 此时再随意调整主角坐标 按钮
  • Android OTA 相关工具(八) 使用 lpadd 添加镜像到 super.img

    文章目录 1 lpadd 的编译 2 lpadd 的帮助信息 3 lpadd 的用法 3 1 准备工作 empty 的 super 设备镜像 raw 格式的 super 设备镜像 sparse 格式的 super 设备镜像 3 1 lpad
  • [Android5.1][RK3288] LCD Mipi 调试方法及问题汇总

    调试流程 设置 dts 中的参数 并 配置管脚 背光部分 LCD 初始化序列 cmds 打开 config 检查电压 调试顺序 1 背光有没有亮 2 开机 以及 从休眠状态唤醒 都没有显示内容 3 我碰到的 cmds 问题 问题集锦 我调试