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

基于亚博K210开发板——LCD触摸屏读取坐标数据测试

开发板

亚博K210开发板
在这里插入图片描述

实验目的

主要学习 K210 通过 I2C 读取触摸屏的坐标,并打印出来,显示在 LCD上。

实验准备

实验元件

LCD 显示屏+触摸板
在这里插入图片描述

元件特性

K210 开发板自带 2.0 寸触摸屏,其实是 LCD 显示屏上贴一个触摸板组成,LCD显示屏上一节课已经学过,而触摸板为电容触摸板,与手机上使用的电容屏原理一样,可以直接用手指触摸,而不像电阻屏一样要用指甲按。电容屏具有相应时间短,精确度高,使用寿命长,操作简单方便等特点。触摸板使用的是 I2C 通讯,能够稳定传输数据,并且支持与其他 I2C 设备并联到同一个 I2C 接口上通讯。

硬件连接

K210 开发板出厂默认已经安装好 LCD 显示屏和触摸板,其中 LCD 显示屏的LCD_D0~D7 总共八个引脚连接到 SPI0_D0~D7 上,LCD_CS 连接到 IO36 上,LCD_RST连接到 IO37 上,LCD_RS 连接 IO3 上,LCD_WR 连接 IO39 上;触摸板的 I2C_SCL连接到 IO9,I2C_SDA 连接到 IO10,FT_INT 连接到 IO12,FT_RST 连接到 IO37,与 LCD 显示屏共用使用一个 RST 接口。
在这里插入图片描述
在这里插入图片描述

SDK 中对应 API 功能

以头文件 i2c.h为例

  • I2C 总线用于和多个外部设备进行通信。多个外部设备可以共用一个 I2C总线。
  • I2C 模块具有独立的 I2C 设备封装外设相关参数,自动处理多设备总线争用的功能。
  • K210 芯片集成电路总线有 3个 I2C总线接口,都可以作为 I2C 主机(MASTER)模式或从机(SLAVE)模式来使用。
  • I2C 接口支持标准模式(0 到 100kb/s),快速模式(<=400kb/s),7 位或10 位寻址模式,批量传输模式,中断或轮询模式操作。
• i2c_init:初始化 I2C,配置从机地址、寄存器位宽度和 I2C 速率。
• i2c_init_as_slave:配置 I²C 为从模式。
• i2c_send_data:I2C 写数据。
• i2c_send_data_dma:I2C 通过 DMA 写数据。
• i2c_recv_data:I2C 通过 CPU 读数据。
• i2c_recv_data_dma:I2C 通过 dma 读数据。
• i2c_handle_data_dma:I2C 使用 dma 传输数据。

实验原理

  • 电容式触摸屏技术是利用人体的电流感应进行工作的。电容式触摸屏是一块 四层复合玻璃屏,玻屏的内表面和夹层各涂有一层 ITO,最外层是一薄层矽土 玻璃保护层,夹层 ITO 涂层作为工作面,角上引出四个电极,内层ITO 为屏 蔽层以保证良好的工作环境。当手指触摸在金属层上时,由于人体电场,用户 和触摸屏表面形成以一个耦合电容,对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流。这个电流分别从触摸屏的四角上的电极中流出,并且流经这四个电极的电流与手指到四角的距离成正比,控制器通过对这四 个电流比例的精确计算,得出触摸点的位置。
  • I2C 是一种总线式结构,它只需要 SCL 时钟信号线与 SDA 数据线,两根线就能将连接与总线上设备实现数据通信,由于它的简便的构造设计,于是成为一种较为常用的通信方式。由于 I2C 采用的是主从式通信方式,所以,通信的过程完全由主设备仲裁。在通信之前,必须由主设备发送一个起始信号,决定数据是否可以开始传送,并且在结束通信时,必须再由主设备发送一个结束信号,以表示通信已经结束。
    I2C 向寄存器写入数据的过程:
    在这里插入图片描述I2C 从寄存器读取数据的过程:

在这里插入图片描述

实验过程

  1. 首先初始化 K210 的硬件引脚和软件功能使用的是 FPIOA 映射关系
