GD32VW553-IOT 测评和vscode开发环境搭建

1. 背景介绍

iCEasy商城的产品, Firefly Workshop 萤火工厂的样片, 是一款基于GD32VW553 MCU的开源硬件, 这款MCU内置了32bit的RISC-V内核, 支持双模无线WIFI-6和BLE-5.2, 最高主频可达160Mhz.

本人曾在公司参与开发了一款基于RISC-V内核的触控芯片, 所以之前接触过兆易更早的一款RISC-V的MCU, 即GD32VF103, 同时也使用过GD32W5系列的IOT MCU, 这次正好看到了结合GD的V和W联手的产品, 于是就申请了一块板子回来研究研究。

同样想要玩玩这款芯片的小伙伴, 可以去申请样品, 链接如下:https://www.iceasy.com/

2. 准备工作

样品拿到手之后, 先去GD官网把手册和开发软件下载一下, 同时也可以去iCEasy商城网站上下载对应资料。https://www.gd32mcu.com/cn/download/0?kw=GD32VW5

  • 用户手册、数据手册
  • 固件库、原理图
  • GD32AllInOneProgrammer_win
  • GD32EmbeddedBuilder

3. 展示一下

实物图系统框图

在这里插入图片描述

在这里插入图片描述

4. 创建工程

基于GD32EmbeddedBuilder可以很方便快速的把demo程序跑起来, 下面是创建工程的步骤, 软件提供了MCU的ARM C project和RISC-V Cproject, 本次测试的芯片是基于RISC-V的, 因此选择对应的选项.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 工程结构

Firmware目录中是GD的外设库和RISC-V的驱动库, inc和src是具体实现的功能, 可以参考官方提供的demo来移植想要的功能, idscripts提供的链接文件, 指定了芯片的内存大小和布局, openocd提供了基于gd_link的openocd下载脚本。

比较需要注意的是Firmware/RISC-V/env_Eclipse和stubs文件夹, 其中stubs文件夹提供的是一些系统调用的桩函数, env_Eclipse文件夹下提供的entry.S和start.S实现了芯片启动部分和中断向量表设置。

在这里插入图片描述
在这里插入图片描述
编译选项如图所示:
riscv-nuclei-elf-gcc -march=rv32imac -mabi=ilp32 -mcmodel=medlow -msmall-data-limit=8 -mdiv -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -std=gnu11 -DGD_ECLIPSE_GCC -DUSE_STDPERIPH_DRIVER ........

riscv-nuclei-elf-gcc -march=rv32imac -mabi=ilp32 -mcmodel=medlow -msmall-data-limit=8 -mdiv -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -Wa,-adhlns=Firmware/RISCV/env_Eclipse/entry.o.lst -x assembler-with-cpp -I"../Firmware/RISCV/drivers" -c -o "Firmware/RISCV/env_Eclipse/entry.o" "../Firmware/RISCV/env_Eclipse/entry.S"

riscv-nuclei-elf-gcc -march=rv32imac -mabi=ilp32 -mcmodel=medlow -msmall-data-limit=8 -mdiv -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -Wl,-Map,"gd32vw553_test.map" -T GD32VW55X.lds -nostartfiles -Xlinker --gc-sections -L"../ldscripts/" --specs=nano.specs --specs=nosys.specs -o "gd32vw553_test.elf" ......

6. 代码下载

  1. 启动模式修改, 从表中可以看出, 将BOOT0接高之后, 会从Bootloader启动, 就能用串口ISP更新固件, 根据原理图可以看出, 首先需要将R4和R5两个电阻焊接上
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

7. 串口LOG打印和LED闪烁

  1. 使用的是串口0和PA15作为LED口

      int main(void){/* configure systick */systick_config();eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL3_PRIO1);/* enable the led clock */rcu_periph_clock_enable(RCU_GPIOA);/* configure led GPIO port */gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_15);gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_15);GPIO_BC(GPIOA) = GPIO_PIN_15;/* initilize the LEDs, USART and key */gd_eval_com_init(EVAL_COM0);/* print out the clock frequency of system, AHB, APB1 and APB2 */printf("CK_SYS is %d\r\n", rcu_clock_freq_get(CK_SYS));printf("CK_AHB is %d\r\n", rcu_clock_freq_get(CK_AHB));printf("CK_APB1 is %d\r\n", rcu_clock_freq_get(CK_APB1));printf("CK_APB2 is %d\r\n", rcu_clock_freq_get(CK_APB2));while(1) {delay_1ms(500);GPIO_TG(GPIOA) = GPIO_PIN_15;}}
    
  2. 在桩函数中修改串口打印的功能

     int _put_char(int ch){usart_data_transmit(EVAL_COM0, (uint8_t) ch );while (usart_flag_get(EVAL_COM0, USART_FLAG_TBE)== RESET){}return ch;}
    
  3. 将代码下载进板子, 打开串口助手, 可以看到log打印
    在这里插入图片描述

