nRF52笔记(26)QSPI接口液晶显示屏

news/2024/5/6 0:44:40/文章来源:https://blog.csdn.net/zhi_Alanwu/article/details/128127421

1 平台条件

硬件:nrf52840
软件:sdk17.0

2 QSPI概述

QSPI 外设支持使用 SPI 与外部闪存设备进行通信

此处列出了 QSPI 外设的主要特性:
• 单/双/四通道 SPI 输入/输出
• 2–32 MHz 可配置时钟频率
• 从/到外部闪存的单字读/写访问
• 用于块读写传输的 EasyDMA
• 高达 16 MB/秒的 EasyDMA 读取速率
• 就地执行 (XIP),用于直接从外部闪存执行程序
在这里插入图片描述
在 Nordic nRF52/nRF53 系列上,QSPI 可以支持两种不同的模式。

Flash / XIP操作(需要遵循flash协议)
发送自定义指令(限制使用QSPI上的1-wire发送数据)。

在指令集上,它支持与外部闪存设备的操作码。

在这里插入图片描述

1.1 用于 LCD 的 QSPI 接口

基本上,QSPI 接口有 6 个 GPIO 引脚。
在这里插入图片描述
使用屏幕: hannstar 360×360 with GalaxyCore Controller resolution for testing.

2 代码设置

2.1 初始化

初始化 QSPI 模块
将所有 6 个 GPIO 引脚配置为高驱动输出。

#define LCD_QSPI_RESET_PIN NRF_GPIO_PIN_MAP(0,27)
#define LCD_QSPI_CSN_PIN   NRF_GPIO_PIN_MAP(0,26)
#define LCD_QSPI_SCK_PIN   NRF_GPIO_PIN_MAP(0,02)
#define LCD_QSPI_IO0_PIN   NRF_GPIO_PIN_MAP(1,15)
#define LCD_QSPI_IO1_PIN   NRF_GPIO_PIN_MAP(1,14)
#define LCD_QSPI_IO2_PIN   NRF_GPIO_PIN_MAP(1,13)
#define LCD_QSPI_IO3_PIN   NRF_GPIO_PIN_MAP(1,12)static void config_qspi_pin_high_drive(void)
{nrf_gpio_cfg(LCD_QSPI_SCK_PIN,NRF_GPIO_PIN_DIR_INPUT,NRF_GPIO_PIN_INPUT_CONNECT,NRF_GPIO_PIN_PULLDOWN,NRF_GPIO_PIN_H0H1,NRF_GPIO_PIN_SENSE_HIGH);nrf_gpio_cfg(LCD_QSPI_CSN_PIN,NRF_GPIO_PIN_DIR_INPUT,NRF_GPIO_PIN_INPUT_DISCONNECT,NRF_GPIO_PIN_NOPULL,NRF_GPIO_PIN_H0H1,NRF_GPIO_PIN_NOSENSE);nrf_gpio_cfg(LCD_QSPI_IO0_PIN,NRF_GPIO_PIN_DIR_INPUT,NRF_GPIO_PIN_INPUT_DISCONNECT,NRF_GPIO_PIN_PULLDOWN,NRF_GPIO_PIN_H0H1,NRF_GPIO_PIN_NOSENSE);nrf_gpio_cfg(LCD_QSPI_IO1_PIN,NRF_GPIO_PIN_DIR_INPUT,NRF_GPIO_PIN_INPUT_DISCONNECT,NRF_GPIO_PIN_PULLDOWN,NRF_GPIO_PIN_H0H1,NRF_GPIO_PIN_NOSENSE);nrf_gpio_cfg(LCD_QSPI_IO2_PIN,NRF_GPIO_PIN_DIR_INPUT,NRF_GPIO_PIN_INPUT_DISCONNECT,NRF_GPIO_PIN_PULLDOWN,NRF_GPIO_PIN_H0H1,NRF_GPIO_PIN_NOSENSE);nrf_gpio_cfg(LCD_QSPI_IO3_PIN,NRF_GPIO_PIN_DIR_INPUT,NRF_GPIO_PIN_INPUT_DISCONNECT,NRF_GPIO_PIN_PULLDOWN,NRF_GPIO_PIN_H0H1,NRF_GPIO_PIN_NOSENSE);
}