#define PIN_LCD_CS             (36)
#define PIN_LCD_RST            (37)
#define PIN_LCD_RS             (38)
#define PIN_LCD_WR             (39)#define PIN_FT_RST             (37)
#define PIN_FT_INT             (12)
#define PIN_FT_SCL             (9)
#define PIN_FT_SDA             (10)/*****************************SOFTWARE-GPIO********************************/
// 软件GPIO口,与程序对应
#define LCD_RST_GPIONUM        (0)
#define LCD_RS_GPIONUM         (1)#define FT_INT_GPIONUM         (2)
#define FT_RST_GPIONUM         (3)/*****************************FUNC-GPIO************************************/
// GPIO口的功能,绑定到硬件IO口
#define FUNC_LCD_CS             (FUNC_SPI0_SS3)
#define FUNC_LCD_RST            (FUNC_GPIOHS0 + LCD_RST_GPIONUM)
#define FUNC_LCD_RS             (FUNC_GPIOHS0 + LCD_RS_GPIONUM)
#define FUNC_LCD_WR             (FUNC_SPI0_SCLK)#define FUNC_FT_RST             (FUNC_GPIOHS0 + FT_RST_GPIONUM)
#define FUNC_FT_INT             (FUNC_GPIOHS0 + FT_INT_GPIONUM)
#define FUNC_FT_SCL             (FUNC_I2C0_SCLK)
#define FUNC_FT_SDA             (FUNC_I2C0_SDA)
void hardware_init(void)
{/***lcd_cs	    36*lcd_rst	37*lcd_rs	    38*lcd_wr 	39**/fpioa_set_function(PIN_LCD_CS, FUNC_LCD_CS);fpioa_set_function(PIN_LCD_RST, FUNC_LCD_RST);fpioa_set_function(PIN_LCD_RS, FUNC_LCD_RS);fpioa_set_function(PIN_LCD_WR, FUNC_LCD_WR);/* 使能SPI0和DVP */sysctl_set_spi0_dvp_data(1);/* I2C FT6236 */// fpioa_set_function(PIN_FT_RST, FUNC_FT_RST);fpioa_set_function(PIN_FT_INT, FUNC_FT_INT);fpioa_set_function(PIN_FT_SCL, FUNC_FT_SCL);fpioa_set_function(PIN_FT_SDA, FUNC_FT_SDA);
}
  1. 设置 LCD 的 IO 口电平电压为 1.8V。
void io_set_power(void)
{sysctl_set_power_mode(SYSCTL_POWER_BANK6, SYSCTL_POWER_V18);
}
  1. 由于触摸板需要使用中断来判断屏幕是否有触摸,所有需要初始化中断并使能全局中断。
    /* 系统中断初始化,并使能全局中断 */plic_init();sysctl_enable_irq();
  1. 初始化 LCD 显示屏,并显示图片和字符串欢迎语
    /* 初始化LCD */lcd_init();/* 显示图片 */uint16_t * img = &gImage_logo; lcd_draw_picture_half(0, 0, 320, 240, img);sleep(1);lcd_draw_string(16, 40, "Hello Yahboom", RED);lcd_draw_string(16, 60, "Nice to meet you!", BLUE);
  1. 初始化触摸板,并通过 LCD 显示和串口打印触摸提示。
    /* 初始化触摸板 */ft6236_init();printf("Hi!Please touch the screen to get coordinates!\n");lcd_draw_string(16, 180, "Please touch the screen to get coord!", RED);

触摸板 FT6236 的初始化比较简单,分为硬件初始化和软件初始化,软件初始化主要是设置 FT6236 的寄存器,唤醒 FT6236 设置触摸灵敏度和扫描周期。

/* 初始化ft6236 */
void ft6236_init(void)
{ft6236.touch_state = 0;ft6236.touch_x = 0;ft6236.touch_y = 0;/* 硬件初始化 */ft6236_hardware_init();/* 软件初始化 */i2c_hardware_init(FT6236_I2C_ADDR);ft_i2c_write(FT_DEVIDE_MODE, 0x00);/* 设置触摸有效值,越小越灵敏,def=0xbb */ft_i2c_write(FT_ID_G_THGROUP, 0x12);    // 0x22/* 工作扫描周期,用于控制报点率,def=0x08, 0x04~0x14 */ft_i2c_write(FT_ID_G_PERIODACTIVE, 0x06);
}
  1. 硬件引脚初始化,主要是修改触摸板复位引脚的电平,这里与屏幕使用同一个复位引脚,所以不需要再复位操作。再设置 FT_INT 中断引脚为输入,中断回调函数为 ft6236_isr_cb,并在中断函数中修改触摸屏的状态。
