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

【CubeMX-HAL库】STM32H743II——SDRAM配置所遇问题

推荐的博客和视频:

1、【CubeMX-HAL库】STM32H743—FMC配置SDRAM_stm32h743 sdram 速度-CSDN博客

2、【【STM32CubeMX教程】STM32全外设原理、配置和常用HAL、LL库API使用详解】

3、在百度网盘里有STM32H743的例程:【通过网盘分享的文件:STM32H743官方全部例程】

4、正点原子的开发指南:【通过网盘分享的文件:STM32H743 阿波罗开发指南V1.0】

注:以上就相当于是四种方法,FMC和SDRAM都可以配置好,具体的问题会在下面说。

 自己CubeMX中的配置

FMC初始化

 SDRAM时钟分频、延时和时序

时序是如何配置的可以看以上的博客和视频。时序在CubeMX中配置的时候是会有报错的,可以不用理会。

额外所需的SDRAM发送初始化序列配置

这些代码是在CubeMX中是没有配置的,所以需要额外写。在以上视频和博客中可以看到,官方库、其他人和正点原子都给你写好了,直接将它们的代码全部移植过来就行,并不困难。

例如这是我移植的正点原子的:

/*** @brief       发送SDRAM初始化序列* @param       无* @retval      无*/
void sdram_initialization_sequence(void)
{uint32_t temp = 0;/* SDRAM控制器初始化完成以后还需要按照如下顺序初始化SDRAM */sdram_send_cmd(0, FMC_SDRAM_CMD_CLK_ENABLE, 1, 0);                /* 时钟配置使能 */delay_us(500);                                                    /* 至少延时500us */sdram_send_cmd(0, FMC_SDRAM_CMD_PALL, 1, 0);                      /* 对所有存储区预充电 */sdram_send_cmd(0, FMC_SDRAM_CMD_AUTOREFRESH_MODE, 8, 0);          /* 设置自刷新次数 *//* 配置模式寄存器,SDRAM的bit0~bit2为指定突发访问的长度,* bit3为指定突发访问的类型,bit4~bit6为CAS值,bit7和bit8为运行模式* bit9为指定的写突发模式,bit10和bit11位保留位 */temp = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1  |                  /* 设置突发长度:1(可以是1/2/4/8) */SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL  |                  /* 设置突发类型:连续(可以是连续/交错) */SDRAM_MODEREG_CAS_LATENCY_2          |                  /* 设置CAS值:2(可以是2/3) */SDRAM_MODEREG_OPERATING_MODE_STANDARD|                  /* 设置操作模式:0,标准模式 */SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;                   /* 设置突发写模式:1,单点访问 */sdram_send_cmd(0, FMC_SDRAM_CMD_LOAD_MODE, 1, temp);              /* 设置SDRAM的模式寄存器 */
}

还有注意也要同时移植好测试函数,来测试读写SDRAM是否有问题:

/*** @brief       SDRAM内存测试* @param       x,y:起点坐标* @retval      无
*/
void sdram_test(uint16_t x, uint16_t y)
{  uint32_t i = 0;uint32_t temp = 0;uint32_t sval = 0;        /* 在地址0读到的数据 *//* 每隔16K字节,写入一个数据,总共写入2048个数据,刚好是32M字节 */for (i = 0; i < 32 * 1024 * 1024; i += 16 * 1024){*(volatile uint32_t *)(BANK5_SDRAM_ADDR + i) = temp; temp++;}/* 依次读出之前写入的数据,进行校验 */for (i = 0; i < 32 * 1024 * 1024; i += 16 * 1024) {temp =*(volatile uint32_t*)(BANK5_SDRAM_ADDR + i);if (i == 0){sval = temp;}else if (temp <= sval){break;             /* 后面读出的数据一定要比第一次读到的数据大 */}printf("SDRAM Capacity:%dKB\r\n", (uint16_t)(temp - sval + 1) * 16);           /* 打印SDRAM容量 */}
}

 所遇到的问题和解决方法

配置好FMC和SDRAM后,SDRAM测试程序中,不能对SDRAM进行正常读写,并且会跳入故障中断函数以及硬故障中断函数中。

第一次

以上的操作还是比较简单的。但是在我第一次测试的时候,发现代码卡住在测试代码中第一次写入一个数据中,然后就跳到了一个故障中断函数里:

