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

VirtualBox虚拟机中搭建VxWorks 5.5开发调试环境全攻略

1. 项目概述与核心思路最近在折腾一个老项目需要在一个特定的嵌入式实时操作系统环境下进行调试和验证。这个系统就是VxWorks一个在工业控制、航空航天等领域有着深厚积累的RTOS。手头没有现成的硬件板卡搭建一套物理开发环境又费时费力于是很自然地想到了用虚拟机来模拟。VirtualBox以其免费、开源和相对轻量的特性成为了我的首选。经过一番摸索成功在VirtualBox里跑起了VxWorks 5.5Tornado 2.2环境并且通过Telnet连上了系统的Shell运行了第一个测试程序。整个过程下来感觉VirtualBox下的运行效率甚至比VMware还要流畅一些当然也踩了不少坑尤其是网络配置和BSP编译环节。这篇文章我就把从环境准备、镜像编译、虚拟机配置到最终联调的全过程以及其中关键的技术细节和避坑心得完整地梳理一遍。2. 环境准备与工具链梳理在虚拟机里运行VxWorks本质上是在x86架构的虚拟硬件上引导并运行一个为特定“板卡”编译的VxWorks镜像。因此我们的工作可以拆解为三个核心部分准备VxWorks开发环境宿主主机、配置虚拟的“目标硬件”VirtualBox虚拟机、以及建立两者之间的通信桥梁网络和文件传输。2.1 宿主主机环境搭建我的宿主主机是Windows 7系统这是为了兼容较老的Tornado 2.2开发环境。你需要准备以下核心软件Wind River Tornado 2.2: 这是VxWorks 5.5版本的集成开发环境。确保将其安装在一个没有中文和空格的路径下例如C:\Tornado2.2\。安装完成后务必要运行其提供的torvars.bat批处理文件通常位于C:\Tornado2.2\host\x86-win32\bin\这个脚本会设置必要的环境变量如WIND_BASE、WIND_HOST_TYPE等后续的编译命令依赖这些变量。VirtualBox: 我使用的是6.1.x版本。版本选择上只要不是太新或太旧与宿主系统兼容即可。关键是要支持我们需要的网络模式。辅助工具:RamDiskNT: 这是一个在Windows下创建虚拟RAM磁盘的工具。我们用它来模拟一个物理软驱A:因为早期的VxWorks引导方式常常依赖于软盘。我使用的是RamDiskNT 1.5版本创建一个1.44MB的软盘镜像文件并分配盘符A:。TFTP服务器软件: 例如Tftpd32/64或SolarWinds TFTP Server。VxWorks目标系统在启动后需要通过TFTP协议从宿主主机下载最终的可运行内核镜像vxWorks。这是一个非常关键且容易出错的环节。终端软件: 如PuTTY或SecureCRT用于通过Telnet协议登录到运行起来的VxWorks系统Shell。注意Tornado 2.2是一个比较古老的软件在现代操作系统如Windows 10/11上直接安装可能会遇到兼容性问题。如果必须在Win10/11上运行建议尝试使用兼容模式如Windows XP SP3或者更稳妥的方案是在Win7虚拟机中安装Tornado。我选择Win7宿主就是为了减少不必要的麻烦。2.2 BSP选择与理解BSPBoard Support Package是连接VxWorks操作系统和特定硬件板卡的桥梁。它包含了该板卡的启动代码、驱动程序、内存映射、中断配置等。VirtualBox虚拟的是一台标准的PCi386/PC-AT兼容机因此我们需要选择一个对应的PC架构BSP。在Tornado 2.2的target\config\目录下有多个PC类BSP例如pc486、pcPentium等。我选择了pcPentium因为它针对Pentium及以上处理器进行了优化功能相对完整也更适合我们虚拟的“现代”PC环境。后续所有的配置和编译都将基于这个BSP目录进行。3. 编译引导镜像与内核镜像这是整个流程中最核心的技术环节直接决定了虚拟机能否正确启动并加载系统。3.1 解读与修改BSP配置文件BSP的行为主要由config.h文件控制。我们需要重点关注几个部分并针对虚拟机环境进行修改。原始配置文件非常长包含了大量历史兼容性定义我们只需关注关键项。1. 引导参数Boot Line: 这是VxWorks启动时读取的“命令行参数”告诉内核从哪里获取IP地址、从哪里加载最终镜像等。在config.h中搜索DEFAULT_BOOT_LINE。对于pcPentiumBSP通常能找到类似下面的定义#define DEFAULT_BOOT_LINE \ lnPci(0,0)host:d:\\vxWorks h192.168.102.1 e192.168.102.88 utarget pwtarget tntarget我们需要根据自己规划的网络环境来修改它lnPci(0,0): 这指定了使用哪种网络驱动和单元号。lnPci对应AMD PCnet-PCI II驱动ln97xEnd这是VirtualBox默认模拟的网卡型号(0,0)表示第0个PCI总线的第0个设备。通常不需要修改。host:d:\\vxWorks: 这是TFTP下载路径。host是TFTP服务器的默认主机名d:\\vxWorks是服务器上镜像文件的路径。这个路径必须与你后续在TFTP服务器中设置的根目录以及存放的vxWorks镜像文件名完全匹配。例如如果你的TFTP根目录是C:\tftpboot那么这里应该写成host:C:\\tftpboot\\vxWorks。注意路径中使用双反斜杠。h192.168.102.1: 这是TFTP服务器的IP地址即你的宿主主机在虚拟网络中的IP。e192.168.102.88: 这是目标系统VxWorks启动后要使用的IP地址。utarget,pwtarget,tntarget: 分别是FTP/TFTP登录的用户名、密码和目标名。在简单的TFTP引导中这些字段可能不被使用但最好保持一致。2. 网络驱动配置: 确保正确的ENDEnhanced Network Driver驱动被启用。在config.h中找到网络驱动配置部分。我们需要启用INCLUDE_LN_97X_END因为它对应VirtualBox的默认网卡。#define INCLUDE_END /* Enhanced Network Driver Support */ #undef INCLUDE_LN_97X_END /* (END) AMD 79C97x PCI interface */将#undef INCLUDE_LN_97X_END改为#define INCLUDE_LN_97X_END。同时可以注释掉#undef其他不用的网卡驱动如INCLUDE_FEI_ENDIntel网卡等以减小镜像体积。3. 其他可选组件: 根据你的需要可以启用或禁用一些组件。例如为了获得Shell交互能力INCLUDE_WDB_SYS系统级任务调试和INCLUDE_SHELL是必须的它们通常在configAll.h或工程配置中已默认包含。如果你需要通过串口调试还需要配置INCLUDE_TTY_DEV和对应的串口驱动。3.2 生成引导镜像BootromBootrom是一个非常小的、固化在ROM或软盘中的程序它的核心任务就是初始化最基础的硬件如CPU、内存、网卡然后通过TFTP网络下载完整的vxWorks镜像到内存并跳转执行。进入BSP目录: 打开命令提示符CMD务必先运行C:\Tornado2.2\host\x86-win32\bin\torvars.bat来设置环境变量。然后切换到BSP目录cd C:\Tornado2.2\target\config\pcPentium执行编译命令:make bootrom_uncmpbootrom_uncmp: 生成未压缩的Bootrom镜像。压缩版bootrom体积更小但需要解压过程。未压缩版引导更快对于调试更友好。这个命令会调用makefile根据config.h等配置编译生成bootrom_uncmp或bootrom文件位于C:\Tornado2.2\target\config\pcPentium目录下是一个无扩展名的二进制文件。写入“软盘”: 我们需要把bootrom文件写入到之前用RamDiskNT创建的虚拟软驱A:中。Tornado提供了一个工具mkboot.exe。可以写一个简单的批处理文件makeboot.bat来一键完成echo off c: cd C:\Tornado2.2\host\x86-win32\bin call torvars.bat cd C:\Tornado2.2\target\config\pcPentium mkboot a: bootrom_uncmp pause运行这个批处理它会自动设置环境并执行mkboot a: bootrom_uncmp将引导镜像写入A盘。mkboot工具会在软盘上创建特定的文件系统结构并写入引导扇区。3.3 创建工程与编译内核镜像vxWorksBootrom只负责引导真正的操作系统是vxWorks镜像。我们需要在Tornado IDE里创建一个可下载的工程。创建Downloadable工程: 打开Tornado点击File - New Project。选择Create a bootable VxWorks image类型选择Downloadable project。在BSP选择页面浏览并选中pcPentiumBSP。配置工程参数: 给工程命名如VBoxVxWorks选择保存位置。在接下来的工程配置对话框中你可以通过勾选组件来定制内核。对于基础运行和网络测试确保以下组件被包含INCLUDE_SHELL(VxWorks Shell)INCLUDE_WDB(Wind Debugger)INCLUDE_NETWORK(网络支持)INCLUDE_LN_97X_END(AMD PCnet驱动)INCLUDE_PING(Ping工具用于测试网络) 你可以在Project - Properties - C/C Compiler的Extra Flags里或直接修改工程目录下的prjParams.h文件来微调配置但通常IDE的图形化配置已足够。编译内核: 在Tornado中选中你的工程点击Build按钮。编译成功后会在工程目录的default或yourProfileName子目录下生成vxWorks文件例如C:\Tornado2.2\target\proj\VBoxVxWorks\default\vxWorks。放置内核镜像: 将编译好的vxWorks文件复制到TFTP服务器的根目录下例如C:\tftpboot\并确保文件名与DEFAULT_BOOT_LINE中指定的路径完全一致。4. VirtualBox虚拟机配置详解虚拟机的配置需要尽可能模拟一台适合VxWorks运行的“纯净”PC。4.1 新建虚拟机类型与版本: 新建虚拟机类型选择“Other”版本选择“Other/Unknown”。内存: 分配至少64MB内存128MB或256MB更佳。VxWorks 5.5本身不需要太多内存但多留一些空间给应用和缓存更稳妥。硬盘:不需要创建虚拟硬盘。VxWorks将通过网络加载到内存中运行是一种无盘Diskless工作方式。跳过硬盘创建步骤。系统设置:主板: 取消勾选“启用EFI”。处理器: 1个CPU核心足够。务必开启PAE/NX支持在“系统-处理器”标签页某些内存配置需要它。显示: 显存可以调小如12MB。显卡控制器保持“VBoxSVGA”即可VxWorks通常不依赖高级图形功能。存储: 删除默认的控制器和空光盘。添加一个软盘控制器类型选择“I82078”。然后为这个控制器“添加软盘驱动器”选择“使用主机驱动器A:”。这样虚拟机就能访问我们之前用RamDiskNT创建的虚拟软驱了。4.2 网络配置——最关键的一步网络配置是连通宿主与虚拟机的生命线也是最容易出错的地方。网卡1Host-Only Adapter (引导与TFTP):连接方式选择“仅主机(Host-Only)网络”。界面名称选择VirtualBox创建的虚拟网卡例如“VirtualBox Host-Only Ethernet Adapter”。高级设置中混杂模式选择“全部允许”。这对于TFTP通信和后续的Telnet/WDB调试非常重要。芯片类型选择“PCnet-PCI II (Am79C970A)”。这是VxWorks的ln97xEnd驱动直接支持的型号兼容性最好。网卡2NAT Adapter (可选用于访问外网):如果需要VxWorks目标机访问互联网例如进行NTP同步或额外的网络测试可以添加第二块网卡连接方式为“网络地址转换(NAT)”。注意VxWorks启动时默认使用第一块网卡lnPci(0,0)进行引导和通信。第二块网卡需要你在VxWorks启动后手动配置IP和路由。宿主主机网络配置:打开Windows的网络连接找到“VirtualBox Host-Only Ethernet Adapter”。右键属性选择“Internet协议版本4(TCP/IPv4)”点击属性。手动设置IP地址需要与DEFAULT_BOOT_LINE中的h参数一致。例如IP地址:192.168.102.1子网掩码:255.255.255.0默认网关: 留空或填192.168.102.1确定保存。4.3 配置TFTP服务器安装并运行Tftpd32/64。在Current Directory中设置为你存放vxWorks镜像的目录例如C:\tftpboot。确保Server interface下拉框选中了宿主主机在Host-Only网络中的IP地址即192.168.102.1。保持TFTP服务器运行。5. 启动、连接与测试所有准备工作就绪现在可以启动虚拟机了。启动虚拟机: 在VirtualBox中启动虚拟机。由于我们设置了从主机软驱A:启动虚拟机会读取RamDiskNT中的Bootrom。观察引导过程: 虚拟机启动后你会看到Bootrom的初始化信息在屏幕上滚动。它会检测网卡、尝试DHCP可能失败然后最终使用DEFAULT_BOOT_LINE中的参数。关键日志行类似Attached TCP/IP interface to lnPci unit 0. IP: 192.168.102.88 Mask: 255.255.255.0 ... Loading... 192.168.102.1:C:\tftpboot\vxWorks如果看到“Loading...”并显示你的TFTP服务器IP和路径并且进度条开始增长说明网络引导成功正在下载vxWorks镜像。下载完成后系统会自动跳转执行。连接VxWorks Shell: 当vxWorks内核启动完毕通常会打印出类似“-”的Shell提示符如果配置了控制台输出。但更常用的方式是通过网络Telnet连接。打开PuTTY选择“Telnet”连接类型。主机名填写VxWorks目标机的IP即192.168.102.88端口保持默认的23。点击“Open”。如果一切正常你会看到VxWorks的启动Logo和Shell提示符-。运行测试程序: 在Telnet的Shell中你可以输入VxWorks命令。例如输入i可以查看当前系统中所有任务的状态。为了验证系统运行正常我们可以写一个最简单的C程序编译后下载运行。在Tornado中创建一个简单的“Hello from VirtualBox”的C代码文件编译成.out格式的可下载模块。在Tornado的Shell工具或Telnet中如果你配置了FTP服务器中使用ld()命令加载这个.out文件。加载后直接输入函数名或由ld返回的符号地址来执行。你将在控制台看到输出信息。6. 常见问题与深度排查指南在实际操作中几乎不可能一帆风顺。下面是我遇到的一些典型问题及解决方法。6.1 网络引导失败现象: Bootrom启动后长时间停留在“Trying to get IP via DHCP...”或直接提示“Loading...”失败、超时。排查步骤:检查IP配置: 确认宿主主机Host-Only网卡的IP是否与DEFAULT_BOOT_LINE中的h地址一致。确认子网掩码是255.255.255.0。检查TFTP服务器: 确认TFTP服务器的“Current Directory”设置正确并且vxWorks文件确实存在于该目录。确认TFTP服务器的服务端口默认69没有被防火墙阻止。可以临时关闭Windows防火墙测试。检查VirtualBox网络设置: 确认虚拟机网卡1是“仅主机网络”并且混杂模式是“全部允许”。尝试关闭虚拟机在VirtualBox全局设置 - 网络 - 仅主机网络中查看并确保虚拟网卡如VirtualBox Host-Only Ethernet Adapter的IPv4地址也在192.168.102.0/24网段例如192.168.102.100避免冲突。使用Wireshark抓包: 这是最强大的诊断工具。在宿主主机上对Host-Only虚拟网卡进行抓包。过滤bootp或tftp。观察是否有DHCP Discover/Offer/Request/Ack过程是否有TFTP Read Request包TFTP服务器是否有回复通过抓包可以清晰看到通信中断在哪个环节。检查Bootrom网卡驱动: 确保config.h中INCLUDE_LN_97X_END已正确定义并且没有其他冲突的网络驱动被启用。可以尝试在Bootrom编译时暂时去掉其他所有网络驱动宏定义。6.2 Telnet连接失败现象:vxWorks镜像似乎启动成功有内核启动日志但无法通过Telnet连接192.168.102.88:23。排查步骤:检查VxWorks网络配置: 首先确认vxWorks镜像编译时包含了INCLUDE_SHELL和网络栈。可以在Bootrom引导时传参或者确保内核默认配置正确。检查目标机IP: 在VirtualBox的串口控制台如果配置了或VGA输出中查看VxWorks启动后是否正确配置了IP地址。使用ifShow或inetAddrShow命令如果已有Shell查看网络接口状态。检查防火墙: 同样确保宿主主机的防火墙没有阻止对目标机IP的访问。Ping测试: 在宿主主机的命令提示符下ping目标机IP (ping 192.168.102.88)。如果不通说明网络层仍有问题回到网络引导环节排查。如果能ping通但Telnet不通可能是VxWorks的Telnet服务telnetd没有启动。确保编译时包含了INCLUDE_TELNET组件。使用WDB连接替代: Tornado的调试器WDB也通过网络连接。尝试在Tornado中配置一个Target Server连接地址为目标机IP。如果WDB能连上说明网络是通的问题出在Telnet服务本身。6.3 系统运行不稳定或性能差现象: 系统能启动但运行程序时偶尔崩溃或感觉响应缓慢。排查与优化:内存分配: 检查config.h中的LOCAL_MEM_SIZE和RAM_HIGH_ADRS/RAM_LOW_ADRS定义。确保为VxWorks分配了足够的内存。在VirtualBox设置中也可以适当增加虚拟机的内存大小。时钟中断: VxWorks严重依赖系统时钟中断。在VirtualBox中确保虚拟机的“系统-主板”设置中启用“硬件时钟”使用“UTC”。有时将“扩展特性”中的“启用HPET”勾选或取消勾选可以解决时钟源不稳定的问题。处理器设置: 尝试将虚拟机的CPU执行上限调高并确保“启用PAE/NX”已勾选。如果宿主是多核CPU可以尝试给虚拟机分配多个CPU但要注意VxWorks SMP支持需要额外配置。关闭虚拟化特性: 对于非常老的BSP和VxWorks版本可以尝试在VirtualBox的“系统-处理器”设置中取消勾选“启用嵌套分页”和“启用VT-x/AMD-V”如果宿主CPU支持。这有时能解决一些兼容性问题但会牺牲性能。6.4 编译错误与BSP适配现象: 在make bootrom或编译vxWorks工程时出现编译错误。解决思路:路径与权限: 确保Tornado安装在无空格路径并且你有该目录的读写权限。torvars.bat必须正确执行。工具链版本: Tornado 2.2自带了一套GNU工具链如cc386。确保你的系统PATH环境变量没有其他版本的GCC工具链干扰。BSP文件完整性: 不要直接修改config.h的原始副本。建议先备份或者在Tornado工程中通过prjParams.h进行覆盖式配置。很多编译错误源于config.h中的宏定义冲突。查阅修改历史: 提供的config.h文件头部有详细的修改历史modification history。关注最近的一些修改例如对于Pentium4非对称多处理器的支持、MMU 36位寻址等。如果你虚拟的CPU是较新的型号可能需要启用或禁用某些特定于CPU家族的宏如INCLUDE_MMU_P6_36BIT。经过上述步骤的细致配置和问题排查你应该能在VirtualBox中成功运行起VxWorks并建立起一个稳定的开发调试环境。这个环境对于学习VxWorks操作系统、进行驱动或应用的原型开发、以及兼容性测试来说是一个非常高效且成本低廉的方案。相比于VMwareVirtualBox在运行这类老式实时系统时我个人的体验是中断响应和I/O性能似乎更加稳定可预测当然这可能与具体版本和宿主机配置有关。最关键的是通过亲手配置一遍你对VxWorks的引导过程、BSP的作用以及虚拟化环境的网络配置会有更深刻的理解。