void ft6236_hardware_init(void)
{/* 与屏幕使用不同复位引脚时设置为1 */#if (0) {gpiohs_set_drive_mode(FT_RST_GOIONUM, GPIO_DM_OUTPUT);ft6236_reset_pin(LEVEL_LOW);msleep(50);ft6236_reset_pin(LEVEL_HIGH);msleep(120);}#endifgpiohs_set_drive_mode(FT_INT_GPIONUM, GPIO_DM_INPUT);gpiohs_set_pin_edge(FT_INT_GPIONUM, GPIO_PE_RISING);gpiohs_irq_register(FT_INT_GPIONUM, FT6236_IRQ_LEVEL, ft6236_isr_cb, NULL);msleep(5);}
  1. FT6236通过I2C通讯的方式来读和写数据,以下是触摸板 I2C控制的函数:
/* I2C写数据 */
static void ft_i2c_write(uint8_t reg, uint8_t data)
{i2c_hd_write(FT6236_I2C_ADDR, reg, data);
}/* I2C读数据 */
static void ft_i2c_read(uint8_t reg, uint8_t *data_buf, uint16_t length)
{i2c_hd_read(FT6236_I2C_ADDR, reg, data_buf, length);
}

初始化 I2C,设置从机地址,数据位宽度,I2C 通讯速率等,

static uint16_t _current_addr = 0x00;/* 硬件初始化I2C,设置从机地址,数据位宽度,I2C通讯速率 */
void i2c_hardware_init(uint16_t addr)
{i2c_init(I2C_DEVICE_0, addr, ADDRESS_WIDTH, I2C_CLK_SPEED);_current_addr = addr;
}

向寄存器 reg 写入一个数据 data ,写入成功返回 0,失败则返回非 0,

/* 向寄存器reg写入一个数据data ,写入成功返回0,失败则返回非0*/
uint16_t i2c_hd_write(uint8_t addr, uint8_t reg, uint8_t data)
{if (_current_addr != addr){i2c_hardware_init(addr);}uint8_t cmd[2];cmd[0] = reg;cmd[1] = data;uint16_t error = 1;error = i2c_send_data(I2C_DEVICE_0, cmd, 2);return error;
}

从寄存器 reg 读取 length 个数据保存到 data_buf,读取成功返回 0,失败
则返回非 0。

/* 从寄存器reg读取length个数据保存到data_buf,读取成功返回0,失败则返回非0 */
uint16_t i2c_hd_read(uint8_t addr, uint8_t reg, uint8_t *data_buf, uint16_t length)
{if (_current_addr != addr){i2c_hardware_init(addr);}uint16_t error = 1;error = i2c_recv_data(I2C_DEVICE_0, &reg, 1, data_buf, length);return error;
}
  1. main 函数里最后是一个 while(1)循环,读取触摸屏的坐标 XY 值,然后通过串口打印出来,再显示到 LCD 显示屏上。每次显示完成后都需要刷新以下显示的位置,否则旧数据会重叠到一起,所以 lcd_clear_coord 函数就是清除坐标的作用。
while (1){/* 刷新数据位,清空上次显示的数据 */if (is_refresh){lcd_clear_coord();is_refresh = 0;}/* 如果触摸到触摸屏的时候 */if (ft6236.touch_state & TP_COORD_UD){ft6236.touch_state &= ~TP_COORD_UD;/* 扫描触摸屏 */ft6236_scan();/* 串口打印X Y 坐标 */printf("X=%d, Y=%d \n ", ft6236.touch_x, ft6236.touch_y);sprintf(coord, "(%d, %d)", ft6236.touch_x, ft6236.touch_y);lcd_draw_string(120, 200, coord, BLUE);is_refresh = 1;}/* 延迟80毫秒保证屏幕数据正常刷新 */msleep(80);}
  1. 先使用 lcd_set_area 函数设定显示坐标的区域,然后再写入白色的值(0XFFFFFFFF),以此来刷新显示的内容。如果背景图片的坐标区域不是空白的,则无法使用此方法来刷新。
void lcd_clear_coord(void)
{uint32_t color = 0xFFFFFFFF;uint8_t x1 = 120;uint8_t y1 = 200;uint8_t width = 100;uint8_t height = 16;lcd_set_area(x1, y1, x1 + width - 1, y1 + height - 1);tft_fill_data(&color, width * height / 2);
}

10.编译调试,烧录运行
进入自己项目 build目录,运行以下命令编译。

cmake .. -DPROJ=watchdog -G "MinGW Makefiles"
make

实验现象

烧录完成固件后,系统会弹出一个终端界面,如果没有弹出终端界面的可以打开串口助手显示调试内容。

在这里插入图片描述
在这里插入图片描述
同时 LCD 显示屏上也会显示当前触摸的坐标,当松开手时,坐标也会消失。每次移动手指,改变触摸的位置,对应的触摸点坐标也会改变。

实验总结

  • K210 开发板的触摸屏是电容式触摸屏,可以使用手指直接触摸使用。
  • 触摸板使用的是 I2C 通讯,读取数据后需要转化计算一下才能得到实际的触摸 坐标。
  • 触摸板的相关寄存器放在项目的 README.md 文件中,具体寄存器功能请查看硬 件相关资料中触摸屏资料

相关文章:

基于亚博K210开发板——LCD触摸屏读取坐标数据测试

开发板 亚博K210开发板 实验目的 主要学习 K210 通过 I2C 读取触摸屏的坐标&#xff0c;并打印出来&#xff0c;显示在 LCD上。 实验准备 实验元件 LCD 显示屏触摸板 元件特性 K210 开发板自带 2.0 寸触摸屏&#xff0c;其实是 LCD 显示屏上贴一个触摸板组成&#xf…...

coze平台实现文生视频和图生视频(阿里云版)工作流

工作流全貌 开始 首先从入参开始&#xff1a; api_key&#xff1a;来自阿里云百炼平台&#xff0c;自行去申请 prompt&#xff1a;生成视频的文本提示词。支持中英文&#xff0c;长度不超过800个字符&#xff0c;每个汉字/字母占一个字符&#xff0c;超过部分会自动截断。 …...

python酒店健身俱乐部管理系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…...

QtGUI模块功能详细说明,图标和光标(七)

目录 一.窗口和屏幕管理 二. 绘图和渲染 三. 图像处理 四. 字体和文本 五. 事件和输入处理 六. OpenGL 和硬件加速 七. 颜色和外观 八. 图标和光标 1、QIcon: 图标管理 1.1、QIcon 简介 1.2、图标的来源与创建 1.3、多分辨率与 DPI 支持 1.4、图标的状态管理 2、…...

【图像处理基石】如何入门OCR技术?

入门OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术需要结合理论学习、工具实践和项目实战&#xff0c;以下是分步骤的学习指南&#xff0c;适合零基础学习者&#xff1a; 一、明确OCR技术的核心概念 OCR的基本原理 核心流程&#xf…...

数据库知识沉浸式游戏化学习设计研究

数据库知识沉浸式游戏化学习设计研究 摘要: 本研究旨在设计一款以数据库知识为主题的沉浸式游戏化学习系统。通过对数据库知识体系的深入剖析,结合游戏化学习理论,构建了一个多层次、多任务的游戏架构。玩家在游戏过程中需完成构建数据库结构、编写 SQL 查询等任务来解锁关…...

大疆无人机

在大疆上云API中&#xff0c;​​DRC 链路​​通常指 ​​Device-Cloud Remote Control Link&#xff08;设备-云端远程控制链路&#xff09;​​&#xff0c;它是无人机&#xff08;或设备&#xff09;与云端服务之间建立的​​实时控制与数据传输通道​​&#xff0c;用于实现…...

撤回不了一点 v1.0.2,支持微信QQ钉钉飞书等消息防撤回

如今生活节奏快得飞起&#xff0c;社交软件和工作通讯软件成了咱日常交流的核心阵地。大家肯定都有过这些闹心事儿&#xff1a;和朋友聊得正嗨&#xff0c;对方突然撤回一条消息&#xff0c;好奇心瞬间爆棚&#xff0c;却怎么也看不到撤回的内容&#xff1b;工作群里关键信息刚…...

什么是Git?

“Git”是目前非常火、广泛使用的版本控制系统&#xff0c;尤其在软件开发领域中扮演着核心角色。 一、什么是Git&#xff1f;它到底是什么&#xff1f; Git 是一种版本控制系统&#xff08;Version Control System, VCS&#xff09;。它的主要作用是帮助开发者管理“代码的不…...

微信小程序 自定义图片分享-绘制数据图片以及信息文字

一 、需求 从数据库中读取头像&#xff0c;姓名电话等信息&#xff0c;当分享给女朋友时&#xff0c;每个信息不一样 二、实现方案 1、先将数据库中需要的头像姓名信息读取出来加载到data 数据项中 data:{firstName:, // 姓名img:, // 头像shareImage:,// 存储临时图片 } 2…...

langchain提示词的使用

一、概述 提示词是指向人工智能大模型提供的输入信息&#xff0c;通常包含关键词、问题或指令&#xff0c;可以引导大模型生成与用户期望相符的回应。我们在豆包&#xff0c;DeepSeek等大模型中输入的问题都可以认为一个简单的提示词&#xff0c;不过为了真正得到我们需要的结…...

C语言| extern的用法作用

C语言| 局部变量、全局变量 extern定义的变量&#xff0c;只对全局变量有用。 掌握extern的用法及其作用。extern主要用于在不同.c文件间扩展全局变量的作用范围。 扩展全局变量的使用范围&#xff0c;操作方法&#xff1a; 1 在一个文件内扩展全局变量的使用范围 全局变量…...

Rust 环境变量管理秘籍:从菜鸟到老鸟都爱的 dotenv 教程

前言 写代码的你,是否遭遇过这些灵魂拷问: “我现在在哪个环境?开发?测试?还是直接在生产线上裸奔?”“少写一个 .env,测试脚本在数据库里上演清空大法,客户当场破防。”“每次手动设置 RUST_ENV,命令敲到一半就开始怀疑人生,还怕输错一个字符引发灭世级事故。”别慌…...

Leetcode (力扣)做题记录 hot100(49,136,169,20)

力扣第49题&#xff1a;字母异位词分组 49. 字母异位词分组 - 力扣&#xff08;LeetCode&#xff09; 遍历数组&#xff0c;将每一个字符串变成char数组 然后排序&#xff0c;如果map里面有则将他的值返回来&#xff08;key是排序好的字符串&#xff09; class Solution {pu…...

Slitaz 系统深度解析

Slitaz 系统深度解析&#xff1a;从系统架构到设计哲学 一、系统定位与核心目标 Slitaz&#xff08;Simplified Lightweight IT Automatic Zen&#xff09;是一个基于 Linux 的超轻量级发行版&#xff0c;设计目标是极致轻量化、快速启动、低资源消耗&#xff0c;专为老旧硬件…...

Deepseek+Xmind:秒速生成思维导图与流程图

deepseekxmind&#xff0c;快速生成思维导图和流程图 文章目录 思维导图deepseek笔记本 txt文件xmind 流程图deepseekdraw.io 思维导图 deepseek 笔记本 txt文件 将deep seek的东西复制到文本文件中&#xff0c;然后将txt文件拓展名改成md xmind 新建思维导图----左上角三…...

理解计算机系统_并发编程(5)_基于线程的并发(二):线程api和基于线程的并发服务器

前言 以<深入理解计算机系统>(以下称“本书”)内容为基础&#xff0c;对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定 引入 接续上一篇理解计算机系统_并发编程(4)_基于线程的并发(一…...

java刷题基础知识

List<int[]> merged new ArrayList<int[]>(); return merged.toArray(new int[merged.size()][]); 表示一个存储 int[] 类型元素的列表&#xff0c;list灵活支持扩展&#xff0c;因为不知道最后有几个区间&#xff0c;所以用list&#xff0c;最后toArray返回成数组…...

MATLAB语音情感识别神经网络方法

在MATLAB中使用神经网络进行语音情感识别通常涉及以下步骤&#xff1a;数据准备、特征提取、神经网络模型构建、训练与评估。以下是详细说明和示例代码&#xff1a; 1. 数据准备 数据集&#xff1a;推荐使用公开情感语音数据集&#xff08;如RAVDESS、CREMA-D、EMODB等&#x…...

PostgreSQL 服务器信号函数

PostgreSQL 服务器信号函数 PostgreSQL 提供了一组服务器信号函数&#xff08;Server Signaling Functions&#xff09;&#xff0c;允许数据库管理员向 PostgreSQL 服务器进程发送特定信号以控制服务器行为。这些函数提供了对数据库服务器的精细控制能力。 一、核心信号函数…...

流动式起重机Q2的培训内容有哪些?

流动式起重机 Q2 的培训内容主要分为理论知识和实际操作两部分&#xff0c;具体如下&#xff1a; 理论知识 基础理论知识&#xff1a;涵盖机械原理、液压原理、电气原理等内容&#xff0c;帮助学员理解起重机的基本工作原理。例如&#xff0c;通过机械原理知识&#xff0c;学员…...

虹科应用 | 探索PCAN卡与医疗机器人的革命性结合

随着医疗技术的不断进步&#xff0c;医疗机器人在提高手术精度、减少感染风险以及提升患者护理质量方面发挥着越来越重要的作用。医疗机器人的精确操作依赖于稳定且高效的数据通信系统&#xff0c;虹科提供的PCAN四通道mini PCIe转CAN FD卡&#xff0c;正是为了满足这一需求而设…...

Linux系统编程---Signal信号集

0、前言 在上一篇博客笔记文章中&#xff0c;对Linux进程间通信的信号进行了讲解&#xff0c;本章将接着上一篇文章的内容&#xff0c;继续对Linux进程间通信中信号部分的信号集这个小知识点进行梳理。 如果有对Linux系统编程有不了解的地方&#xff0c;欢迎查阅博主的Linux系统…...

上电单次复位触发电路

SA1相当于是另外一个触发信号&#xff0c;S2A是手动触发信号&#xff0c;当S1A和S2A开关都断开时,示波器A入口所连接线路为上拉状态&#xff0c;高电平为3V。 当S2A闭合&#xff0c;相当于手动拉低&#xff0c;可以用于唤醒单片机之类的。 当S1A闭合&#xff0c;模拟电源接入&…...

talk-linux 不同用户之间终端通信

好的&#xff01;下面是一个完整的指南和脚本&#xff0c;用于在两台 Linux 主机上配置并使用 talk 聊天功能&#xff08;假设它们在同一个局域网内&#xff09;。 ⸻ &#x1f9fe; 一、需求说明 我们需要在两台主机上&#xff1a; 1. 安装 talk 和 talkd 2. 启用 talkd 服…...

QGIS 将 Shapefile 导入 PostGIS 数据库

一、背景介绍&#xff1a;QGIS、PostgreSQL 和 PostGIS 的关系和用途 在开始动手操作之前&#xff0c;我们先简单了解一下 QGIS、PostgreSQL 和 PostGIS 之间的关系及其用途。 QGIS&#xff08;Quantum GIS&#xff09;&#xff1a;一款开源免费的桌面地理信息系统&#xff0…...

《内网渗透测试:绕过最新防火墙策略》

内网渗透测试是检验企业网络安全防御体系有效性的核心手段&#xff0c;而现代防火墙策略的持续演进&#xff08;如零信任架构、AI流量分析、深度包检测&#xff09;对攻击者提出了更高挑战。本文系统解析2024年新型防火墙的防护机制&#xff0c;聚焦协议隐蔽隧道、上下文感知绕…...

CSS结构性伪类、UI伪类与动态伪类全解析:从文档结构到交互状态的精准选择

一、结构性伪类选择器&#xff1a;文档树中的位置导航器 结构性伪类选择器是CSS中基于元素在HTML文档树中的层级关系、位置索引或结构特征进行匹配的一类选择器。它们无需依赖具体的类名或ID&#xff0c;仅通过文档结构即可精准定位元素&#xff0c;是实现响应式布局和复杂文档…...

【大模型LLM学习】MiniCPM的注意力机制学习

【大模型LLM学习】MiniCPM的注意力机制学习 前言1 Preliminary1.1 MHA1.2 KV-cache 2 GQAGQA的MiniCPM实现 3 MLAMLA的MiniCPM-3-4b的实现 TODO 前言 之前MiniCPM3-4B是最早达到gpt-3.5能力的端侧小模型&#xff0c;其注意力机制使用了MLA。本来想借着MiniCPM从MHA过到MLA的&am…...

stm32之PWR、WDG

目录 1.PWR1.1 简介1.2 电源框图1.3 上电复位和掉电复位1.4 可编程电压监测器1.5 低功耗模式1.5.1 模式选择1.5.2 睡眠模式1.5.3 停止模式1.5.4 待机模式 1.6 实验1.6.1 修改主频1.6.2 睡眠模式串口发送接收1.6.3 停止模式对射式红外传感器计次1.6.4 待机模式实时时钟 2.看门狗…...

分布式任务调度XXL-Job

​ XXL-Job 是一款轻量级、分布式的任务调度平台&#xff0c;其核心设计解决了传统任务调度&#xff08;如Quartz&#xff09;在分布式场景下的‌任务分片‌、‌高可用‌、‌可视化管控‌等痛点。以下从原理、核心架构、应用场景、代码示例及关联中间件展开详解 一、主流任务…...

内存泄漏与OOM崩溃根治方案:JVM与原生内存池差异化排查手册

内存泄漏与OOM崩溃根治方案&#xff1a;JVM与原生内存池差异化排查手册 一、问题描述与快速解决方案 1. 核心问题分类 内存泄漏&#xff08;Memory Leak&#xff09; 现象&#xff1a;应用运行时间越长&#xff0c;内存占用持续攀升&#xff0c;GC回收效率下降&#xff0c;最…...

火山引擎发展初始

火山引擎是字节跳动旗下的云计算服务品牌&#xff0c;其云服务业务的启动和正式商业化时间线如下&#xff1a; 1. **初期探索&#xff08;2020年之前&#xff09;** 字节跳动在早期为支持自身业务&#xff08;如抖音、今日头条等&#xff09;构建了强大的基础设施和技术中…...

使用光标测量,使用 TDR 测量 pH 和 fF

时域反射计 &#xff08;TDR&#xff09; 是一种通常用于测量印刷电路板 &#xff08;PCB&#xff09; 测试试样和电缆阻抗的仪器。TDR 对于测量过孔和元件焊盘的电感和电容、探针尖端电容和电感&#xff0c;甚至寄生电感收发器耦合电容器也非常有用。这也是验证仿真或提取您自…...

mybatisplus 集成逻辑删除

一开始&#xff0c;没去查资料&#xff0c;后面要被AI气死了&#xff0c;先看它的的话 一开始&#xff0c;看ai的描述&#xff0c;我还以为&#xff0c;不需要改数据库&#xff0c;mybatis-puls自动拦截集成就可以实现逻辑删除&#xff0c;c&#xff0c;最后还是要给数据库加一…...

ABAP+旧数据接管的会计年度未确定

导资产主数据时&#xff0c;报错旧数据接管的会计年度未确定 是因为程序里面使用了下列函数AISCO_CALCULATE_FIRST_DAY&#xff0c;输入公司代码&#xff0c;获取会计年度&#xff0c;这个数据是在后台表T093C表中取数的&#xff0c;通过SE16N可以看到后台表数据没有数&#xf…...

KT148A语音芯片发码很难播放_将4脚对地一下再发正常,什么原因?

问题描述如下&#xff1a;您好&#xff0c;遇到一点问题请帮忙支持一下&#xff1a; KT148A 这颗芯片&#xff0c; 我们上电后发码很难触发播放&#xff0c; 但用镊子将4pin PB0对地短接触发一下&#xff0c;再发码就很正常&#xff0c;这是什么原因&#xff1f; 根据现象来看…...

【大模型】DeepResearcher:通用智能体通过强化学习探索优化

DeepResearcher&#xff1a;通过强化学习在真实环境中扩展深度研究 一、引言二、技术原理&#xff08;一&#xff09;强化学习与深度研究代理&#xff08;二&#xff09;认知行为的出现&#xff08;三&#xff09;模型架构 三、实战运行方式&#xff08;一&#xff09;环境搭建…...

SpringBoot 3.X 开发自己的 Spring Boot Starter 和 SpringBoot 2.x 的区别

SpringBoot 2.x 在模块中创建 src/main/resources/META-INF/spring.factories 文件 文件内容如下&#xff1a; org.springframework.boot.autoconfigure.EnableAutoConfiguration\com.xxx.xxx.yourfilejava1,\com.xxx.xxx.yourfilejava2 SpringBoot 3.x 在模块中创建 src/m…...

NY164NY165美光固态闪存NY166NY172

美光NY系列固态闪存深度解析&#xff1a;技术、体验与行业洞察 一、技术架构与核心特性解析 美光NY系列&#xff08;NY164/NY165/NY166/NY172&#xff09;作为面向企业级市场的固态闪存产品&#xff0c;其技术设计聚焦高可靠性与性能优化。从架构上看&#xff0c;该系列可能采…...

Spring Boot中HTTP连接池的配置与优化实践

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、HTTP连接池的核心价值 在微服务架构和分布式系统场景中&#xff0c;HTTP客户端频繁创建/断开连接会产生显著的性能损耗。通过连接池技术可以实现&#x…...

【docker】--镜像管理

文章目录 拉取镜像启动镜像为容器连接容器法一法二 保存镜像加载镜像镜像打标签移除镜像 拉取镜像 docker pull mysql:8.0.42启动镜像为容器 docker run -dp 8080:8080 --name container_mysql8.0.42 -e MYSQL_ROOT_PASSWORD123123123 mysql:8.0.42 连接容器 法一 docker e…...

Logisim实验--华科计算机组成原理(保姆级教程) 头歌-存储系统设计实验(汉字库存储芯片扩展实验、MIPS寄存器文件设计)

汉字库存储芯片扩展实验 电路一&#xff1a; 电路二&#xff1a;电路和译码器设置。 两个电路的分线器设计&#xff1a; 只要把电路正确连接就能提交了&#xff0c;但要看到正确的实验结果就想要进行如下操作&#xff1a; 打开参考电路&#xff0c;我要做的就是将每个存储器内…...

Hapi.js知识框架

一、Hapi.js 基础 1. 核心概念 企业级Node.js框架&#xff1a;由Walmart团队创建&#xff0c;现由社区维护 配置驱动&#xff1a;强调声明式配置而非中间件 插件架构&#xff1a;高度模块化设计 安全优先&#xff1a;内置安全最佳实践 丰富的生态系统&#xff1a;官方维护…...

Baklib知识中台架构与智能引擎实践

知识中台架构设计实践 在数字化转型进程中&#xff0c;Baklib基于企业级知识管理需求&#xff0c;构建了模块化分层架构的知识中台体系。该架构采用数据湖仓融合技术&#xff0c;通过统一元数据管理打通业务系统间的信息壁垒&#xff0c;形成覆盖数据采集、清洗、标注的全链路…...

传输层协议UDP

传输层 负责数据能够从发送端传输接收端 . 再谈端口号 端口号 (Port) 标识了一个主机上进行通信的不同的应用程序 ; 在 TCP/IP 协议中 , 用 " 源 IP", " 源端口号 ", " 目的 IP", " 目的端口号 ", " 协议号 " 这样一…...

在Java中实现Parcelable接口和Serializable接口有什么区别?

在 Java 中&#xff0c;Parcelable 和 Serializable 接口都用于对象的序列化和反序列化&#xff0c;但它们的实现方式、性能和使用场景有很大区别。以下是它们的核心对比&#xff1a; 1. 实现方式 Serializable 是 Java 原生接口&#xff0c;只需声明 implements Serializable…...

MinIO WebUI 页面使用

上传文件到桶&#xff0c;选择Share 如果桶是pulic权限&#xff0c;则可以有以下两种方式访问到该对象文件&#xff1a; http://ip:9001/api/v1/download-shared-object/aHR0cDovLzEyNy4wLjAuMTo5MDAwL3dhcmVob3VzZS9wYWltb24vRmxpbmstTG9nby5wbmc_WC1BbXotQWxnb3JpdGhtPUFXU…...

Python | Dashboard制作

运行环境&#xff1a;jupyter notebook (python 3.12.7) Pyecharts 1.安装pyecharts !pip install pyecharts 验证安装是否成功&#xff1a; from pyecharts import __version__ print("Pyecharts版本:", __version__) # 应显示1.x以上版本 2.运行基础版代码&am…...

视频编辑软件无限音频、视频、图文轨

威力导演APP的特色功能包括无限音频、视频、图文轨&#xff0c;以及上百种二/三维特技转场、音/视频滤镜和多种音视频混编输出。此外&#xff0c;它还支持实时高清HDV格式、模拟信号输出&#xff0c;并具有DV25、DVACM、DV、HDV输入和输出等功能。在视频编辑领域&#xff0c;威…...