是一个内存故障处理函数,于是我发现在CubeMX配置内存保护的里面,Speculation default mode(推测默认模式)被设置为了Enable,这个主要是用于平衡性能与功耗。但是在STM32等微控制器的配置中,可能会遇到与Speculation相关的设置选项,如CORTEX-M7核心的Speculation default mode。在这种情况下,将其从Enabled(启用)改为Disabled(禁用)可能是出于减少不必要的麻烦、提高稳定性或满足特定安全要求的考虑。

第二次

第二次我关闭了内存保护,测试的时候,跳到的是一个硬故障中断的函数中,这可能是由于处理器在访问内存时遇到了无法恢复的硬件错误:非法指令、栈溢出、访问未定义的内存地址等。此时就确信是内存保护的问题了。

第三次

重新打开MPU内存保护,第三次测试的时候,代码还是跳到硬故障中断函数中:

对照着正点原子的配置发现,就是内存保护单元没有配置好的问题,在Cube中配置好就行了,注意其内存保护单元的配置是在M7内核里配置的,对照着正点原子配置就好了:
(还有MPU Control Mode,我配置的是Background Region Privileged access only + MPU Enable during hard fault, NMI, and FAULTMASK handlers

/*** @brief       设置某个区域的MPU保护* @param       baseaddr:MPU保护区域的基址(首地址)* @param       size:MPU保护区域的大小(必须是32的倍数,单位为字节),可设置的值参考:CORTEX_MPU_Region_Size* @param       rnum:MPU保护区编号,范围:0~7,最大支持8个保护区域,可设置的值参考:CORTEX_MPU_Region_Number* @param       de:禁止指令访问;0,允许指令访问;1,禁止指令访问* @param       ap:访问权限,访问关系如下:可设置的值参考:CORTEX_MPU_Region_Permission_Attributes*   @arg       MPU_REGION_NO_ACCESS,无访问(特权&用户都不可访问)*   @arg       MPU_REGION_PRIV_RW,仅支持特权读写访问*   @arg       MPU_REGION_PRIV_RW_URO,禁止用户写访问(特权可读写访问)*   @arg       MPU_REGION_FULL_ACCESS,全访问(特权&用户都可访问)*   @arg       MPU_REGION_PRIV_RO,仅支持特权读访问*   @arg       MPU_REGION_PRIV_RO_URO,只读(特权&用户都不可以写)*   @arg       详见:STM32F7编程手册.pdf,4.6节,Table 89.* @param       sen  : 是否允许共用;MPU_ACCESS_NOT_SHAREABLE,不允许;MPU_ACCESS_SHAREABLE,允许* @param       cen  : 是否允许cache;MPU_ACCESS_NOT_CACHEABLE,不允许;MPU_ACCESS_CACHEABLE,允许* @param       ben  : 是否允许缓冲;MPU_ACCESS_NOT_BUFFERABLE,不允许;MPU_ACCESS_BUFFERABLE,允许* @retval      0,成功.*              其他,错误.*/
uint8_t mpu_set_protection(uint32_t baseaddr, uint32_t size, uint32_t rnum, uint8_t de, uint8_t ap, uint8_t sen, uint8_t cen, uint8_t ben)
{MPU_Region_InitTypeDef mpu_region_init_handle;HAL_MPU_Disable();                                                   /* 配置MPU之前先关闭MPU,配置完成以后在使能MPU */mpu_region_init_handle.Enable = MPU_REGION_ENABLE;                   /* 使能该保护区域 */mpu_region_init_handle.Number = rnum;                                /* 设置保护区域 */mpu_region_init_handle.BaseAddress = baseaddr;                       /* 设置基址 */mpu_region_init_handle.DisableExec = de;                             /* 是否允许指令访问 */mpu_region_init_handle.Size = size;                                  /* 设置保护区域大小 */mpu_region_init_handle.SubRegionDisable = 0X00;                      /* 禁止子区域 */mpu_region_init_handle.TypeExtField = MPU_TEX_LEVEL0;                /* 设置类型扩展域为level0 */mpu_region_init_handle.AccessPermission = (uint8_t)ap;               /* 设置访问权限, */mpu_region_init_handle.IsShareable = sen;                            /* 是否共用? */mpu_region_init_handle.IsCacheable = cen;                            /* 是否cache? */mpu_region_init_handle.IsBufferable = ben;                           /* 是否缓冲? */HAL_MPU_ConfigRegion(&mpu_region_init_handle);                       /* 配置MPU */HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);                              /* 开启MPU */return 0;
}/*** @brief       设置需要保护的存储块* @param       无* @note        必须对部分存储区域进行MPU保护,否则可能导致程序运行异常*              比如MCU屏不显示,摄像头采集数据出错等等问题...*/
void mpu_memory_protection(void)
{/* 保护整个DTCM,共128K字节 */mpu_set_protection( 0x20000000,                 /* 基地址 */MPU_REGION_SIZE_128KB,      /* 长度 */MPU_REGION_NUMBER1, 0,      /* NUMER1,允许指令访问 */MPU_REGION_FULL_ACCESS,     /* 全访问 */MPU_ACCESS_NOT_SHAREABLE,   /* 禁止共用 */MPU_ACCESS_CACHEABLE,       /* 允许cache */MPU_ACCESS_BUFFERABLE);     /* 允许缓冲 *//* 保护整个AXI SRAM,共512K字节 */mpu_set_protection( 0x24000000,                 /* 基地址 */MPU_REGION_SIZE_512KB,      /* 长度 */MPU_REGION_NUMBER2, 0,      /* NUMER2,允许指令访问 */MPU_REGION_FULL_ACCESS,     /* 全访问 */MPU_ACCESS_SHAREABLE,       /* 允许共用 */MPU_ACCESS_CACHEABLE,       /* 允许cache */MPU_ACCESS_NOT_BUFFERABLE); /* 禁止缓冲 *//* 保护整个SRAM1~SRAM3,共512K字节 */mpu_set_protection( 0x30000000,                 /* 基地址 */MPU_REGION_SIZE_512KB,      /* 长度 */MPU_REGION_NUMBER3, 0,      /* NUMER3,允许指令访问 */MPU_REGION_FULL_ACCESS,     /* 全访问 */MPU_ACCESS_NOT_SHAREABLE,   /* 禁止共用 */MPU_ACCESS_CACHEABLE,       /* 允许cache */MPU_ACCESS_BUFFERABLE);     /* 允许缓冲 *//* 保护整个SRAM4,共64K字节 */mpu_set_protection( 0x38000000,                 /* 基地址 */MPU_REGION_SIZE_64KB,       /* 长度 */MPU_REGION_NUMBER4, 0,      /* NUMER4,允许指令访问 */MPU_REGION_FULL_ACCESS,     /* 全访问 */MPU_ACCESS_NOT_SHAREABLE,   /* 禁止共用 */MPU_ACCESS_CACHEABLE,       /* 允许cache */MPU_ACCESS_BUFFERABLE);     /* 允许缓冲 *//* 保护MCU LCD屏所在的FMC区域,共64M字节 */mpu_set_protection( 0x60000000,                 /* 基地址 */MPU_REGION_SIZE_64MB,       /* 长度 */MPU_REGION_NUMBER5, 0,      /* NUMER5,允许指令访问 */MPU_REGION_FULL_ACCESS,     /* 全访问 */MPU_ACCESS_NOT_SHAREABLE,   /* 禁止共用 */MPU_ACCESS_NOT_CACHEABLE,   /* 禁止cache */MPU_ACCESS_NOT_BUFFERABLE); /* 禁止缓冲 *//* 保护SDRAM区域,共32M字节 */mpu_set_protection( 0xC0000000,                 /* 基地址 */MPU_REGION_SIZE_32MB,       /* 长度 */MPU_REGION_NUMBER6, 0,      /* NUMER6,允许指令访问 */MPU_REGION_FULL_ACCESS,     /* 全访问 */MPU_ACCESS_NOT_SHAREABLE,   /* 禁止共用 */MPU_ACCESS_CACHEABLE,       /* 允许cache */MPU_ACCESS_BUFFERABLE);     /* 允许缓冲 *//* 保护整个NAND FLASH区域,共256M字节 */mpu_set_protection( 0x80000000,                 /* 基地址 */MPU_REGION_SIZE_256MB,      /* 长度 */MPU_REGION_NUMBER7, 1,      /* NUMER7,禁止指令访问 */MPU_REGION_FULL_ACCESS,     /* 全访问 */MPU_ACCESS_NOT_SHAREABLE,   /* 禁止共用 */MPU_ACCESS_NOT_CACHEABLE,   /* 禁止cache */MPU_ACCESS_NOT_BUFFERABLE); /* 禁止缓冲 */
}