LCD demo 320×240 @ nRF52840 之后,我想描述如何使用 QSPI 接口驱动更大的 LCD 显示器,例如 360 x 360 分辨率 @ nRF52840。

QSPI 四路串行外设接口
QSPI 外设支持使用 SPI 与外部闪存设备进行通信。

此处列出了 QSPI 外设的主要特性:
• 单/双/四通道 SPI 输入/输出
• 2–32 MHz 可配置时钟频率
• 从/到外部闪存的单字读/写访问
• 用于块读写传输的 EasyDMA
• 高达 16 MB/秒的 EasyDMA 读取速率
• 就地执行 (XIP),用于直接从外部闪存执行程序

在 Nordic nRF52/nRF53 系列上,QSPI 可以支持两种不同的模式。

Flash / XIP操作(需要遵循flash协议)
发送自定义指令(限制使用QSPI上的1-wire发送数据)。
在指令集上,它支持与外部闪存设备的操作码。

用于 LCD 的 QSPI 接口
基本上,QSPI 接口有 6 个 GPIO 引脚。

在这篇博客中,我将使用显示器制造商的瀚宇360×360 和GalaxyCore Controller 分辨率进行测试。

初始化 QSPI 模块
将所有 6 个 GPIO 引脚配置为高驱动输出。

#define LCD_QSPI_RESET_PIN NRF_GPIO_PIN_MAP(0,27)
#define LCD_QSPI_CSN_PIN NRF_GPIO_PIN_MAP(0,26)
#define LCD_QSPI_SCK_PIN NRF_GPIO_PIN_MAP(0,02)
#define LCD_QSPI_IO0_PIN NRF_GPIO_PIN_MAP(1,15)
#define LCD_QSPI_IO1_PIN NRF_GPIO_PIN_MAP(1,14)
#define LCD_QSPI_IO2_PIN NRF_GPIO_PIN_MAP(1,13)
#define LCD_QSPI_IO3_PIN NRF_GPIO_PIN_MAP(1,12)

static void config_qspi_pin_high_drive(void)
{
nrf_gpio_cfg(
LCD_QSPI_SCK_PIN,
NRF_GPIO_PIN_DIR_INPUT,
NRF_GPIO_PIN_INPUT_CONNECT,
NRF_GPIO_PIN_PULLDOWN,
NRF_GPIO_PIN_H0H1,
NRF_GPIO_PIN_SENSE_HIGH);
nrf_gpio_cfg(
LCD_QSPI_CSN_PIN,
NRF_GPIO_PIN_DIR_INPUT,
NRF_GPIO_PIN_INPUT_DISCONNECT,
NRF_GPIO_PIN_NOPULL,
NRF_GPIO_PIN_H0H1,
NRF_GPIO_PIN_NOSENSE);

    nrf_gpio_cfg(LCD_QSPI_IO0_PIN,NRF_GPIO_PIN_DIR_INPUT,NRF_GPIO_PIN_INPUT_DISCONNECT,NRF_GPIO_PIN_PULLDOWN,NRF_GPIO_PIN_H0H1,NRF_GPIO_PIN_NOSENSE);nrf_gpio_cfg(LCD_QSPI_IO1_PIN,NRF_GPIO_PIN_DIR_INPUT,NRF_GPIO_PIN_INPUT_DISCONNECT,NRF_GPIO_PIN_PULLDOWN,NRF_GPIO_PIN_H0H1,NRF_GPIO_PIN_NOSENSE);nrf_gpio_cfg(LCD_QSPI_IO2_PIN,NRF_GPIO_PIN_DIR_INPUT,NRF_GPIO_PIN_INPUT_DISCONNECT,NRF_GPIO_PIN_PULLDOWN,NRF_GPIO_PIN_H0H1,NRF_GPIO_PIN_NOSENSE);nrf_gpio_cfg(LCD_QSPI_IO3_PIN,NRF_GPIO_PIN_DIR_INPUT,NRF_GPIO_PIN_INPUT_DISCONNECT,NRF_GPIO_PIN_PULLDOWN,NRF_GPIO_PIN_H0H1,NRF_GPIO_PIN_NOSENSE);

}

