首页/新闻资讯/正文详情

JerryScript 在 STM32F4-Discovery 与 NuttX 上的完整移植构建与运行指南

发布时间:2026/9/28 2:54:27 来源:云帆数科 栏目:资讯中心
JerryScript 在 STM32F4-Discovery 与 NuttX 上的完整移植构建与运行指南
语言运行时嵌入式物联网编译器【免费下载链接】jerryscriptUltra-lightweight JavaScript engine for the Internet of Things.项目地址https://gitcode.com/gh_mirrors/je/jerryscript点击查看免费下载本指南基于 JerryScript 官方仓库 targets/os/nuttx/README.md 整理完整讲解如何将超轻量级 JavaScript 引擎 JerryScript 移植到 STM32F4-Discovery 开发板并运行在 Apache NuttX 实时操作系统之上。读完本文你将掌握从搭建交叉编译环境、配置 NuttX 内核、集成 JerryScript 应用、生成 ROMFS 文件系统镜像到烧录固件并通过 NSH 串口 Shell 执行 JavaScript 脚本的全套流程同时理解该移植背后的源码级实现Kconfig 配置项、Makefile 构建参数、端口适配层与 ARM 汇编的 setjmp/longjmp 实现。一、移植目标与仓库文件概览JerryScript 官方为 NuttX 提供了独立的移植目录位于仓库的 targets/os/nuttx 下目标平台组合为开发板STM32F4-Discovery意法半导体评估板搭载 Cortex-M4 内核的 STM32F4 系列 MCU操作系统NuttXApache 基金会下的类 POSIX 实时操作系统文档验证环境Ubuntu 20.04 主机NuttX 最新实测可用版本为 10.2该目录包含一组小而完整的移植文件各自职责如下文件作用Kconfig定义 JerryScript 在 NuttX 中的 Kconfig 菜单项开关、优先级、栈大小Make.defs当CONFIG_INTERPRETERS_JERRYSCRIPTy时将本目录注册进 NuttX 应用构建系统Makefile描述jerry应用的编译规则并调用 JerryScript 的tools/build.py交叉编译核心静态库jerry-main.cjerry命令行的入口实现参数解析、REPL、脚本执行、调试服务器jerry-port.cJerryScript 端口适配层日志、行读取、fatal、时区、时间等接口的 NuttX 实现setjmp.S 与 setjmp.hCortex-M4 浮点上下文的 setjmp/longjmp 汇编实现与类型定义Makefile.travis用于 CI 的无交互自动构建目标安装依赖、clone NuttX、配置、编译整套移植以应用的形式挂在 NuttX 的apps/interpreters/jerryscript路径下随 NuttX 固件一起编译链接最终在设备上得到一个名为jerry的 NSH 命令。二、搭建 STM32F4-Discovery 构建环境2.1 克隆所需项目先在主机上创建统一的工作目录jerry-nuttx并克隆四个项目JerryScript 本体、NuttX 内核10.2 分支、NuttX 应用库apps、kconfig 工具以及 ST-Link 烧录工具# Create a base folder for all the projects. mkdir jerry-nuttx cd jerry-nuttx git clone https://github.com/jerryscript-project/jerryscript.git git clone https://github.com/apache/incubator-nuttx.git nuttx -b releases/10.2 git clone https://github.com/apache/incubator-nuttx-apps.git apps -b releases/10.2 git clone https://bitbucket.org/nuttx/tools.git tools git clone https://github.com/texane/stlink.git -b v1.5.1-patch执行完成后目录结构应为jerry-nuttx jerryscript | targets | os | nuttx nuttx apps tools stlink后续所有命令都假定你位于jerry-nuttx根目录下执行。2.2 安装项目依赖JerryScript 提供了依赖安装脚本 tools/apt-get-install-deps.sh可先运行它补齐 JerryScript 本体的构建依赖# Assuming you are in jerry-nuttx folder. jerryscript/tools/apt-get-install-deps.sh随后分别安装 NuttX 的交叉编译工具链、构建工具、以及 ST-Link 与串口通信工具# Toolchain dependencies of NuttX. sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi # Tool dependencies of NuttX. sudo apt install \ bison flex gettext texinfo libncurses5-dev libncursesw5-dev \ gperf automake libtool pkg-config build-essential gperf genromfs \ libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev \ libexpat-dev gcc-multilib g-multilib picocom u-boot-tools util-linux # ST-Link and serial communication dependencies. sudo apt install libusb-1.0-0-dev minicom其中gcc-arm-none-eabi用于交叉编译 Cortex-M 固件genromfs用于后续生成 ROMFS 文件系统镜像minicom用于连接开发板串口u-boot-toolsmkimage 等是 NuttX 构建所需的辅助工具。三、把 JerryScript 应用接入 NuttX 应用树NuttX 的应用apps采用模块化组织每个应用位于apps/类别/应用名目录。这里需要把 JerryScript 的移植文件放到apps/interpreters/jerryscript# Assuming you are in jerry-nuttx folder. mkdir -p apps/interpreters/jerryscript cp jerryscript/targets/os/nuttx/* apps/interpreters/jerryscript/ # Or more simply: # ln -s jerryscript/targets/os/nuttx apps/interpreters/jerryscriptcp与符号链接两种方式等价后者可避免文件复制便于同步修改。这一步生效的机制在 Make.defs 中当配置项CONFIG_INTERPRETERS_JERRYSCRIPTy时CONFIGURED_APPS会追加$(APPDIR)/interpreters/jerryscript从而把该目录纳入 NuttX 整体构建ifeq ($(CONFIG_INTERPRETERS_JERRYSCRIPT),y) CONFIGURED_APPS $(APPDIR)/interpreters/jerryscript endif而 Kconfig 定义了三个核心配置项INTERPRETERS_JERRYSCRIPT布尔开关默认关闭default nINTERPRETERS_JERRYSCRIPT_PRIORITYjerry任务的优先级默认 100INTERPRETERS_JERRYSCRIPT_STACKSIZEjerry任务的栈大小字节默认 16384。这些默认值在 Makefile 中被直接引用为PRIORITY与STACKSIZE进而通过Application.mk生成 NSH 内建命令。四、构建 kconfig-frontends 配置工具NuttX 的图形化配置依赖kconfig-frontends工具集。如果系统包管理器已经安装了kconfig-frontends可跳过本节否则需要从之前克隆的tools仓库中编译安装# Assuming you are in jerry-nuttx folder. cd tools/kconfig-frontends ./configure \ --disable-nconf \ --disable-gconf \ --disable-qconf \ --disable-shared \ --enable-static \ --prefix${PWD}/install make make install # Add install folder to PATH PATH${PWD}/install/bin:$PATH注意这里的 configure 选项禁用了nconf/gconf/qconf三种图形前端、采用静态链接--enable-static安装到本地install目录最后把该目录加入PATH供后续menuconfig/olddefconfig使用。五、配置 NuttX 内核并启用 JerryScriptNuttX 的构建配置全部存放在nuttx/.config文件中。首先基于官方提供的usbnsh配置模板初始化配置——该模板把 USB 作为 NSH 控制台USB console shell# Assuming you are in jerry-nuttx folder. cd nuttx/tools # Configure NuttX to use USB console shell. ./configure.sh stm32f4discovery:usbnsh默认情况下 JerryScript 处于禁用状态需要手动开启。官方提供了两种方式交互式menuconfig5.1 节或直接修改.config文件5.2 节。5.1 方式一使用 menuconfig 交互配置# Assuming you are in jerry-nuttx folder. # Might be required to run make menuconfig twice. make -C nuttx menuconfig基础配置必选启用System Type - FPU supportSTM32F4 带硬件浮点单元JerryScript 数学库需要启用 FPU 支持启用Application Configuration - Interpreters - JerryScript即把CONFIG_INTERPRETERS_JERRYSCRIPT置为y。可选配置一启用 ROMFS把 JavaScript 输入文件烧录进设备 flash启用File systems - ROMFS file system启用Application configuration - NSH library - Scripting Support - Support ROMFS start-up script可选配置二启用 MMCSD在开发板上挂载 micro-SD 卡。注意以下选项针对的是 STM32F4-Discovery 基板上的 micro-SD 卡槽启用System Type - STM32 Peripheral Support - SDIO启用RTOS Features - Work queue support - High priority (kernel) worker thread启用RTOS Features - RTOS hooks - Custom board late initialization启用RTOS Features - RTOS hooks - Enable on_exit() API启用Driver Support - MMC/SD Driver Support禁用Driver Support - MMC/SD Driver Support - MMC/SD write protect pin禁用Driver Support - MMC/SD Driver Support - MMC/SD SPI transfer support启用Driver Support - MMC/SD Driver Support - MMC/SD SDIO transfer support启用File systems - FAT file system启用File systems - FAT file system - FAT upper/lower names启用File systems - FAT file system - FAT long file names5.2 方式二直接追加 .config 内容无交互更简单的做法是把所需配置直接追加到nuttx/.config末尾。最小启用集合如下# Assuming you are in jerry-nuttx folder. cat nuttx/.config EOL CONFIG_ARCH_FPUy CONFIG_SCHED_ONEXITy CONFIG_INTERPRETERS_JERRYSCRIPTy CONFIG_INTERPRETERS_JERRYSCRIPT_PRIORITY100 CONFIG_INTERPRETERS_JERRYSCRIPT_STACKSIZE16384 EOL各选项含义CONFIG_ARCH_FPUy启用 FPU对应 menuconfig 中的 FPU supportCONFIG_SCHED_ONEXITy启用on_exit()API对应 RTOS hooksCONFIG_INTERPRETERS_JERRYSCRIPTy启用 JerryScript 应用CONFIG_INTERPRETERS_JERRYSCRIPT_PRIORITY100jerry任务优先级CONFIG_INTERPRETERS_JERRYSCRIPT_STACKSIZE16384jerry任务栈大小字节。可选启用 ROM 文件系统ROMFS# Assuming you are in jerry-nuttx folder. cat nuttx/.config EOL CONFIG_BOARDCTL_ROMDISKy CONFIG_FS_ROMFSy CONFIG_NSH_ROMFSETCy CONFIG_NSH_ROMFSMOUNTPT/etc CONFIG_NSH_INITSCRIPTinit.d/rcS CONFIG_NSH_ROMFSDEVNO0 CONFIG_NSH_ROMFSSECTSIZE64 CONFIG_NSH_DEFAULTROMFSy EOL这些选项让 NSH 把 ROMFS 挂载到/etc并执行init.d/rcS作为启动脚本ROMFS 设备号、扇区大小等均可按需调整。可选启用 MMCSD 驱动与 FAT 文件系统。以下选项针对 STM32F4-Discovery 基板上的 micro-SD 卡槽# Assuming you are in jerry-nuttx folder. cat nuttx/.config EOL CONFIG_STM32_SDIOy CONFIG_STM32_SDIO_DMAPRIO0x00010000 CONFIG_MMCSD_HAVE_CARDDETECTy CONFIG_BOARD_LATE_INITIALIZEy CONFIG_BOARD_INITTHREAD_STACKSIZE2048 CONFIG_BOARD_INITTHREAD_PRIORITY240 CONFIG_SIG_SIGWORK17 CONFIG_SCHED_WORKQUEUEy CONFIG_SCHED_HPWORKy CONFIG_SCHED_HPNTHREADS1 CONFIG_SCHED_HPWORKPRIORITY224 CONFIG_SCHED_HPWORKSTACKSIZE2048 CONFIG_BCHy CONFIG_ARCH_HAVE_SDIOy CONFIG_ARCH_HAVE_SDIOWAIT_WRCOMPLETEy CONFIG_ARCH_HAVE_SDIO_PREFLIGHTy CONFIG_MMCSDy CONFIG_MMCSD_NSLOTS1 CONFIG_MMCSD_MMCSUPPORTy CONFIG_MMCSD_SDIOy CONFIG_FS_FATy CONFIG_FAT_LCNAMESy CONFIG_FAT_LFNy CONFIG_FAT_MAXFNAME32 CONFIG_FAT_LFN_ALIAS_TRAILCHARS0 CONFIG_FSUTILS_MKFATFSy CONFIG_NSH_MMCSDSLOTNO0 EOL这段配置把 STM32 的 SDIO 外设、MMC/SD 驱动SDIO 传输模式、FAT 文件系统、板级后初始化线程以及内核工作队列一并打开为后续挂载 SD 卡读取脚本文件做好准备。六、为设备准备 JavaScript 输入文件JerryScript 在设备上需要 JavaScript 源文件作为输入。根据第 5 步的选择有两种承载方式ROMFS烧录进 flash或 SD 卡FAT32 文件系统。6.1 方式一由自定义目录生成 ROMFS 镜像如果使用了 MMCSD 方式可跳过本节。否则需要把存放 JS 文件的目录打包成 C 头文件。受 flash 容量限制尽量精简目录内容# Assuming you are in jerry-nuttx folder. mkdir jerry-example # Let hello.js be a possible JavaScript input for JerryScript. cp jerryscript/tests/hello.js jerry-example # Generate ROMFS image from a custom folder. genromfs -f romfs_img -d jerry-example # Dump image as C header file and override NuttXs default ROMFS file. xxd -i romfs_img apps/nshlib/nsh_romfsimg.h # Add const modifier to place the content to flash memory. sed -i s/unsigned/const\ unsigned/g apps/nshlib/nsh_romfsimg.h流程说明genromfs把jerry-example目录打包为 ROMFS 镜像文件xxd -i把二进制镜像转成 C 数组并覆盖 NuttX 默认的 [nsh_romfsimg.h] 模板注意该头文件位于克隆的 apps 仓库中并非 JerryScript 仓库文件最后的sed把unsigned改成const unsigned使镜像数据被放入只读的 flash 段而非 RAM。仓库自带的示例 tests/hello.js 内容仅一行print (Hello JerryScript!);非常适合作为 ROMFS 中的首个测试脚本。6.2 方式二把文件复制到 SD 卡如果使用了 ROMFS 方式可跳过本节。否则只需把 JS 文件复制到一张 FAT32 格式化的内存卡上插入开发板的 micro-SD 卡槽即可。七、编译 NuttX含 JerryScript在jerry-nuttx根目录下执行# Assuming you are in jerry-nuttx folder. make -C nuttx整个构建链路中Makefile 扮演关键角色。它的libjerry目标会调用 JerryScript 的tools/build.py交叉编译四个静态库libjerry-core.a、libjerry-ext.a、libjerry-math.a、libjerry-port.a核心构建参数如下libjerry: $(JERRYSCRIPT_ROOT_DIR)/tools/build.py \ --clean \ --ltoOFF \ --jerry-cmdlineOFF \ --jerry-mathON \ --amalgamON \ --mem-heap70 \ --profilees.next \ --compile-flag-I${NUTTX_INCLUDE_DIR} \ --toolchain$(abspath $(JERRYSCRIPT_ROOT_DIR)/cmake/toolchain_mcu_stm32f4.cmake)各参数含义--ltoOFF关闭链接期优化避免交叉链接阶段与 NuttX 工具链产生兼容问题--jerry-cmdlineOFF不构建桌面版命令行程序因为 NuttX 侧使用自带的jerry-main.c--jerry-mathON启用 JerryScript 内置数学库jerry-math替代 libm--amalgamON使用合并amalgamated单文件构建方式减少目标文件数量--mem-heap70内部堆大小设为 70 KB这是面向 MCU 场景的紧凑配置--profilees.next采用 profiles/es.next.profile 功能集启用完整的 ES.Next 特性--compile-flag-I${NUTTX_INCLUDE_DIR}把 NuttX 的include目录加入头文件搜索路径--toolchaincmake/toolchain_mcu_stm32f4.cmake指定交叉编译工具链文件。工具链文件 cmake/toolchain_mcu_stm32f4.cmake 定义了目标平台armv7l/STM32F4编译标志为-mlittle-endian -mthumb -mcpucortex-m4 -marcharmv7e-m -mfpufpv4-sp-d16 -mfloat-abihard编译器为arm-none-eabi-gcc即针对带单精度 FPU 的 Cortex-M4 硬浮点 ABI 生成代码。库文件构建完成后通过copylibs目标复制到应用目录$(firstword $(AR)) x $逐个解包进 NuttX 链接ASRCS setjmp.S、CSRCS jerry-port.c、MAINSRC jerry-main.c则把三个移植源文件直接编入应用。最终产物是nuttx.bin固件镜像。八、烧录固件到开发板连接开发板的 Mini-USB 口用于供电与烧录编译 ST-Link 工具并烧写# Assuming you are in jerry-nuttx folder. make -C stlink release sudo stlink/build/Release/st-flash write nuttx/nuttx.bin 0x80000000x8000000是 STM32F4 内部 flash 的起始地址st-flash会把nuttx.bin从该地址开始写入。九、连接设备串口连接开发板的 Micro-USB 口用于串口通信。设备在主机上通常显示为/dev/ttyACM0使用minicom以 115200 波特率连接sudo minicom --device/dev/ttyACM0 --baud115200在minicom中通过按键组合CTRL-A - Z - U设置Add Carriage Ret回车换行选项。可能需要按下开发板的RESET键并在控制台上多次按EnterNSH 提示符才会出现NuttShell (NSH) NuttX-10.2.0 nsh十、在 NSH 中运行 JerryScript10.1 无输入文件运行内置演示直接在nsh提示符后输入jerry不带任何参数NuttShell (NSH) NuttX-10.2.0 nsh jerry No input files, running a hello world demo: Hello world 5 times from JerryScript无文件输入时jerry先输出提示并运行一段内置的 hello world 演示。10.2 运行 ROMFS 中的脚本如果启用了 ROMFS脚本位于挂载点/etc下直接以路径传入NuttShell (NSH) NuttX-10.2.0 nsh jerry /etc/hello.js10.3 运行 SD 卡中的脚本启用 MMCSD 后NuttX 初始化完成时 SD 卡读卡器显示为/dev/mmcsd0。先挂载再执行NuttShell (NSH) NuttX-10.2.0 nsh mount -t vfat /dev/mmcsd0 /mnt nsh jerry /mnt/hello.js十一、jerry 命令行的源码级解析设备上的jerry命令由 jerry-main.c 实现其执行逻辑可分为三个阶段。参数解析阶段循环扫描命令行参数最多接受 16 个参数JERRY_MAX_COMMAND_LINE_ARGS。支持的选项与官方桌面版一致的子集选项说明-h/--help打印用法说明--log-level [0-3]设置日志级别0错误、1警告、2信息、3调试对应JERRY_LOG_LEVEL_*--mem-stats启用内存统计JERRY_INIT_MEM_STATS并把日志级别设为 DEBUG--show-opcodes打印执行的字节码JERRY_INIT_SHOW_OPCODES | JERRY_INIT_SHOW_REGEXP_OPCODES--start-debug-server启动调试服务器--debug-server-port [port]指定调试服务器端口默认 5001其余非选项参数被收集为脚本文件名列表file_names[]。初始化与执行阶段调用jerry_init(flags)初始化引擎若开启了调试服务器则通过扩展库jerryx_debugger_after_connect建立 TCP 与 WebSocket 双重调试通道见 debugger-ws.c 等扩展实现随后把assert、gc、print三个原生函数注册为全局对象方法jerryx_register_global。若无文件参数进入jerryx_repl交互式 REPL 循环否则逐个调用jerryx_source_exec_script执行脚本文件出现异常时打印未处理异常并以退出码 1 终止。收尾阶段调用jerry_run_jobs处理挂起的 Promise 微任务队列最后jerry_cleanup释放引擎资源。十二、端口适配层与底层支撑实现JerryScript 引擎与宿主系统之间通过端口层解耦NuttX 移植的端口实现集中在 jerry-port.c全部接口都很精简jerry_port_log日志输出NuttX 移植中为空实现消息被忽略因为控制台输出统一走print扩展jerry_port_line_read读取一行输入返回 NULLREPL 输入通道在 jerry-main.c 中另行处理jerry_port_fatal致命错误处理直接以错误码调用exit()终止进程jerry_port_local_tza本地时区偏移移植中固定返回 0即我们活在 UTCjerry_port_current_time当前时间移植中返回 0设备通常无 RTC时间功能需按需扩展。另一个关键底层依赖是setjmp/longjmp。JerryScript 的错误处理依赖这两个函数而 STM32F4 使用了 FPU 寄存器NuttX 自带的实现可能不保存浮点上下文因此移植目录专门提供了 setjmp.S 与 setjmp.h。jmp_buf定义为 14 个uint64_t元素setjmp用stmia保存r4-r11与返回地址lrstr保存栈指针sp再用vstm保存浮点寄存器s16-s31longjmp按对称顺序恢复这些寄存器并把val作为setjmp的返回值若val为 0 则强制返回 1以区分直接调用返回 0与longjmp 返回两种情形。十三、自动化构建参考CI 脚本Makefile.travis 给出了完全无交互的自动化构建流程与本文手动步骤一一对应可作为脚本化移植的参考install-apt-get-depsapt 安装gcc-arm-none-eabi与gperfinstall-kconfig克隆 nuttx/tools 并本地编译安装 kconfig-frontends含autoreconf --force --install兼容处理install-clone-nuttx克隆 nuttx 与 apps 的releases/10.2分支script-add-jerryscript-app用ln -s ../../jerryscript/targets/os/nuttx ../apps/interpreters/jerryscript建立应用链接script-configure-usbnsh执行configure.sh stm32f4discovery:usbnshscript向.config追加CONFIG_ARCH_FPUy、CONFIG_SCHED_ONEXITy、CONFIG_INTERPRETERS_JERRYSCRIPTy三项运行make olddefconfig后执行make -C ../nuttx完成固件构建。十四、常见问题与关键要点菜单配置需运行两次官方文档提示make menuconfig可能需要运行两次以刷新应用菜单树ROMFS 与 MMCSD 二选一两种脚本承载方式互斥选择其一即可第 6 步会明确Skip this section提示注意 flash 容量生成 ROMFS 镜像前尽量精简目录体积STM32F4-Discovery 的 flash 有限堆大小与功能集可调--mem-heap7070 KB 堆与--profilees.next是 Makefile 中针对该板卡的默认取舍开发者可按内存预算调整串口参数固定使用 115200 波特率并通过minicom的CTRL-A - Z - U开启回车选项否则输入可能无法被正确解析USB 双口分工Mini-USB 负责供电与 ST-Link 烧录Micro-USB 负责串口控制台二者不要混淆。至此一套STM32F4-Discovery NuttX 10.2 JerryScript的嵌入式 JavaScript 运行环境已完整打通从交叉编译、内核配置、应用集成、脚本烧录到设备端执行均可按本文步骤复现而 Kconfig、Makefile、jerry-main.c、jerry-port.c 与 setjmp.S 等文件则为二次定制如新增端口接口、调整任务栈、接入调试器提供了清晰的切入点。赞分享语言运行时嵌入式物联网编译器【免费下载链接】jerryscriptUltra-lightweight JavaScript engine for the Internet of Things.项目地址https://gitcode.com/gh_mirrors/je/jerryscript点击查看免费下载相关推荐Zephyr 在 Radxa ROCK 3BRockchip RK3568上的移植、构建与 U-Boot 运行指南Zephyr 在 Radxa ROCK 3BRockchip RK3568上的移植、构建与 U Boot 运行指南 Radxa ROCK 3B 是一款基于操作系统嵌入式RTOS物联网Linux on Nios II在 Altera FPGA 上构建与移植 Linux 内核的完整指南Linux on Nios II在 Altera FPGA 上构建与移植 Linux 内核的完整指南 Nios II 是专为 Altera现 IntelF操作系统内核驱动驱动开发虚拟化嵌入式网络存储Zephyr RTOS 在 Raspberry Pi 5 上的移植与实战指南构建、串口调试与 Xen Dom0 运行Zephyr RTOS 在 Raspberry Pi 5 上的移植与实战指南构建、串口调试与 Xen Dom0 运行 导读 本文基于 Zephyr 官方仓库中操作系统嵌入式RTOS物联网上一篇SpeechBrain 实战使用 GigaSpeech 数据集训练 CTC 与 Transducer 语音识别模型下一篇如何快速获取国家中小学智慧教育平台电子课本一键下载PDF教材完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