相关文章:

VirtualBox虚拟机中搭建VxWorks 5.5开发调试环境全攻略

1. 项目概述与核心思路最近在折腾一个老项目,需要在一个特定的嵌入式实时操作系统环境下进行调试和验证。这个系统就是VxWorks,一个在工业控制、航空航天等领域有着深厚积累的RTOS。手头没有现成的硬件板卡,搭建一套物理开发环境又费时费力&a…...

Arduino电机与舵机控制:从晶体管驱动到PWM调速实战

1. 项目概述与核心价值在机器人、智能小车或者任何一个需要“动起来”的嵌入式项目中,电机控制都是你绕不开的一道坎。你可能已经能让LED闪烁、让屏幕显示文字,但当你第一次尝试让一个小马达转起来,却发现Arduino板子上的引脚直接冒烟时&…...

在Adafruit Fruit Jam微控制器上移植运行经典游戏DOOM的完整指南

1. 项目概述:当经典FPS遇上迷你计算机作为一名在嵌入式系统和复古计算领域折腾了十多年的老玩家,我始终对“它能不能跑DOOM?”这个梗抱有极大的热情。这不仅仅是一句玩笑,更是对硬件性能和软件移植能力的终极试金石。最近&#xf…...

顶伯 + 微软 TTS,3 分钟生成专业级解说配音

