SparkFun HyperDisplay SSD1309 OLED驱动库详解

news2026/4/6 11:03:18
1. 项目概述SparkFun HyperDisplay SSD1309 是 SparkFun Electronics 针对基于 SSD1309 显示驱动芯片的 OLED 模块推出的标准化嵌入式显示控制库。该库并非独立实现而是作为 SparkFun HyperDisplay 显示抽象框架Display Abstraction Framework的专用扩展组件专为 SSD1309 驱动 IC 设计。其核心目标是屏蔽底层通信协议细节与寄存器操作复杂性为上层应用提供统一、稳定、可移植的显示接口同时保持对硬件资源的高效利用。SSD1309 是 Solomon Systech现属 Synaptics推出的单色 OLED 显示控制器广泛应用于 128×64、128×32 等分辨率的 0.96 英寸、0.69 英寸等小型 OLED 屏模组中。它兼容 SSD1306 的指令集但在时序控制、对比度调节、预充电周期配置等方面提供了更精细的寄存器选项并原生支持 8-bit 8080 并行、SPI四线/三线、I²C标准模式/快速模式等多种主机接口。HyperDisplay SSD1309 库正是围绕这些硬件特性构建通过分层设计将设备驱动Device Driver、传输层Transport Layer与显示抽象层Display Abstraction Layer解耦使开发者无需深入研究 SSD1309 数据手册即可快速驱动屏幕。该库的工程价值在于其“标准化”与“可扩展性”。所谓标准化体现在其严格遵循 HyperDisplay 框架定义的display_t接口契约所有显示操作初始化、清屏、绘图、刷新、休眠均通过一组固定的函数指针完成上层应用代码与具体驱动芯片完全解耦所谓可扩展性则体现为其为 SPI 和 I²C 两种主流串行总线提供了完整的类ClassStub——即符合 C 面向对象风格的虚基类模板开发者仅需继承并实现writeCommand()、writeData()、writeBuffer()等纯虚函数即可无缝接入任意 HAL 或裸机外设驱动无需修改上层显示逻辑。在实际嵌入式项目中该库常被用于 STM32F4/F7/H7 系列配合 HAL_SPI/HAL_I2C、ESP32配合 ESP-IDF SPI/I²C 驱动、nRF52840配合 nRF SDK TWI/SPI等平台。其轻量级设计无动态内存分配、无浮点运算、最小 RAM 占用约 256 字节帧缓冲区使其特别适合资源受限的 MCU 场景如电池供电的传感器节点、便携式调试工具、工业 HMI 子模块等。2. 系统架构与设计原理2.1 分层架构模型HyperDisplay SSD1309 采用清晰的三层架构每一层承担明确职责确保高内聚、低耦合层级模块职责关键组件显示抽象层 (DAL)HyperDisplay核心框架定义统一显示接口管理显示状态、坐标系、颜色空间display_t结构体、display_init()、display_drawPixel()、display_flush()设备驱动层 (DDL)SSD1309驱动实现实现 SSD1309 特定寄存器配置、命令序列、数据写入逻辑ssd1309_init(),ssd1309_setContrast(),ssd1309_setPageStart()传输层 (TL)SSD1309_SPI/SSD1309_I2C类封装物理总线通信将命令/数据字节流转换为硬件操作SSD1309_SPI::writeCommand(),SSD1309_I2C::writeData()这种分层设计的核心工程目的是隔离变化当更换 MCU 平台如从 STM32 迁移到 RP2040时仅需重写传输层类当升级显示硬件如从 SSD1309 换为 SSD1322时仅需替换设备驱动层而上层业务逻辑如菜单渲染、波形绘制完全无需改动。2.2 SSD1309 寄存器映射与关键配置SSD1309 的功能由一系列 8-bit 控制寄存器决定。HyperDisplay SSD1309 库对关键寄存器进行了语义化封装避免开发者直接操作十六进制地址。以下是库中封装的核心寄存器及其工程意义寄存器名称SSD1309 地址库中对应 API工程作用与配置要点Display On/Off0xAE/0xAFssd1309_displayOn(),ssd1309_displayOff()控制 OLED 像素发光。关闭时功耗降至最低10μA但 RAM 内容保留。适用于待机模式。Set Contrast0x81ssd1309_setContrast(uint8_t level)设置对比度等级0x00–0xFF。注意SSD1309 的默认对比度值0x7F通常过亮易导致烧屏。推荐初始化时设为0x50–0x60。Set Pre-Charge Period0xD9ssd1309_setPreChargePeriod(uint8_t phase1, uint8_t phase2)配置 OLED 像素充放电时间。phase10x01–0x0F影响亮度稳定性phase20x01–0x0F影响响应速度。典型值{0x02, 0x02}平衡功耗与残影。Set VCOMH Deselect Level0xDBssd1309_setVcomhLevel(uint8_t level)设置 VCOMH 电压0x00–0x03。关键点SSD1309 默认0x000.65×VCC可能导致暗部发灰建议设为0x020.83×VCC提升对比度。Memory Addressing Mode0x20ssd1309_setAddressingMode(uint8_t mode)切换寻址模式0x00Horizontal、0x01Vertical、0x02Page。HyperDisplay 强制使用 Page Mode因其最契合 SSD1309 的 8-bit 行组织结构每页 8 行像素DMA 传输效率最高。所有寄存器写入均通过ssd1309_writeCommand()函数完成该函数内部调用传输层的writeCommand()方法。数据写入如显存填充则通过ssd1309_writeData()调用传输层的writeData()方法。这种分离确保了命令与数据在物理总线上的正确时序例如 I²C 中命令需带控制字节数据则不带。2.3 传输层 Stub 设计解析SPI 和 I²C Stub 的设计是本库最具工程智慧的部分。它们以 C 抽象基类形式存在强制子类实现核心 I/O 方法同时提供默认的高级操作如批量写入、自动命令/数据切换极大降低移植成本。SPI Stub (SSD1309_SPI) 关键实现逻辑SSD1309 的 SPI 接口为四线制SCLK, MOSI, DC, CS其中DCData/Command引脚是关键——高电平时 MOSI 数据被视为显示数据低电平时被视为命令。SSD1309_SPI类通过以下方式处理// 在子类中必须实现的底层方法 virtual void writeCommand(uint8_t cmd) override { digitalWrite(_dcPin, LOW); // DC 0: Command mode digitalWrite(_csPin, LOW); // CS 0: Enable chip spi_transfer(cmd, 1); // 发送单字节命令 digitalWrite(_csPin, HIGH); // CS 1: Disable chip } virtual void writeData(const uint8_t* data, size_t len) override { digitalWrite(_dcPin, HIGH); // DC 1: Data mode digitalWrite(_csPin, LOW); spi_transfer(data, len); // 批量发送数据高效 digitalWrite(_csPin, HIGH); }工程优势writeData()支持批量传输一次 SPI 事务可写入整行128 字节或整页1024 字节数据避免了逐字节操作的开销。在 STM32 上这可直接映射到 HAL_SPI_Transmit() 的 DMA 模式CPU 占用率趋近于零。I²C Stub (SSD1309_I2C) 关键实现逻辑SSD1309 的 I²C 接口要求命令和数据均通过同一地址通常为0x3C或0x3D传输但需在数据前添加控制字节Control Byte区分类型。控制字节格式为0b010000000x40表示后续为数据0b000000000x00表示后续为命令。SSD1309_I2C类封装如下// 子类中实现的底层方法 virtual void writeCommand(uint8_t cmd) override { uint8_t buffer[2] {0x00, cmd}; // Control Byte Command i2c_write(_i2cAddr, buffer, 2); } virtual void writeData(const uint8_t* data, size_t len) override { // 构造 [Control Byte, Data[0], Data[1], ...] 缓冲区 uint8_t* txBuf (uint8_t*)malloc(len 1); txBuf[0] 0x40; // Data control byte memcpy(txBuf[1], data, len); i2c_write(_i2cAddr, txBuf, len 1); free(txBuf); }工程注意点由于 I²C 协议限制writeData()的len不宜过大建议 ≤ 32 字节否则可能触发从机 NACK。库默认启用SSD1309_I2C_BUFFERED_WRITE宏将大数据块自动分片确保可靠性。3. 核心 API 详解与使用范式3.1 设备驱动层 API所有 SSD1309 驱动函数均声明于SSD1309.h以ssd1309_为前缀参数设计严格遵循嵌入式开发惯例无隐式类型转换、明确长度参数、返回错误码。API原型参数说明典型应用场景ssd1309_init()bool ssd1309_init(display_t* disp, SSD1309_Transport* transport)disp: 指向已分配的display_t结构体transport: 指向已实例化的SSD1309_SPI或SSD1309_I2C对象。返回true表示初始化成功。在main()开始处调用完成硬件复位、寄存器初始化、显存清零。ssd1309_setContrast()void ssd1309_setContrast(uint8_t level)level: 对比度值0x00–0xFF。注意此函数不立即生效需调用display_flush()后才更新硬件。在初始化后根据环境光调整或在 UI 主题切换时动态修改。ssd1309_invertDisplay()void ssd1309_invertDisplay(bool invert)invert:true为反色显示黑底白字false为正常白底黑字。实现高对比度模式、夜间模式或电池电量低时的省电反色 UI。ssd1309_setEntireDisplayOn()void ssd1309_setEntireDisplayOn(bool on)on:true强制全屏点亮忽略显存内容false恢复正常显示。用于硬件自检、工厂测试或紧急告警如红色全屏闪烁。关键行为说明ssd1309_init()内部执行的是一系列不可跳过的硬件初始化序列拉低RESReset引脚至少 3μs再拉高发送0xAEDisplay Off配置0x20Page Addressing Mode、0x40Start Line 0、0xA1Segment Re-map、0xC8Com Output Scan Dir等基础显示方向设置0x81Contrast、0xD9Pre-charge、0xDBVCOMH等模拟参数发送0xAFDisplay On。3.2 显示抽象层 APIHyperDisplay 标准接口display_t结构体是整个框架的枢纽其函数指针成员由ssd1309_init()自动填充。开发者应始终通过display_*函数操作而非直接调用ssd1309_*。API原型工程要点代码示例display_init()bool display_init(display_t* disp)必须在ssd1309_init()之后调用完成框架内部状态初始化如分配帧缓冲区。if (!display_init(myDisplay)) { /* 错误处理 */ }display_clear()void display_clear(display_t* disp)清空本地帧缓冲区RAM不立即刷新屏幕。这是高效绘图的前提——所有绘图操作都在缓冲区进行。display_clear(myDisplay);display_drawPixel()void display_drawPixel(display_t* disp, int16_t x, int16_t y, uint16_t color)color为 16-bit但 SSD1309 仅支持单色故color ! 0视为画点color 0视为擦除。display_drawPixel(myDisplay, 64, 32, 1); // 画中心点display_drawFastVLine()void display_drawFastVLine(display_t* disp, int16_t x, int16_t y, int16_t h, uint16_t color)绘制垂直线。性能关键内部直接操作显存字节比循环调用drawPixel()快 10 倍以上。display_drawFastVLine(myDisplay, 10, 0, 64, 1);display_flush()void display_flush(display_t* disp)唯一将帧缓冲区内容写入 SSD1309 显存的操作。必须在所有绘图完成后调用否则屏幕无变化。display_flush(myDisplay); // 刷新帧缓冲区Frame Buffer机制详解HyperDisplay 为 SSD1309 分配一块128 * 64 / 8 1024字节的 RAM 区域作为显存镜像。所有display_draw*函数均在此区域按位bit操作。例如display_drawPixel(disp, 10, 5)会计算出该像素位于第5/8 0页Page 0第5%8 5行Bit 5列地址10然后对buffer[0*128 10]的第 5 位进行置位。display_flush()则将整个 1024 字节缓冲区通过ssd1309_writeData()一次性写入 SSD1309 的 GDDRAM。3.3 FreeRTOS 集成实践在多任务系统中直接裸调用display_flush()可能引发竞态条件如 Task A 正在绘图Task B 调用flush导致部分更新。HyperDisplay SSD1309 提供了线程安全的集成方案// 1. 创建显示任务专用队列存储待刷新的矩形区域 QueueHandle_t xDisplayQueue; xDisplayQueue xQueueCreate(5, sizeof(Rect_t)); // 最多缓存5个区域 // 2. 在显示任务中循环处理 void vDisplayTask(void *pvParameters) { Rect_t rect; for(;;) { if (xQueueReceive(xDisplayQueue, rect, portMAX_DELAY) pdPASS) { // 临界区确保 flush 原子性 taskENTER_CRITICAL(); display_setClipRect(myDisplay, rect); // 设置刷新区域 display_flush(myDisplay); taskEXIT_CRITICAL(); } } } // 3. 其他任务通过队列请求刷新 Rect_t updateArea {.x0, .y0, .w128, .h64}; xQueueSend(xDisplayQueue, updateArea, 0);此方案将显示刷新集中到单一任务避免了互斥锁Mutex的开销且通过display_setClipRect()限定刷新范围进一步提升效率。4. 硬件连接与平台移植指南4.1 典型硬件连接以 STM32F407VG 为例SSD1309 引脚STM32 引脚说明硬件注意事项VCC3.3V电源正极严禁接 5VSSD1309 为 3.3V 逻辑5V 会永久损坏。GNDGND电源地确保共地避免噪声。SCL/SCKPB13(I²C1_SCL) /PA5(SPI1_SCK)时钟线I²C 需外接 4.7kΩ 上拉电阻至 3.3V。SDA/MOSIPB14(I²C1_SDA) /PA7(SPI1_MOSI)数据线同上I²C 上拉SPI 无上拉要求。DCPA8数据/命令选择SPI 模式必需。可配置为推挽输出。CSPA9片选SPI 模式必需。低电平有效。RESPA10复位低电平复位。可配置为推挽输出上电时需保证高电平。关键布线原则SPI 信号线SCK, MOSI, DC, CS应尽量短且等长远离高频干扰源如晶振、开关电源。I²C 总线若挂载多个设备上拉电阻需按总线电容重新计算典型值 2.2kΩ–10kΩ。4.2 STM32 HAL 移植步骤SPI 模式CubeMX 配置启用SPI1Mode 设为Full-Duplex MasterPrescaler 设为810MHz SCK满足 SSD1309 最大 10MHz 要求。配置PA8(DC),PA9(CS),PA10(RES) 为GPIO_Output初始电平High。生成代码。实现SSD1309_SPI子类class MySSD1309_SPI : public SSD1309_SPI { public: MySSD1309_SPI(SPI_HandleTypeDef* hspi, GPIO_TypeDef* csPort, uint16_t csPin, GPIO_TypeDef* dcPort, uint16_t dcPin, GPIO_TypeDef* resPort, uint16_t resPin) : SSD1309_SPI(csPort, csPin, dcPort, dcPin, resPort, resPin), _hspi(hspi) {} protected: virtual void spi_transfer(const uint8_t* tx, size_t len) override { HAL_SPI_Transmit(_hspi, (uint8_t*)tx, len, HAL_MAX_DELAY); } virtual void spi_transfer(uint8_t* tx, uint8_t* rx, size_t len) override { HAL_SPI_TransmitReceive(_hspi, tx, rx, len, HAL_MAX_DELAY); } private: SPI_HandleTypeDef* _hspi; };主程序初始化// 全局对象 display_t myDisplay; MySSD1309_SPI myTransport(hspi1, GPIOA, GPIO_PIN_9, GPIOA, GPIO_PIN_8, GPIOA, GPIO_PIN_10); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SPI1_Init(); // 初始化显示 if (!ssd1309_init(myDisplay, myTransport)) { Error_Handler(); // 初始化失败 } if (!display_init(myDisplay)) { Error_Handler(); } display_clear(myDisplay); display_drawString(myDisplay, 0, 0, Hello World!, FONT_7X10, 1); display_flush(myDisplay); while (1) { /* 应用循环 */ } }5. 常见问题诊断与性能优化5.1 典型故障现象与排查现象可能原因诊断步骤解决方案屏幕全黑无任何反应1. 电源未接或电压错误2.RES引脚未正确释放卡在低电平3.CS或DC引脚接错1. 万用表测VCC-GND是否为 3.3V2. 示波器看RES上电波形是否为干净脉冲3. 检查原理图确认CS/DC连接到正确 GPIO1. 更换电源2. 检查RES上拉电阻及 MCU 初始化代码3. 修正硬件连接或代码中引脚定义显示内容错乱、移位1.setAddressingMode()未设为0x02Page Mode2.setStartLine()配置错误3. 帧缓冲区大小与屏幕分辨率不匹配1. 在ssd1309_init()后添加ssd1309_setAddressingMode(0x02)2. 检查ssd1309_init()中0x40命令是否发送1. 确保初始化序列包含正确的寻址模式设置2. 使用逻辑分析仪抓取初始化时序比对数据手册屏幕闪烁或亮度不均1.setPreChargePeriod()或setVcomhLevel()配置不当2. 电源纹波过大尤其在VCC和VDD引脚1. 尝试ssd1309_setPreChargePeriod(0x02, 0x02)和ssd1309_setVcomhLevel(0x02)2. 示波器测量VCC引脚纹波1. 调整寄存器值2. 在VCC引脚就近增加 10μF 钽电容 100nF 陶瓷电容5.2 关键性能优化策略减少display_flush()调用频率避免“画一个点就刷一次”。应遵循“Clear → Draw → Flush”范式。对于动态内容如滚动文本仅刷新变化区域// 错误每帧都全刷 display_clear(disp); display_drawString(disp, x, y, text, font, 1); display_flush(disp); // 效率低下 // 正确只刷新旧文本重叠区域 Rect_t oldRect {oldX, oldY, strlen(oldText)*font-w, font-h}; Rect_t newRect {x, y, strlen(text)*font-w, font-h}; Rect_t unionRect getUnionRect(oldRect, newRect); display_clearRect(disp, unionRect); // 清空重叠区 display_drawString(disp, x, y, text, font, 1); display_flushRect(disp, unionRect); // 只刷重叠区启用硬件加速如适用某些高端 MCU如 STM32H7的 DMA2D 外设可加速矩形填充。可重写display_fillRect()为 DMA2D 驱动将 CPU 占用率从 100% 降至 5%。优化字体渲染display_drawString()内部逐字节解析字体数据。对于固定宽度字体如FONT_7X10可预先计算字符起始偏移避免运行时除法运算// 预计算const uint16_t charOffset[128] {0, 10, 20, ...}; // 渲染时memcpy(buffer, fontData[charOffset[c]], font-h);6. 扩展应用与进阶实践6.1 驱动多块 SSD1309 屏幕HyperDisplay 框架天然支持多显示器。只需为每块屏幕创建独立的display_t和SSD1309_Transport实例并分配不同的CS引脚// 屏幕1 MySSD1309_SPI disp1Transport(hspi1, GPIOA, GPIO_PIN_9, ...); display_t disp1; ssd1309_init(disp1, disp1Transport); display_init(disp1); // 屏幕2共用 SPI不同 CS MySSD1309_SPI disp2Transport(hspi1, GPIOB, GPIO_PIN_0, ...); // CS on PB0 display_t disp2; ssd1309_init(disp2, disp2Transport); display_init(disp2); // 分别绘图 display_clear(disp1); display_drawString(disp1, 0,0,Disp1,...); display_flush(disp1); display_clear(disp2); display_drawString(disp2, 0,0,Disp2,...); display_flush(disp2);6.2 与传感器融合实时波形显示结合 ADC 采集与 OLED 显示构建简易示波器#define WAVE_WIDTH 128 #define WAVE_HEIGHT 32 uint8_t waveBuffer[WAVE_WIDTH]; // 波形缓冲区 void updateWaveform(int16_t adcValue) { // 将 ADC 值0-4095映射到 0-3132级高度 uint8_t y 31 - (adcValue 8); // 简单缩放 // 左移缓冲区插入新点 memmove(waveBuffer, waveBuffer[1], WAVE_WIDTH-1); waveBuffer[WAVE_WIDTH-1] y; // 绘制波形优化只刷新变化的垂直线 display_clear(myDisplay); for (int x 0; x WAVE_WIDTH; x) { display_drawFastVLine(myDisplay, x, 32-y, y, 1); } display_flush(myDisplay); }此代码展示了如何将底层驱动能力转化为实际应用价值通过精确控制每个像素实现毫秒级响应的实时数据可视化。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…