最后再测试的时候,就可以得到正常的结果了:

结论

在配置STM32H7的SDRAM的时候(其实不止这个,在配置有关内存的时候),都需要配置好内存保护单元。内存单元的配置在CubeMX中CORTEX_M7中配置,注意要关闭Speculation default mode(推测默认模式),也是为了减少不必要的麻烦、提高稳定性或满足特定安全要求。

相关文章:

【CubeMX-HAL库】STM32H743II——SDRAM配置所遇问题

推荐的博客和视频&#xff1a; 1、【CubeMX-HAL库】STM32H743—FMC配置SDRAM_stm32h743 sdram 速度-CSDN博客 2、【【STM32CubeMX教程】STM32全外设原理、配置和常用HAL、LL库API使用详解】 3、在百度网盘里有STM32H743的例程&#xff1a;【通过网盘分享的文件&#xff1a;S…...

mac上使用docker搭建gitlab

在 Mac 上搭建 GitLab 可以使用 Docker 来简化安装过程 一、安装详细步骤 1. 安装 Docker 如果你尚未安装 Docker&#xff0c;可以通过以下步骤安装&#xff1a; 下载并安装 Docker Desktop for Mac.安装完成后&#xff0c;启动 Docker Desktop&#xff0c;确保 Docker 运行…...