8. vscode开发环境搭建

  1. 目录修改
    在这里插入图片描述

  2. CmakeList.txt编写

cmake_minimum_required(VERSION 3.22)# Setup compiler settings
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)###########################################################
# Set the project name
set(CMAKE_PROJECT_NAME gd32vw553_test)set(APP_ADDR "0x08000000")      # 从0x08000000启动
add_definitions(-DDOWNLOAD_MODE=DOWNLOAD_MODE_FLASHXIP -DDOWNLOAD_MODE_STRING=\"FLASHXIP\" -D__IDE_RV_DE_RV_CORE=n303 -DSYSTEM_CLOCK=160000000 -DSYSCLK_USING_HXTAL)# Define the build type
if(NOT CMAKE_BUILD_TYPE)set(CMAKE_BUILD_TYPE "Debug")
endif()find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
endif(CCACHE_FOUND)###########################################################
# Include toolchain file
set(CMAKE_SYSTEM_NAME       Generic)
set(CMAKE_SYSTEM_PROCESSOR  riscv)set(CMAKE_C_COMPILER_FORCED TRUE)
set(CMAKE_CXX_COMPILER_FORCED TRUE)
set(CMAKE_C_COMPILER_ID GNU)
set(CMAKE_CXX_COMPILER_ID GNU)# Some default GCC settings
# riscv64-unknown-elf- must be part of path environment
set(TOOLCHAIN_PREFIX                riscv64-unknown-elf-)set(CMAKE_C_COMPILER                ${TOOLCHAIN_PREFIX}gcc)
set(CMAKE_ASM_COMPILER              ${CMAKE_C_COMPILER})
set(CMAKE_CXX_COMPILER              ${TOOLCHAIN_PREFIX}g++)
set(CMAKE_LINKER                    ${TOOLCHAIN_PREFIX}g++)
set(CMAKE_OBJCOPY                   ${TOOLCHAIN_PREFIX}objcopy)
set(CMAKE_SIZE                      ${TOOLCHAIN_PREFIX}size)
set(CMAKE_OpenOCD                   "E:/Program Files/NucleiStudio/toolchain/openocd/bin/openocd.exe")set(CMAKE_EXECUTABLE_SUFFIX_ASM     ".elf")
set(CMAKE_EXECUTABLE_SUFFIX_C       ".elf")
set(CMAKE_EXECUTABLE_SUFFIX_CXX     ".elf")set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)# MCU specific flags
set(TARGET_FLAGS "-march=rv32imac -mabi=ilp32 -mtune=nuclei-200-series -mcmodel=medlow -mno-save-restore")set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TARGET_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -fno-common")if(CMAKE_BUILD_TYPE MATCHES Debug)set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Og -g -gdwarf-2")
endif()
if(CMAKE_BUILD_TYPE MATCHES Release)set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
endif()
if(CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -g")
endif()
if(CMAKE_BUILD_TYPE MATCHES MinSizeRel)set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os")
endif()set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp -MMD -MP")set(CMAKE_C_LINK_FLAGS "${CMAKE_C_FLAGS}")
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -T \"${CMAKE_SOURCE_DIR}/ldscripts/GD32VW55X.lds\"")
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -nostartfiles")
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,-Map=${CMAKE_PROJECT_NAME}.map -Wl,--check-sections -Wl,--no-warn-rwx-segments")
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,--start-group -lc -lm -Wl,--end-group")
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,--print-memory-usage")set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -fno-rtti -fno-exceptions -fno-threadsafe-statics")
set(CMAKE_CXX_LINK_FLAGS "${CMAKE_C_LINK_FLAGS}  -Wl,--start-group,-lstdc++,-lc_nano,-lgcc,--end-group")
########################################################### Enable compile command to ease indexing with e.g. clangd
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)# must need 
enable_language(C ASM)# Core project settings
project(${CMAKE_PROJECT_NAME})
message("Build type: " ${CMAKE_BUILD_TYPE})# Create an executable object type
add_executable(${CMAKE_PROJECT_NAME})# 汇编的宏定义
# Add project symbols (macros)
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE# Add user defined symbols
)# Add linked libraries
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATEstm32cubemx# Add user defined libraries
)##########################################################
add_library(stm32cubemx INTERFACE)target_compile_definitions(stm32cubemx INTERFACE # TX_INCLUDE_USER_DEFINE_FILE 
)target_include_directories(stm32cubemx INTERFACEApplication/Include/    Hardware/Include/Firmware/GD32VW55x_standard_peripheral/Firmware/GD32VW55x_standard_peripheral/Include/Firmware/RISCV/drivers/# Firmware/OS/FreeRTOS/Source/include# Firmware/OS/FreeRTOS/Source/portable# Firmware/OS/ThreadX/common/inc# Firmware/OS/ThreadX/ports/nuclei/
)file(GLOB SRC_LIB_0 Firmware/GD32VW55x_standard_peripheral/*.c)
file(GLOB SRC_LIB_1 Firmware/GD32VW55x_standard_peripheral/Source/*.c)
file(GLOB SRC_LIB_2 Firmware/RISCV/env_Eclipse/*.c)
file(GLOB SRC_LIB_3 Firmware/RISCV/stubs/*.c)# file(GLOB SRC_LIB_4 Firmware/OS/FreeRTOS/Source/*.c)
# file(GLOB SRC_LIB_5 Firmware/OS/FreeRTOS/Source/portable/*.c)
# file(GLOB SRC_LIB_6 Firmware/OS/FreeRTOS/Source/portable/MemMang/*.c)
# file(GLOB SRC_LIB_7 Firmware/OS/FreeRTOS/Source/portable/GCC/portasm.S)# file(GLOB SRC_LIB_4 Firmware/OS/ThreadX/common/src/*.c)
# file(GLOB SRC_LIB_5 Firmware/OS/ThreadX/ports/nuclei/*.c)
# file(GLOB SRC_LIB_6 Firmware/OS/ThreadX/ports/nuclei/gcc/context.S)
# file(GLOB SRC_LIB_7 Firmware/OS/ThreadX/ports/nuclei/gcc/interrupt.S)file(GLOB SRC_APP_0 Application/Source/*.c)
file(GLOB SRC_APP_1 Hardware/Source/*.c)target_sources(stm32cubemx INTERFACE${SRC_APP_0}${SRC_APP_1}${SRC_LIB_0}${SRC_LIB_1}${SRC_LIB_2}${SRC_LIB_3}${SRC_LIB_4}${SRC_LIB_5}${SRC_LIB_6}${SRC_LIB_7}# GLOB *.S doesn't workFirmware/RISCV/env_Eclipse/entry.SFirmware/RISCV/env_Eclipse/start.S
)
##########################################################
# For Download & Debug
set(ELF_FILE ${PROJECT_NAME}.elf)
set(HEX_FILE ${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_NAME}.bin)
set(DFU_FILE ${PROJECT_NAME}.dfu)# PRE_BUILD(预构建)、PRE_LINK(链接前)和POST_BUILD(构建后)用于指定自定义命令在构建过程中的执行时机。
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -Obinary -S ${ELF_FILE} ${BIN_FILE}COMMAND ${CMAKE_OBJCOPY} -Oihex  ${ELF_FILE} ${HEX_FILE}COMMENT "Building ${PROJECT_NAME}.bin and ${PROJECT_NAME}.hex"
)# print size
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILDCOMMAND ${CMAKE_SIZE} --format=berkeley ${PROJECT_NAME}.elfCOMMENT "Invoking: Cross ARM GNU Print Size"
)# make openocd_flash
add_custom_target(openocd_flashCOMMAND ${CMAKE_OpenOCD} -f "${CMAKE_SOURCE_DIR}/nuclei_sdk/SoC/gd32vf103/Board/gd32vf103v_rvstar/openocd_gd32vf103.cfg" -c "program gd32vf103.elf verify reset exit"COMMENT "USE OpenOCD to make flash at ${APP_ADDR}"
)
  1. 编译工具链配置(这里windows平台工具链下载就不多说了,下载对应工具,然后添加环境变量可以找找其他教程)
  • gcc
  • riscv-none-embed-gcc
  • ninja
  • cmake
  • cacache
    在这里插入图片描述

9. Timer Breath LED

  1. 移植DEMO中的Timer Breath LED功能
    在这里插入图片描述

10. 移植MBL和MSDK

SDK 最终生成的执行程序主要有两个:一个是 MBL(Main Bootloader),一个是 MSDK
( Main SDK ) 。它们最终都将被烧写到 FLASH 运行。 上电之后, 程序将从 MBL 的
Reset_Handler 启动,然后跳转到 MSDK 主程序运行

  1. 三个配置文件
  • GD32VW55x_RELEASE/config/platform_def.h 用于配置WIFI 和 BLE
  • GD32VW55x_RELEASE/config/config_gdm32.h 用于设置Flahs和SRAM内存布局
  • GD32VW55x_RELEASE/MSDK/app/app_cfg.h 用于配置一些无线相关的应用, 例如: ATCMD,阿里云, MQTT, COAP

注:通过修改 app_cfg.h 内的宏CONFIG_BLE_LIB 可切换BLE library。将 CONFIG_BLE_LIB 配
置为 BLE_LIB_MIN,工程编译时会选择libble.a,同时头文件会include ble_config_min.h;将CONFIG_BLE_LIB 配置为BLE_LIB_MAX, 工程编译时会选择 libble_max.a,同时头文件会include ble_config_max.h。

  1. 工程配置
    在这里插入图片描述

  2. 编译工程

  • Embedded Builder IDE 下编译和调试 SDK。首先下载GD32VW55x_RELEASE, 目前官网最新版本是1.0.3a.
  • 将workspaces 指向 GD32VW55x_RELEASE 目录
  • 然后选择 MSDK 或 MBL 工程进行导入, 路径为GD32VW55x_RELEASE/MBL/project/eclipse和GD32VW55x_RELEASE/MSDK/projects/eclipse/msdk
  • 分别编译 MBL 和 MSDK 工程
  • MSDK 编译完成之后, 会调用 MSDK/projects/image_afterbuild.bat 生成 image-ota.bin 和image-all.bin。并将生成的 bin 文件拷贝至/scripts/images 内, image-ota.bin是MSDK工程生成的bin文件,可用于OTA 升级, image-all.bin是MBL(mbl.bin)和 MSDK(image-ota.bin)的组合,该固件可用于生产,烧录到 FLASH 中运行
  1. 编译报错
    编译MSDK时候,出现了以下错误信息, 而且image没有成功生成
    在这里插入图片描述

导致的原因是bat命令没有识别出我路径中的空格, 这里我的路径是program file, 导致脚本将空格之后和空格之前设别成了两条指令,解决办法就是将整个路径用双引号括起来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11. 初始化成功

在这里插入图片描述

视频链接和项目地址

  1. https://github.com/1508912767/gd32vw553_test
  2. https://www.bilibili.com/video/BV1MEeJzrE9u/

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

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

相关文章

斯塔克工业技术日志:用基础模型打造 “战甲级” 结构化 AI 功能

引子 在斯塔克工业的地下研发实验室里,弧光反应堆的蓝光映照着布满代码的显示屏,工程师詹姆斯・“罗迪”・罗德斯正对着一堆 AI 生成的杂乱食谱皱眉。 上周他刚搞定基础模型(Foundation Models)的文本生成,让 AI 能像…

如何解决pip安装报错ModuleNotFoundError: No module named ‘click’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘click’问题 摘要 在日常Python开发中,pip install 报错 ModuleNotFoundError: No module named click 是一个非常常见的问题,尤其是在…

PLC_博图系列☞基本指令”S_PULSE:分配脉冲定时器参数并启动“

PLC_博图系列☞基本指令”S_PULSE:分配脉冲定时器参数并启动“ 文章目录PLC_博图系列☞基本指令”S_PULSE:分配脉冲定时器参数并启动“背景介绍S_PULSE: 分配脉冲定时器参数并启动说明参数脉冲时序图示例关键字: PLC、 西门子、 …

【大模型】Qwen2.5-VL-3B模型量化以及运行测试,保留多模态能力(实践版)

目录 ■获取原始模型 ■构建llama.cpp ■转换模型到GGUF ▲视觉模块转换 ▲llm模块转换 ▲llm模块量化 ▲推理测试 ■报错处理 以下是几种多模态模型量化方案的简要对比: 特性 llama.cpp GGUF 量化

C语言 | 高级C语言面试题

侧重于内存管理、指针、编译器行为、底层原理和编程实践。 C语言面试 一、核心概念与深度指针题 1. `const` 关键字的深度理解 2. volatile 关键字的作用 3. 复杂声明解析 二、内存管理 4. `malloc(0)` 的行为 5. 结构体内存对齐与大小计算 三、高级技巧与底层原理 6. setjmp()…

【deepseek问答记录】:chatGPT的参数数量和上下文长度有关系吗?

这是一个非常好的问题,它触及了大型语言模型设计的核心。 简单来说:参数数量和上下文长度在技术上是两个独立的概念,但在模型的设计、训练和实际应用中,它们存在着深刻且重要的联系。 我们可以从以下几个层面来理解它们的关系&…

5GNR CSI反馈 TypeI码本

5GNR CSI反馈 TypeI码本 前言 最近孬孬在学习5gnr中的CSI反馈内容,对于目前的5GNR主要是基于码本的隐式反馈机制,在NR中主要是分为 TypeI 和 TypeII,对于TypeI是用于常规精度的,对于TypeII更为复杂,更多的适用于多用户…

使用appium对安卓(使用夜神模拟器)运行自动化测试

环境安装 基本环境安装 安装node.js 下载地址:Node.js — Run JavaScript Everywhere 安装Java JDK 下载地址:JDK Builds from Oracle 安装夜神模拟器 360上找下就能装,安装好后将夜神的bin目录,添加到系统变量的path中。 …

用wp_trim_words函数实现WordPress截断部分内容并保持英文单词完整性

在WordPress中,wp_trim_words函数用于截断字符串并限制单词数量。如果你希望在截断时保持单词的完整性(让单词显示全),可以通过自定义函数来实现。 以下是一个示例代码,展示如何修改你的代码以确保截断时显示完整的单…

Codeforces Round 1042 (Div. 3) G Wafu! 题解

Codeforces Round 1042 (Div. 3) G Wafu! 题解 题意:每一次操作删除集合中最小的元素 x,并产生新的 x - 1 个元素值分别为 1 2 3 … x - 1 放入集合之中。 每次操作一个数 x 可以使得最终答案乘上 x,问我们操作 k 次在模 1e9 7 的基础上最终…

APP与WEB测试的区别?

web与app核心区别:一个基于浏览器 ,一个基于操作系统这是所有区别的根源:Web测试:测试对象是网站,通过浏览器(Chrome,Firefox等)访问,运行环境核心是浏览器引擎;App测试:测试对象是应…

2.渗透-.WEB运行原理-ZBlog安装(进一步理解数据库)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:微尘网校 上一个内容:1.渗透-.WEB运行原理(搭建一个WEB程序) 首先把服务运行起来 然后访问下图红框…

MapBox GL地图上绘制圆形区域,在区域中心点添加标记点及文本提示的实现方法

MapBox GL地图上绘制圆形区域,在区域中心点添加标记点及文本提示的实现方法:// 绘制影响区域 const addArea (circle) > {if (!map.current || !circle) return;const areaId circle-area;const epicenterId circle-epicenter;const radiusKm cir…

基于 Docker Compose 的若依多服务一键部署java项目实践

基于Docker Compose的若依多服务一键部署实践 在项目开发中,多服务部署常常让人头疼。环境配置复杂、操作步骤繁琐,稍不注意就容易出错。不过,有了 Docker Compose ,这些问题就简单多啦!它能帮我们高效编排多个容器&am…

MyBatis-Plus 使用 Wrapper 自定义 SQL 查询

目录 1. 注意事项 2. 示例代码 2.1 实体类 2.2 Mapper 接口 2.3 测试类 3. 运行效果 4. 总结 在实际项目中,虽然 MyBatis-Plus 提供了丰富的内置方法和 QueryWrapper 条件构造器,但有时我们需要 自定义 SQL 来实现更复杂的查询逻辑。 MyBatis-Plu…

NumPy/PyTorch/C char数组内存排布

1. 关于 np.random.randn(2, 3) 的数据存储数据类型 (Data Type):np.random.randn 默认生成的是 64位(8字节)双精度浮点数 (numpy.float64)。所以每个数字占 8个字节,而不是8位(1字节)。这是一个关键区别。…

Elasticsearch精准匹配与全文检索对比

在 Elasticsearch 中,精准匹配检索和全文检索匹配检索是两种核心查询方式,主要区别在于匹配规则、分词处理、适用场景和底层实现逻辑。以下是详细对比:一、核心区别总结特性精准匹配(Term Query)全文检索(M…

【鸿蒙开发001】上下翻页-翻书效果实现【可复用】

先看效果:一、设计思路:根据所需要的最终效果,最终设计如下:(1)整体设计了4个模块,这里分别标记为:A1,A2,B1,B2。具体说明如下:A模块&…

H20 性能表现之 Qwen3-235B

上期为大家分享了H20性能表现之Qwen3-Coder-480B(以下称480B),今天,我为大家继续带来新的评测,这次,介绍的是 Qwen3-235B-A22B-Instruct-2507(以下称235B),这也是阿里这阵…

Diagnosing bias and variance|诊断偏差和方差

----------------------------------------------------------------------------------------------- 这是我在我的网站中截取的文章,有更多的文章欢迎来访问我自己的博客网站rn.berlinlian.cn,这里还有很多有关计算机的知识,欢迎进行留言或…