初始化 QSPI 模块并将其配置为 24 位地址/32MHz 时钟。

void qspi_lcd_GC9c01_init(void)
{if (!m_is_qspi_init){uint32_t err_code;nrf_drv_qspi_config_t qspi_lcd_config = NRF_DRV_QSPI_DEFAULT_CONFIG;//config.phy_if.sck_freq  = NRF_QSPI_FREQ_32MDIV1;        //NRF_QSPI_FREQ_32MDIV8; //32MHzqspi_lcd_config.phy_if.sck_freq  = NRF_QSPI_FREQ_32MDIV1;        //NRF_QSPI_FREQ_32MDIV8; //32MHz//qspi_lcd_config.phy_if.sck_freq  = NRF_QSPI_FREQ_32MDIV8;//NRF_QSPI_FREQ_32MDIV8; //8MHzqspi_lcd_config.pins.csn_pin     = LCD_QSPI_CSN_PIN;qspi_lcd_config.pins.sck_pin     = LCD_QSPI_SCK_PIN;qspi_lcd_config.pins.io0_pin     = LCD_QSPI_IO0_PIN;qspi_lcd_config.pins.io1_pin     = LCD_QSPI_IO1_PIN;qspi_lcd_config.pins.io2_pin     = LCD_QSPI_IO2_PIN;qspi_lcd_config.pins.io3_pin     = LCD_QSPI_IO3_PIN;err_code = nrf_drv_qspi_init(&qspi_lcd_config, qspi_lcd_handler, NULL);APP_ERROR_CHECK(err_code);NRF_LOG_INFO("QSPI LCD Init");NRF_QSPI->IFCONFIG0 |= (QSPI_IFCONFIG0_PPSIZE_512Bytes << QSPI_IFCONFIG0_PPSIZE_Pos);m_is_qspi_init = true;}else{NRF_LOG_ERROR("QSPI LCD has already initialized!");APP_ERROR_CHECK(-1);}
}

2.2 读写操作

基本上,LCD 上有 2 个操作。

LCD 命令代码(例如 LCD 初始化代码)。
LCD Data write(将数据写入LCD屏)。

(1)LCD命令模式
在这里插入图片描述
(2)LCD写命令

static uint32_t drv_GC9c01_bus_writeCmd(const uint8_t cmd)
{return send_qspi_cinstr_w0d(cmd);
}
static uint32_t drv_GC9c01_bus_writeCmdByte(const uint8_t cmd, const uint8_t data)
{uint32_t err_code = NRF_SUCCESS;err_code  = send_qspi_cinstr_w1d(cmd, data);return err_code;
}

(3)LCD初始化代码

static void configure_lcd()
{drv_GC9c01_bus_writeCmd(0xfe);drv_GC9c01_bus_writeCmd(0xef);drv_GC9c01_bus_writeCmdByte(0x80, 0x11);drv_GC9c01_bus_writeCmdByte(0x81, 0x70);drv_GC9c01_bus_writeCmdByte(0x82, 0x09);drv_GC9c01_bus_writeCmdByte(0x83, 0x03);drv_GC9c01_bus_writeCmdByte(0x84, 0x20);drv_GC9c01_bus_writeCmdByte(0x85, 0x42);drv_GC9c01_bus_writeCmdByte(0x86, 0xfc);drv_GC9c01_bus_writeCmdByte(0x87, 0x09);drv_GC9c01_bus_writeCmdByte(0x89, 0x10);drv_GC9c01_bus_writeCmdByte(0x8a, 0x4f);drv_GC9c01_bus_writeCmdByte(0x8c, 0x59);drv_GC9c01_bus_writeCmdByte(0x8d, 0x51);drv_GC9c01_bus_writeCmdByte(0x8e, 0xae);drv_GC9c01_bus_writeCmdByte(0x8f, 0xf3);drv_GC9c01_bus_writeCmdByte(0x36, 0x00);drv_GC9c01_bus_writeCmdByte(0x3a, 0x05);drv_GC9c01_bus_writeCmdByte(0xec, 0x77);uint8_t parmater1_buffer[] = {0x01, 0x80, 0x00, 0x00, 0x00, 0x00};send_qspi_cinstr_long_frame_word(0x74, parmater1_buffer, 6);drv_GC9c01_bus_writeCmdByte(0x98, 0x3e);drv_GC9c01_bus_writeCmdByte(0x99, 0x3e);drv_GC9c01_bus_writeCmdByte(0xc3, 0x2A);drv_GC9c01_bus_writeCmdByte(0xc4, 0x18);send_qspi_cinstr_w1d_2data(0xa1,0x01,0x04);send_qspi_cinstr_w1d_2data(0xa2,0x01,0x04);drv_GC9c01_bus_writeCmdByte(0xa9, 0x1c);send_qspi_cinstr_w1d_2data(0xa5,0x11,0x09);drv_GC9c01_bus_writeCmdByte(0xb9, 0x8a);drv_GC9c01_bus_writeCmdByte(0xa8, 0x5e);drv_GC9c01_bus_writeCmdByte(0xa7, 0x40);drv_GC9c01_bus_writeCmdByte(0xaf, 0x73);drv_GC9c01_bus_writeCmdByte(0xae, 0x44);drv_GC9c01_bus_writeCmdByte(0xad, 0x38);drv_GC9c01_bus_writeCmdByte(0xa3, 0x5d);drv_GC9c01_bus_writeCmdByte(0xc2, 0x02);drv_GC9c01_bus_writeCmdByte(0xc5, 0x11);drv_GC9c01_bus_writeCmdByte(0xc6, 0x0e);drv_GC9c01_bus_writeCmdByte(0xc7, 0x13);drv_GC9c01_bus_writeCmdByte(0xc8, 0x0d);drv_GC9c01_bus_writeCmdByte(0xcb, 0x02);send_qspi_cinstr_w1d_2data(0x7c,0xb6,0x26);drv_GC9c01_bus_writeCmdByte(0xac, 0x24);drv_GC9c01_bus_writeCmdByte(0xf6, 0x80);send_qspi_cinstr_w1d_2data(0xb5,0x09,0x09);send_qspi_cinstr_w1d_4data(0x60, 0x38,0x0b,0x5b,0x56);send_qspi_cinstr_w1d_4data(0x63, 0x3a,0xe0,0x5b,0x56);uint8_t parmater2_buffer[] = {0x38, 0x0d, 0x72, 0xdd, 0x5b, 0x56};send_qspi_cinstr_long_frame_word(0x64, parmater2_buffer, 6);uint8_t parmater3_buffer[] = {0x38, 0x11, 0x72, 0xe1, 0x5b, 0x56};send_qspi_cinstr_long_frame_word(0x66, parmater3_buffer, 6);uint8_t parmater4_buffer[] = {0x3b, 0x08, 0x08, 0x00, 0x08, 0x29,0x5b};send_qspi_cinstr_long_frame_word(0x68, parmater4_buffer, 7);uint8_t parmater5_buffer[] = {0x00,0x00,0x00,0x07,0x01,0x13,0x11,0x0b, \0x09,0x16,0x15,0x1d,0x1e,0x00,0x00,0x00, \0x00,0x00,0x00,0x1e,0x1d,0x15,0x16,0x0a, \0x0c,0x12,0x14,0x02,0x08,0x00,0x00,0x00};send_qspi_cinstr_long_frame_word(0x6e, parmater5_buffer, 32);drv_GC9c01_bus_writeCmdByte(0xbe, 0x11);uint8_t parmater6_buffer[] = {0xcc, 0x0c, 0xcc, 0x84, 0xcc, 0x04,0x50};send_qspi_cinstr_long_frame_word(0x6c, parmater6_buffer, 7);drv_GC9c01_bus_writeCmdByte(0x7d, 0x72);drv_GC9c01_bus_writeCmdByte(0x7e, 0x38);uint8_t parmater7_buffer[] = {0x02,0x03,0x09,0x05,0x0c,0x06,0x09,0x05,0x0c,0x06};send_qspi_cinstr_long_frame_word(0x70, parmater7_buffer, 10);send_qspi_cinstr_w1d_4data(0x90, 0x06,0x06,0x05,0x06);send_qspi_cinstr_w1d_3data(0x93, 0x45,0xff,0x00);uint8_t parmater8_buffer[] = {0x45, 0x09, 0x08, 0x08, 0x26, 0x2a};send_qspi_cinstr_long_frame_word(0xf0, parmater8_buffer, 6);uint8_t parmater9_buffer[] = {0x43, 0x70, 0x72, 0x36, 0x37, 0x6f};send_qspi_cinstr_long_frame_word(0xf1, parmater9_buffer, 6);uint8_t parmater10_buffer[] = {0x45, 0x09, 0x08, 0x08, 0x26, 0x2a};send_qspi_cinstr_long_frame_word(0xf2, parmater10_buffer, 6);uint8_t parmater11_buffer[] = {0x43, 0x70, 0x72, 0x36, 0x37, 0x6f};send_qspi_cinstr_long_frame_word(0xf3, parmater11_buffer, 6);drv_GC9c01_bus_writeCmd(0xfe);drv_GC9c01_bus_writeCmd(0xee);// User Command Set (UCS = CMD1)------------------------------------------//       drv_GC9c01_bus_writeCmdByte(GC9c01_CMD_WRITE_CMD_MODE_PAGE, 0x00);//tearing effect line on--------------------------------------------------//       drv_GC9c01_bus_writeCmdByte(GC9c01_CMD_TEARING_EFFECT_ON, 0x00);// Interface Pixel Format-------------------------------------------------//       drv_GC9c01_bus_writeCmdByte(GC9c01_CMD_INTERFACE_PIXEL_FORMAT, 0x55);// 0x55 -> 565// Set_DSPI Mode----------------------------------------------------------//       drv_GC9c01_bus_writeCmdByte(GC9c01_CMD_SET_DSPI_MODE, 0x80);// Write display brightness-----------------------------------------------//GC9c01_drv_SetBrightness(0xCC);// Sleep-out and Display on-----------------------------------------------GC9c01_DRV_SLEEP_OUT();nrf_delay_ms(120);GC9c01_DRV_DISPLAY_ON();nrf_delay_ms(20);GC9c01_drv_setColRowPosition(0, 0);NRF_LOG_INFO("After %s", __func__);
}

2.3 写入 LCD 数据

它使用 Opcode = 0x32 PP4O 来写入 LCD 数据。
在这里插入图片描述

static uint32_t gc9c01_bus_lcd_write_buffer(uint8_t *p_tx_buffer, uint32_t len, uint32_t addr)
{uint32_t err_code = 0;m_finished = false;err_code = nrf_drv_qspi_write(p_tx_buffer, len, addr);if(err_code != NRFX_SUCCESS){// NRF_LOG_INFO("error code= 0x%x",err_code);}WAIT_FOR_PERIPH();return err_code;
}static void BMP_picture_show(uint32_t delay, const uint16_t *p_data)
{uint32_t err_code;uint32_t * p_color;uint32_t i,k;uint32_t tran_size,now_size=0;uint32_t remain_size = GC9c01_DRV_ALL_SIZE;//NRF_LOG_INFO("%s block_dx = %d, Color=%04x", __func__, a block_dx, color);//static uint8_t __ALIGN(4) bank_buf[QSPI_PAG_SIZE];tran_size = QSPI_PAG_SIZE;memcpy(&m_buffer_tx[0], (uint8_t *)&p_data[0]+tran_size, tran_size);err_code = gc9c01_bus_lcd_write_buffer(m_buffer_tx, QSPI_PAG_SIZE, 0x002C00);remain_size -= tran_size;now_size=tran_size;while (remain_size){if (remain_size > QSPI_PAG_SIZE){tran_size = QSPI_PAG_SIZE;}else{tran_size = remain_size;}memcpy(m_buffer_tx, (uint8_t *)&p_data[0]+now_size, tran_size);now_size += tran_size;err_code = gc9c01_bus_lcd_write_buffer(&m_buffer_tx[0], tran_size, 0x003C00);remain_size -= tran_size;}nrf_delay_ms(delay);
}

效果展示
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_228483.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scala集合习题Ⅰ

熟话说的好&#xff1a;”纸上得来终觉浅&#xff0c;绝知此事要躬行“&#xff0c;所以现在我就以下的习题&#xff0c;来巩固 之前我学习的几个常见集合函数&#xff0c;加深理解。 目录 练习题 1&#xff1a;计算分组后的list 分别对应的长度&#xff0c;和累加值 练习题…

光栅莫尔信号四倍频细分电路模块的设计与仿真研究

笔者电子信息专业硕士毕业&#xff0c;获得过多次电子设计大赛、大学生智能车、数学建模国奖&#xff0c;现就职于南京某半导体芯片公司&#xff0c;从事硬件研发&#xff0c;电路设计研究。对于学电子的小伙伴&#xff0c;深知入门的不易&#xff0c;特开次博客交流分享经验&a…

Google单元测试框架gtest之官方sample笔记3--值参数化测试

1.7 sample7--接口测试 值参数不限定类型&#xff0c;也可以是类的引用&#xff0c;这就可以实现对类接口的测试&#xff0c;一个基类可以有多个继承类&#xff0c;那么可以测试不同的子类功能&#xff0c;但是只需要写一个测试用例&#xff0c;然后使用参数列表实现对每个子类…

天宇优配|GDR海外发行热情高 资本市场互联互通提速

圆桌评论&#xff1a;“对话交易所——上海&#xff0c;为中欧互联互通提速” “2022上海全球资产管理高峰论坛”11月29日在上海举办。在题为“对话交易所——上海&#xff0c;为中欧互联互通提速”的圆桌评论环节&#xff0c;来自全球各大证券交易所、证券公司、上市公司的多…

https加密解密过程二、名词解析及文件生成

https加密解密过程二、名词解析及文件生成 密钥仓库keystore文件 Keytool是一个Java数据证书的管理工具 &#xff0c;Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中 keystore文件的内容其实就是把私钥、公钥以及公钥对应的地址等信息输出为json格式的…

[附源码]Python计算机毕业设计Django二手书店设计论文

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

13.前端笔记-CSS-盒子样式应用(圆角、阴影)

1、圆角边框 border-radius属性&#xff0c;用于设置元素的外边框圆角 原理&#xff1a;(椭)圆和矩形的两条边相切&#xff08;圆的半径就是length&#xff09;&#xff0c;形成圆角效果 属性&#xff1a; border-top-left-radius;左上 border-top-right-radius:右上 border…

一起学时序分析之建立/保持时间裕量

何为裕量&#xff1f; 裕量&#xff0c;英文名称叫做“Slack”。我们在Vivado实现后的报告中常常能看到这样一栏&#xff1a; 因为都是缩写&#xff0c;所以我们来解释一下前四栏的含义&#xff1a; WNS&#xff0c;即Worst Negative Slack&#xff0c;最差负时序裕量。这个表…

(四) 共享模型之管程【Monitor 概念】

一、Java 对象头&#xff08;P75&#xff09; 二、原理之 Monitor(锁) Monitor 被翻译为监视器或管程。 每个 Java 对象都可以关联一个 Monitor 对象&#xff0c;如果使用 synchronized 给对象上锁&#xff08;重量级&#xff09;之后&#xff0c;该对象头的 Mark Word 中就被设…

基于改进萤火虫算法的图像分割的应用(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

【信管2.4】项目运行环境与项目经理

项目运行环境与项目经理加餐加餐来了哦&#xff0c;今天的内容在 《信息系统项目管理师教程》 这本教材里是没有的&#xff0c;而且在 PMBOK 第五版中也是没有的。这部分内容是 PMBOK 第六版中新加的两个独立章节&#xff0c;不过内容不多&#xff0c;非常轻松&#xff0c;重点…

01 - 进阶操作系统(BIOS)

---- 整理自狄泰软件唐佐林老师课程 1. BIOS - Base input & Output system BIOS是上电后第一个运行的程序 BIOS首先检测硬件状态&#xff0c;检测通过后立即进行硬件初始化工作 BIOS会在内存中建立中断向量表&#xff08;提供硬件访问的方法&#xff09; BIOS最后将控制…

[附源码]计算机毕业设计JAVA校园飞毛腿系统

[附源码]计算机毕业设计JAVA校园飞毛腿系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis …

前后端分离项目的https加密解密过程二、名词解析及文件生成

前后端分离项目的https加密解密过程二、名词解析及文件生成 密钥仓库keystore文件 Keytool是一个Java数据证书的管理工具 &#xff0c;Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中 keystore文件的内容其实就是把私钥、公钥以及公钥对应的地址等信息…

【附源码】计算机毕业设计JAVA众筹平台网站

【附源码】计算机毕业设计JAVA众筹平台网站 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA mybati…

leetcode:1579. 保证图可完全遍历【并查集思路】

目录题目截图题目分析ac code总结题目截图 题目分析 从删除比较难&#xff0c;考虑增加增加的过程中无用的边就可以删除考虑alice和bob各自的联通分量最后希望都是1&#xff0c;一开始都是n如果将两个独立的联通分量连起来了&#xff0c;那么连通分量个数减1这里很明显就是用并…

Kafka集群环境搭建及基本使用

前提条件 操作系统&#xff1a;CentOS7服务器&#xff1a;3台Java环境&#xff1a;JDK1.8。安装教程参考JDK1.8安装Zookeeper环境 搭建教程参考Zookeeper集群环境搭建及使用Kafka基础知识参考Kafka角色及功能概览 搭建步骤 下载 执行下载命令wget https://archive.apache.o…

全程软件自动化测试

软件自动化测试的概念 “什么是软件自动化测试&#xff1f;”也许很多人的回答是&#xff1a;“使用自动化测试工具或者编写自动化脚本来自动化测试软件”&#xff0c;还有一些权威网站&#xff0c;比如 WikiPedia 是这样定义的&#xff1a; “在软件测试中&#xff0c;自动化…

(三) 共享模型之管程【共享带来的问题】

一、共享带来的问题 1. 临界区 &#xff08;1&#xff09;一个程序运行多个线程本身是没有问题的 &#xff08;2&#xff09;问题出在多个线程访问共享资源 1️⃣多个线程读共享资源其实也没有问题 2️⃣在多个线程对共享资源读写操作时发送指令交错&#xff0c;就会出现问题 …

清朝盛衰的六个时间点!

清朝盛衰的整个过程经历了六个时间节点&#xff1a; 一六六一年﹙顺治十八年﹚是第一个时间节点。 正月初六夜半时分&#xff0c;顺治帝预感生命垂危&#xff0c;急命太监传呼麻勒吉与王熙两人赶赴养心殿。帝对王熙说&#xff1a;“朕出痘&#xff0c;势将不起&#xff0c;尔…