二维数组操作

代码结构 main.c #include <stdio.h> #include <stdlib.h>#define LEN 100int main() {//通过指针引用多维数组# if 1//定义多维数组int a[3][5] {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};int row sizeof(a) /sizeof(a[0]);int colum sizeof(a[0]) / sizeof(a[0…...

uniapp设置tabBar高斯模糊并设置tabBar高度占位

1、设置tabBar高斯模糊 2、设置tabBar高度占位 &#xff08;1&#xff09;需要先在App.vue中获取一下 uni.getSystemInfoSync().windowBottom; //返回值是tabBar的高度&#xff08;2&#xff09;在app.vue中定义一个全局样式 3、在需要的页面底部&#xff0c;加上一个view&…...

上市公司代理成本数据大全(第一类和第二类代理成本均有)1991-2023年

一、计算方式&#xff1a; &#xff08;1&#xff09; 第一类代理成本 AC1:经营费用率&#xff0c;参考顶刊《管理世界》李文贵和余明桂(2015)老师的研究构建代理成本 AC2:管理费用率&#xff0c;参考C刊《经济管理》彭雅哲和汪昌云(2021) 老师的研究构建代理成本 AC3:资产周转…...

CA-Markov模型概述及其MATLAB实现

CA-Markov模型概述及其MATLAB实现 1 Markov模型2 CA-Markov模型2.1 元胞自动机(Cellular Aumatomata, 简称CA)2.1.1 构成2.2 准确度评估(Accuracy assessment)2.2.1 Kappa coefficient参考1.参考文献2.其它参考资料1 Markov模型 Markov模型是一种数学模型,用于描述系统在不…...

《生成式 AI》课程 第3講 CODE TASK执行文章摘要的机器人

课程 《生成式 AI》课程 第3講&#xff1a;訓練不了人工智慧嗎&#xff1f;你可以訓練你自己-CSDN博客 任务1:总结 1.我们希望你创建一个可以执行文章摘要的机器人。 2.设计一个提示符&#xff0c;使语言模型能够对文章进行总结。 model: gpt-4o-mini,#gpt-3.5-turbo, import…...

HCIP-HarmonyOS Application Developer 习题(二十二)

1、用户将手机导航迁移至智能手表之后&#xff0c;智能手表如果需要获取手机传过来的数据&#xff0c;从下列哪个方法中获取? A、onCompleteContinuation() B、onStartContinuation() C、onRestoreData() D、onSaveData() 答案&#xff1a;C 分析&#xff1a;FA发起迁移后&am…...

c++原型模式(Prototype Pattern)

原型模式&#xff08;Prototype Pattern&#xff09; 原型模式是一种创建型设计模式&#xff0c;它允许你通过复制现有对象来创建新的对象&#xff0c;而不是通过类实例化来创建对象。这种模式在开发时需要大量类似对象的情况下非常有用。原型模式的核心是一个具有克隆方法的接…...