【M波段2D双树(希尔伯特)小波多分量图像去噪】基于定向M波段双树(希尔伯特)小波对多分量/彩色图像进行降噪研究(Matlab代码实现)
【M波段2D双树(希尔伯特)小波多分量图像去噪】基于定向M波段双树(希尔伯特)小波对多分量/彩色图像进行降噪研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381… · 2026/9/28 2:54:27

DMA原理与实战:解耦CPU与I/O的底层调度技术
DMA原理与实战:解耦CPU与I/O的底层调度技术

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 2:54:20

电商评论情感分析:从课程作业到工业级落地的实战改造指南
电商评论情感分析:从课程作业到工业级落地的实战改造指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 2:54:20

顺义本土正骨名医——苏荫来的故事
顺义本土正骨名医——苏荫来的故事

在顺义本地骨伤正骨领域,有这样一位深耕三十余年的实力派老医者,一身古法正骨手艺,一手传承绝活,专治各类筋骨伤痛,凭借精准的手法、扎实的疗效、踏实的行医作风,深得邻里百姓信赖与认可。他就是杏园金方首… · 2026/9/28 3:29:27

2026实测百度网盘直链助手脚本,速度超越PanDownload工具
2026实测百度网盘直链助手脚本,速度超越PanDownload工具

随着我们手头的各种文档和视频资料越来越大,网盘在数据流转中扮演的角色也越来越重要。不管是工作交接还是备份生活点滴,它都帮了我们不少忙。 不过在日常使用中,偶尔遇到下载变慢也确实会让人感到有些苦恼。面对这种现象我们除了可以配合Pa… · 2026/9/28 3:29:08