🎯 顶伯 微软 TTS,3 分钟生成专业级解说配音告别繁琐录音,用顶伯文字转语音工具快速打造高品质配音。✨ 一、为什么选择顶伯与微软 TTS 的组合?在视频制作、课程讲解或产品演示中,配音质量直接影响观众体验。 顶伯文字…...

支持 SSML 标签,让配音精准控制语调与重音

🎯 支持 SSML 标签,让配音精准控制语调与重音在文字转语音(TTS)应用中,机械感的读音往往缺乏情感。 顶伯文字转语音工具全面支持 SSML(语音合成标记语言) 标签,让您通过简单标记精准…...

G-Helper终极教程:华硕笔记本轻量级性能控制神器

G-Helper终极教程:华硕笔记本轻量级性能控制神器 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Expertb…...

2026年十大最佳地区搜索排名优化工具:权威榜单赋能企业高效增长

本文全面梳理了2026年十大主流地区搜索排名优化工具的核心功能与应用价值,旨在为本地企业提供客观、实用的选型参考。通过对各工具地域关键词布局、多平台同步能力及实时数据监控等关键模块的解析,结合具体参数指标与套餐定价,系统呈现不同场…...

Ubuntu中ping命令安装与网络诊断全攻略

1. 项目概述:一个看似简单却暗藏玄机的问题“如何在Ubuntu中安装ping”,这个标题乍一看,可能会让很多老手会心一笑,甚至觉得有些“小白”。但恰恰是这个看似基础到不能再基础的问题,却是我在多年运维和开发工作中&…...