联通大数据面试题及参考答案

Flink 是怎么使用的? Flink 是一个分布式流批一体的开源平台,以下是其一般使用步骤及相关要点: 环境搭建 首先要根据需求选择合适的部署模式,比如本地模式用于开发测试,集群模式(如 Standalone、YARN、Kubernetes 等)用于生产环境。安装相应的 JDK 版本(Flink 基于 Ja…...

MySQL数据库:SQL语言入门 【3】(学习笔记)

目录 5&#xff0c;TCL —— 事务控制语言&#xff08;Transaction Control Language&#xff09; &#xff08;1&#xff09;事务的概念作用 &#xff08;2&#xff09;事务的特性 【1】原子性 【2】一致性 【3】隔离性 【4】持久性 &#xff08;3&#xff09;并发事务带来…...

uniapp 实现tabbar分类导航及滚动联动效果

思路&#xff1a;使用两个scroll-view&#xff0c;tabbar分类导航使用scrollleft移动&#xff0c;内容联动使用页面滚动onPageScroll监听滚动高度 效果图 <template><view class"content" ><view :class"[isSticky ? tab-sticky: ]">…...

华为数字化转型的本质为何是管理变革

随着全球经济的加速数字化转型&#xff0c;企业纷纷进入了数字化时代的大潮。华为作为数字化转型的领军者&#xff0c;已经成功实践了从传统企业向数字化企业的蜕变。对于企业而言&#xff0c;数字化转型不仅仅是新技术的应用&#xff0c;更是一场管理变革。在这场变革的背后&a…...

【数据库】深入解析慢 SQL 的识别与优化策略

文章目录 什么是慢 SQL&#xff1f;慢 SQL 的危害如何检测分析慢 SQL使用 MySQL 慢查询日志利用 EXPLAIN 分析执行计划通过 Profiling 获取详细执行信息借助慢 SQL 收集分析平台 实际案例解析&#xff1a;600秒的慢 SQL 优化之旅问题描述初步分析优化步骤1. 优化 SQL 语句结构2…...

Linux从入门到精通

远程连接linux操作系统 Linux的图形化界面并不稳定&#xff0c;因此往往使用命令行去接触Linux操作系统 远程连接到Linux操作系统需要借助一个叫做finalshell的软件&#xff0c;官方地址如下&#xff1a; finalshell官方下载 在linux的terminal终端中输入指令 ifconfig就可以…...

代码随想录算法训练营第四十四天|Day44 动态规划

1143.最长公共子序列 视频讲解&#xff1a;https://www.bilibili.com/video/BV1ye4y1L7CQ https://programmercarl.com/1143.%E6%9C%80%E9%95%BF%E5%85%AC%E5%85%B1%E5%AD%90%E5%BA%8F%E5%88%97.html 思路 #define max(a, b) ((a) > (b) ? (a) : (b)) int longestCommonSu…...

C++初阶——优先队列

一、什么是优先队列 优先队列是一个容器适配器&#xff0c;存储于优先队列中的元素按照某种优先级自动排序。优先队列类似于堆&#xff0c;元素可以随时插入&#xff0c;但是只能弹出优先级最高的元素。默认是一个大根堆&#xff0c;也就是元素越大&#xff0c;优先级越高。 二…...

10月月报 | Apache DolphinScheduler进展总结

各位热爱 Apache DolphinScheduler 的小伙伴们&#xff0c;社区10月份月报更新啦&#xff01;这里将记录 DolphinScheduler 社区每月的重要更新&#xff0c;欢迎关注&#xff01; 月度Merge之星 感谢以下小伙伴10月份为 Apache DolphinScheduler 所做的精彩贡献&#xff08;排…...

WSL--无需安装虚拟机和docker可以直接在Windows操作系统上使用Linux操作系统

安装WSL命令 管理员打开PowerShell或Windows命令提示符&#xff0c;输入wsl --install&#xff0c;然后回车 注意&#xff1a;此命令将启用运行 WSL 和安装 Linux 的 Ubuntu 发行版所需的功能。 注意&#xff1a;默认安装最新的Ubuntu发行版。 注意&#xff1a;默认安装路径是…...

《AI 之影》

《AI 之影》 城市的喧嚣如同一幅永不停息的画卷&#xff0c;在钢筋水泥的丛林中&#xff0c;人们匆忙地穿梭&#xff0c;追逐着各自的梦想与欲望。而在这看似平凡的都市之中&#xff0c;一场悄然的变革正在酝酿。 他叫佑介&#xff0c;一个孤独的城市漫步者。每天&#xff0c;他…...

SaaS级AI员工系统源码商用版,多租户+计费系统+API分销,一套源码搞定

温馨提示&#xff1a;文末有资源获取方式最近“龙虾AI”的热度居高不下&#xff0c;到处都在讨论如何“养龙虾”。但观察下来发现&#xff0c;这类应用对普通用户而言技术门槛还是偏高&#xff0c;部署、配置、调试都需要专人跟进&#xff0c;最终往往沦为摆设。源码获取方式在…...

springboot框架健康饮食营养管理信息系统

目录需求分析与系统设计技术栈选型与环境搭建核心功能实现数据可视化与报告生成测试与部署项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作需求分析与系统设计 明确健康饮食营养管理系统的核心需求&#xff0c;包括用户注册登录…...

vLLM-v0.17.1实操手册:Prometheus监控指标接入与告警配置

vLLM-v0.17.1实操手册&#xff1a;Prometheus监控指标接入与告警配置 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库&#xff0c;由加州大学伯克利分校的天空计算实验室(Sky Computing Lab)开发&#xff0c;现已发展为社区驱动的开源项目。这个框…...

OpenClaw+Qwen3.5-4B-Claude:5个提升效率的CLI增强技能

OpenClawQwen3.5-4B-Claude&#xff1a;5个提升效率的CLI增强技能 1. 为什么需要CLI增强技能 作为一个长期与终端打交道的开发者&#xff0c;我发现自己每天要重复输入大量相似命令。比如查看日志时要反复输入tail -f加路径&#xff0c;管理Docker时要不断敲docker ps -a。更…...

如何快速恢复丢失的Ren‘Py游戏源码:Unrpyc终极反编译指南

如何快速恢复丢失的RenPy游戏源码&#xff1a;Unrpyc终极反编译指南 【免费下载链接】unrpyc A renpy script decompiler 项目地址: https://gitcode.com/gh_mirrors/un/unrpyc 你是否曾经遇到过精心制作的RenPy游戏源代码意外丢失&#xff0c;只剩下编译后的.rpyc文件&…...

Connect to Oracle Database with JDBC Driver

1. Overview The Oracle Database is one of the most popular relational databases. In this tutorial, we’ll learn how to connect to an Oracle Database using a JDBC Driver. 2. The Database To get us started, we need a database. If we don’t have access to …...

线程池:Java 并发编程的核心武器

线程池&#xff1a;Java 并发编程的"核心武器" 线程池是管理和复用线程的高级工具&#xff0c;它能显著提高程序性能&#xff0c;避免频繁创建和销毁线程的开销。 为什么需要线程池&#xff1f; 没有线程池的问题 // 传统方式&#xff1a;来一个任务创建一个线程 pub…...

为什么流水线ADC能用Dither,而SAR ADC效果差?深入解析两种架构下的Dither技术差异与改进方案

流水线ADC与SAR ADC中Dither技术的差异化设计与工程实践 在高速高精度数据采集系统中&#xff0c;量化噪声的非线性特性始终是困扰设计者的核心难题。当我们用频谱分析仪观察一个理想正弦波经过ADC转换后的输出时&#xff0c;那些突兀的谐波分量往往源自量化过程的非线性失真。…...

vLLM-v0.17.1效果展示:vLLM 0.17.1对Long Context(256K)支持验证

vLLM-v0.17.1效果展示&#xff1a;vLLM 0.17.1对Long Context&#xff08;256K&#xff09;支持验证 1. vLLM框架核心能力概览 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库&#xff0c;最初由加州大学伯克利分校的天空计算实验室开发&#xff0c;现已发展为社区…...

macOS风格光标主题:从视觉革新到交互未来的全面探索

macOS风格光标主题&#xff1a;从视觉革新到交互未来的全面探索 【免费下载链接】apple_cursor Free & Open source macOS Cursors. 项目地址: https://gitcode.com/gh_mirrors/ap/apple_cursor 价值解析&#xff1a;重新定义数字交互的视觉语言 在当今多设备协同的…...