剪映操作|输入文字后,能不能自动生成虚拟主播、配音和字幕
剪映操作|输入文字后,能不能自动生成虚拟主播、配音和字幕

适用对象:AI视频生成任务的创作者。本文只处理“输入文字后,能不能自动生成虚拟主播、配音和字幕?”这一件事。先确定这一条要解决什么先给结论:处理“输入文字后,能不能自动生成虚拟主播、配音和字幕?”&a… · 2026/9/28 3:28:21

运算符 文件操作 6
运算符 文件操作 6

运算符&#xff1a;算数运算: - * / % ////&#xff1a;整除%&#xff1a;求余比较运算&#xff1a;> < > < !赋值运算 &#xff1a; - *a21 b2 a,bb,a#只适合python print(a)#2 print(b)#21逻辑运算&#xff1a;and or not当and&#xff0c;or… · 2026/9/28 3:27:47

字符集和编码 bytes 5
字符集和编码 bytes 5

字符集和编码ascii——编排了128个文字字符&#xff0c;只需要7个0和1就可以表示了——1 byte8 bitANSI——每个字符 16 bit&#xff0c;2byteGBK编码Unicode&#xff1a;万国码utf-8&#xff1a;最短的字节长度8 英文&#xff1a;8bit&#xff0c;1 byte总结&#xff1a;as… · 2026/9/28 3:27:28

高效获取STM32开发参考方案:摆脱资料海洋,聚焦可落地项目
高效获取STM32开发参考方案:摆脱资料海洋,聚焦可落地项目

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 3:19:17

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介&#xff1a;这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程&#xff0c;从线性调频&#xff08;LFM&#xff09;信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑&#xff0c;面向电子信息工程、计算机、数学等专业学生&#xff0c;适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介&#xff1a;基于PyTorch的多模态虚假新闻检测项目完整代码包&#xff0c;面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者&#xff0c;解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征&#xff0c;以Res… · 2026/9/27 0:00:01

制作网页比较方便的软件怎么选?一文搞懂避坑指南
制作网页比较方便的软件怎么选?一文搞懂避坑指南

制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。… · 2026/9/28 0:00:06

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例… · 2026/9/28 0:00:19

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略
济南做网站多少钱:3个案例拆解,防黑源码下载全攻略

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?… · 2026/9/28 0:00:25

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码