py每日spider案例之某website之xin东方选课搜索接口(难度一般 扣取代码即可)

加密位置: 逆向接口参数: 逆向接口: const g = globalThis; g.window = g; g.self = g; g.location = {<...

【实用小程序】超轻量级文件上传下载中心 (File Download Server)

站内源码及jar包下载 一、项目概述 文件下载中心一个基于 Java 内置 HTTP 服务器(com.sun.net.httpserver)构建的轻量级文件管理服务。它零第三方依赖,单 JAR 包即可运行,适合在内网环境或临时场景中快速搭建文件共享站点。 你的团队需要临时共享一批日志文件或交付物,…...

5大核心模块彻底解决Windows更新故障:Reset-Windows-Update-Tool专业修复指南

5大核心模块彻底解决Windows更新故障&#xff1a;Reset-Windows-Update-Tool专业修复指南 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update…...

突破性开源Switch模拟器Ryujinx:零基础实现PC端任天堂游戏全兼容

突破性开源Switch模拟器Ryujinx&#xff1a;零基础实现PC端任天堂游戏全兼容 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在电脑上体验《塞尔达传说&#xff1a;旷野之息》的冒险…...

golang如何实现分布式幂等方案_golang分布式幂等方案实现教程.txt

...

【PCL中Ptr释放问题 aligned_free 的2种解决方法】

PCL中Ptr释放问题 aligned_free解决方法1解决方法2解决方法1 添加avx指令&#xff0c;参考这篇博客https://blog.csdn.net/qq_60609496/article/details/123900817 解决方法2 我按照方法1尝试添加了avx或者sse等&#xff0c;都不行&#xff0c;我是要做一个静态库的时候链接…...

显存又爆了?移动云弹性KV缓存:让你告别“显存焦虑”

上下文越长&#xff0c;显存越吃紧对话轮次越多&#xff0c;延迟越明显并发量一高&#xff0c;服务就卡顿……随着AI大模型向超长上下文、高并发、多轮交互深度演进&#xff0c;AI推理所需缓存的内容呈指数级增长。显存容量的需求爆炸与显存采购的高昂成本&#xff0c;使得超长…...

基于STM32单片机人体健康检测血糖检测监测无线蓝牙APP设计S312

本系统由STM32F103C8T6单片机核心板、OLED屏、无线模块、血糖模拟检测、蜂鸣器报警、电源电路、按键电路组成。【1】液晶显示&#xff1a;OLED液晶显示心率值、心率上下限、血氧值、血氧阈值、血压值、血压阈值、血糖值、血糖上下限值以及心率血氧是否在采集测算中、当前数据是…...

用1.44寸ST7735 TFT屏DIY一个桌面天气站(附STM32/Arduino完整项目代码)

用1.44寸ST7735 TFT屏打造智能桌面天气站&#xff08;STM32/Arduino全流程实战&#xff09; 在创客圈里&#xff0c;能够实时显示天气信息的桌面小设备一直备受青睐。本文将带你从零开始&#xff0c;利用常见的1.44寸ST7735 TFT屏幕&#xff0c;构建一个功能完善的智能天气站。…...

【深度解析】Qwen 3.6 vs Gemma 4:本地大模型时代,如何选对“日常开发模型”

摘要&#xff1a; 开源权重模型正在快速逼近闭源模型能力边界。本文结合 Qwen 3.6 与 Gemma 4 的实际案例&#xff0c;从架构、上下文、显存、基准测试到落地场景&#xff0c;拆解本地大模型选型逻辑&#xff0c;并给出可直接运行的 Python 调用示例。 背景介绍 近两年&#xf…...

编写程序统计婚恋交友消费,相处长处度数据,分析理性婚恋模式,减少年轻人恋爱高频无谓消费。

构建一个婚恋交友消费与相处时长统计分析、理性婚恋模式识别的商务智能示例项目&#xff0c;去营销化、中立化&#xff0c;仅用于学习与工程实践参考。一、实际应用场景描述在当代年轻人的婚恋与社交生活中&#xff0c;存在一种普遍现象&#xff1a;- 约会高度依赖“消费型场景…...

【作品集】OpenClaw-AgentOps企业级多智能体贵金属交易分析平台

项目名称&#xff1a;OpenClaw-AgentOps 企业级多智能体贵金属交易分析平台 展示方式&#xff1a;保留原有项目架构图&#xff0c;同时加入系统真实页面切片&#xff0c;用“设计图 实物图”的方式完整展示项目。1. 项目一句话介绍OpenClaw-AgentOps 是一个面向贵金属交易研究…...

探索Mod Assistant:Beat Saber模组管理工具的高效解决方案

探索Mod Assistant&#xff1a;Beat Saber模组管理工具的高效解决方案 【免费下载链接】ModAssistant Simple Beat Saber Mod Installer 项目地址: https://gitcode.com/gh_mirrors/mo/ModAssistant Beat Saber模组管理工具Mod Assistant是一款专为PC版Beat Saber设计的…...

自学 Vibe Coding 这三个网站就够了!

背景 我之前想学 Vibe Coding&#xff0c;刷到各种"AI 编程神器"、"零基础用 AI 写代码"的文章&#xff0c;看得心潮澎湃。 结果一上手就懵了&#xff1a;装了插件、开了 AI、对着编辑器发呆&#xff0c;不知道下一步干嘛。 网上搜教程&#xff0c;要么…...

Node.js后端服务快速集成Taotoken,为应用注入大模型能力

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Node.js后端服务快速集成Taotoken&#xff0c;为应用注入大模型能力 为Node.js后端服务添加大模型能力&#xff0c;可以显著提升应…...

到底如何?大跨度“玻璃肋”幕墙,安全吗?

到底如何?大跨度“玻璃肋”幕墙,安全吗? 1 概述 自玻璃诞生之日起,这种无色透明的物质便与建筑结下了不解之缘。随着“苹果店”的火热,通透、纯净的全玻结构系统使玻璃的材料特性发挥到了极致。当我们乐见于越来越大的玻璃幅面、越来越高的幕墙跨度时,全玻结构所具有的…...

从零构建嵌入式菜单库(一):原型探索——从一段单函数代码开始

从零构建嵌入式菜单库&#xff08;一&#xff09;&#xff1a;原型探索——从一段单函数代码开始 系列定位&#xff1a;这是一套编写教程——我们将一起从零构建一个基于 U8g2 的嵌入式菜单库&#xff0c;分析每一步的设计决策、收益与代价。 最终产物&#xff1a;u8g2_menu&am…...

电气设备、工业炉行业企业官网模板资源整理

做工业类企业网站的开发和设计时&#xff0c;很多人都会遇到一个痛点&#xff1a;行业适配的官网模板太少&#xff0c;要么风格老旧&#xff0c;要么和电气设备、工业炉这类硬核行业的调性不符&#xff0c;从零开发又耗时耗力。 今天就结合自己的建站经验&#xff0c;给大家整…...

【197期】视频一键转图文笔记

这期分享一个自己一直在用的视频转图文笔记工具&#xff0c;把视频文件和对应的字幕文件拖进去&#xff0c;一键就能生成详细的图文笔记。目前自媒体平台上的文章基本都靠这个流程来出&#xff0c;不用另外再写一遍&#xff0c;效率高了很多。使用方式很简单&#xff0c;把视频…...

FPGA微振动视频欧拉放大测量【附程序】

✨ 长期致力于微振动测量、欧拉视频放大、频率估计、Gabor、FPGA研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;改进线性欧拉视频放大算法的FPGA流水…...

Motrix WebExtension:浏览器下载加速的终极解决方案

Motrix WebExtension&#xff1a;浏览器下载加速的终极解决方案 【免费下载链接】motrix-webextension A browser extension for the Motrix Download Manager and its forks 项目地址: https://gitcode.com/gh_mirrors/mo/motrix-webextension 在当今数字时代&#xff…...

扩展卡尔曼滤波锂电池SOC估算【附代码】

✨ 长期致力于锂离子电池、SOC估算、锂离子电池建模、EKF算法研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;二阶RC等效电路建模与温度自适应参数修正…...