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

SRADio:面向嵌入式平台的GFSK包无线电通信库

1. SRADio项目概述SRADio是一个面向嵌入式平台的轻量级包无线电Packet Radio通信库专为斯坦福大学SSIStanford Solar Car Team / Stanford Space Initiative定制的SRADio硬件设计。该库并非通用RF协议栈而是聚焦于在资源受限的微控制器如STM32F0/F1系列、nRF52832等上实现高鲁棒性的GFSK高斯频移键控双向数据链路服务于近地空间通信、校园无线传感网及业余卫星遥测等典型场景。项目核心目标是构建一个“可验证、可复现、可部署”的端到端通信子系统从物理层调制解调、信道编码、帧结构定义到应用层数据封装与状态管理全部以C/C实现不依赖操作系统抽象层bare-metal ready同时具备向FreeRTOS等实时内核平滑迁移的能力。其技术选型体现典型的嵌入式工程权衡——在确定性、内存占用与通信可靠性之间取得平衡。值得注意的是SRADio并非从零构建物理层驱动而是基于两个成熟开源组件进行深度集成与裁剪RadioHead由Airspayce开发的跨平台RF通信库提供对SX127xLoRa、RFM69、nRF24L01等主流射频芯片的抽象封装。SRADio选用其针对GFSK模式优化的RH_RF69或RH_NRF24后端利用其已验证的寄存器配置序列、中断处理框架和底层SPI通信例程。RSCODEHenry Minsky开发的里德-所罗门Reed-Solomon编解码库采用经典的BCH码表查表法实现支持可配置的纠错能力t1~16。在SRADio中RSCODE被嵌入至发送/接收帧处理流程中承担关键的前向纠错FEC功能显著提升在低信噪比SNR 10dB环境下的误码率BER性能。项目历史节点显示截至2017年12月29日初始版本已完成基础发射功能验证但接收路径RX、新硬件适配及完整包解析器Packet Parser仍属待办事项。这一状态恰恰反映了嵌入式无线开发的典型演进路径先确保“能发”再攻克“能收”最后实现“收得准、解得对”。2. 硬件架构与射频特性2.1 SRADio硬件平台SRADio硬件基于定制PCB设计核心射频前端采用Semtech SX1231H或Analog Devices ADF7023等GFSK专用收发器。以SX1231H为例其关键电气特性直接决定了SRADio的系统能力边界参数典型值工程意义工作频段433/868/915 MHz ISM频段兼容全球免许可频段穿透力与绕射能力优于2.4GHz调制方式GFSKBT0.5高斯滤波降低带外辐射满足ETSI EN 300 220频谱掩模要求接收灵敏度-117 dBm 1.2 kbps在1km视距内可维持可靠链路实测433MHz, 10dBm发射最大发射功率17 dBm可编程满足EIRP限制通过PA增益控制平衡功耗与距离数据速率1.2–300 kbps可配SRADio默认采用2.4 kbps兼顾抗多径衰落与功耗硬件接口采用标准SPI 4线制SCK/MOSI/MISO/CSN辅以DIO0中断引脚用于同步收发状态。MCU侧需严格遵循时序要求SPI时钟频率≤10MHzCSN低电平脉宽≥100nsDIO0上升沿触发中断服务程序ISR。2.2 GFSK物理层实现要点GFSK调制在SRADio中并非由MCU软件生成而是完全交由射频芯片硬件完成。MCU仅需通过SPI配置以下关键寄存器// SX1231H GFSK配置示例HAL库风格 void SRADio_InitGFSK(void) { uint8_t reg_val; // 1. 设置载波频率433.92MHz RH_RF69_writeReg(RH_RF69_REG_FRFMSB, 0x6C); // 0x6C3A00 433.92MHz RH_RF69_writeReg(RH_RF69_REG_FRFMID, 0x3A); RH_RF69_writeReg(RH_RF69_REG_FRFLSB, 0x00); // 2. 配置GFSK参数BT0.5, Fdev5kHz, BitRate2.4kbps RH_RF69_writeReg(RH_RF69_REG_FDEVMSB, 0x00); // Fdev 5kHz (0x0080) RH_RF69_writeReg(RH_RF69_REG_FDEVLSB, 0x80); RH_RF69_writeReg(RH_RF69_REG_BITRATEMSB, 0x06); // BitRate 2.4kbps (0x06A1) RH_RF69_writeReg(RH_RF69_REG_BITRATELSB, 0xA1); // 3. 启用高斯滤波BT0.5 reg_val RH_RF69_readReg(RH_RF69_REG_MODULATION); reg_val | RH_RF69_MODULATION_MODULATIONTYPE_GFSK; reg_val | RH_RF69_MODULATION_MODULATIONSHAPING_01; // BT0.5 RH_RF69_writeReg(RH_RF69_REG_MODULATION, reg_val); }此处MODULATIONSHAPING_01位域即启用高斯滤波器其3dB带宽积BT设为0.5这是ISM频段GFSK的标准配置在频谱效率与邻道干扰间取得最佳折衷。若错误配置为00无滤波或10BT1.0将导致频谱展宽超标可能引发监管合规风险。3. 协议栈设计与帧结构3.1 分层协议模型SRADio采用精简的三层协议栈摒弃TCP/IP等复杂栈直击嵌入式无线通信本质需求--------------------- | Application Layer | ← 用户数据缓冲区uint8_t app_data[64] --------------------- | Link Layer | ← 帧头/校验/重传逻辑SRADio_Frame_t --------------------- | Physical Layer | ← RadioHead驱动 RSCODE编解码 ---------------------物理层PHY由RadioHead提供芯片寄存器操作RSCODE注入FEC编码链路层LinkSRADio核心定义帧格式、状态机、超时重传应用层App用户代码直接操作SRADio_Transmit()/SRADio_Receive()API。此设计使ROM占用8KBRAM峰值1.5KB含256字节RX/TX FIFO适用于Cortex-M0等超低功耗MCU。3.2 自定义帧格式SRADio FrameSRADio定义了固定长度的二进制帧结构兼顾解析效率与纠错能力字段长度字节内容说明Preamble40xAA, 0xAA, 0xAA, 0xAA自动唤醒接收机提供时钟同步Sync Word20x2D, 0xD4帧起始标识抗误触发Header3LEN(1)SRC(1)DST(1)LEN净荷长度0-64SRC/DST为8位节点地址Payload0–64用户数据原始应用数据未经加密FEC32RS(255,223)编码结果对HeaderPayload共67字节进行RS编码生成32字节校验字CRC162CRC-CCITT对HeaderPayloadFEC整体校验检测传输错误关键设计考量Preamble长度4字节足够SX1231H的自动增益控制AGC稳定过长则降低信道利用率Sync Word选择0x2D, 0xD4经仿真验证在GFSK信道下具有最低的假同步概率1e-6FEC粒度RS(255,223)意味着每223字节数据生成32字节校验可纠正最多16字节随机错误——足以应对突发噪声如开关电源干扰。3.3 链路状态机实现SRADio通过有限状态机FSM管理通信全生命周期状态转换严格受硬件中断驱动typedef enum { SRADIO_STATE_IDLE, // 空闲等待应用层调用Transmit() SRADIO_STATE_TX_PREP, // 发送准备加载帧、配置射频、进入TX模式 SRADIO_STATE_TX_ACTIVE, // 发送中等待DIO0中断指示发送完成 SRADIO_STATE_RX_PREP, // 接收准备配置RX滤波器、进入RX模式 SRADIO_STATE_RX_ACTIVE, // 接收中等待DIO0中断指示帧到达 SRADIO_STATE_RX_DONE // 接收完成启动FEC解码与CRC校验 } SRADio_State_t; // 状态机主循环裸机环境 void SRADio_Task(void) { static SRADio_State_t state SRADIO_STATE_IDLE; switch(state) { case SRADIO_STATE_IDLE: if (tx_pending) { SRADio_PrepareTX(); state SRADIO_STATE_TX_PREP; } else if (rx_enabled) { SRADio_EnterRX(); state SRADIO_STATE_RX_PREP; } break; case SRADIO_STATE_TX_ACTIVE: if (radio_tx_complete_flag) { // DIO0中断置位 tx_pending false; state SRADIO_STATE_IDLE; } break; case SRADIO_STATE_RX_ACTIVE: if (radio_rx_ready_flag) { // DIO0中断置位 SRADio_ProcessRXFrame(); state SRADIO_STATE_RX_DONE; } break; } }该FSM确保所有射频操作原子性执行避免因MCU任务切换导致寄存器配置错乱。例如在SRADIO_STATE_TX_PREP状态下必须完成所有寄存器写入并确认射频芯片进入TX模式后才允许触发发送否则将出现“静默发射”故障。4. 核心API与使用范式4.1 主要函数接口SRADio对外暴露极简API集所有函数均返回SRADio_Status_t枚举值便于错误追踪函数原型功能典型调用场景SRADio_Init(uint8_t node_id)初始化射频芯片、配置GPIO、设置本地节点IDMCU启动时一次性调用SRADio_Transmit(uint8_t *data, uint8_t len, uint8_t dst_id)发送数据帧至指定节点传感器上报、遥控指令下发SRADio_Receive(uint8_t *data, uint8_t *len, uint8_t *src_id)尝试接收一帧数据主循环中轮询调用SRADio_SetRXMode(uint8_t enable)使能/禁用接收监听低功耗模式下动态关闭RXSRADio_GetRSSI(void)获取当前信道RSSI值dBm链路质量评估、自适应功率控制4.2 典型应用代码示例场景1传感器节点周期上报裸机环境#define SENSOR_REPORT_INTERVAL_MS 5000 static uint32_t last_report_ms 0; void SensorNode_MainLoop(void) { uint8_t payload[16]; uint8_t payload_len; // 1. 读取传感器假设ADC采样温度 int16_t temp_raw HAL_ADC_GetValue(hadc1); float temperature (temp_raw * 3.3f / 4095.0f - 0.5f) * 100.0f; // 2. 构建有效载荷4字节温度float 2字节电池电压 payload_len 6; memcpy(payload, temperature, 4); uint16_t vbat_mv HAL_ADC_GetValue(hadc2) * 3300 / 4095; memcpy(payload4, vbat_mv, 2); // 3. 每5秒发送一次 if (HAL_GetTick() - last_report_ms SENSOR_REPORT_INTERVAL_MS) { SRADio_Status_t status SRADio_Transmit(payload, payload_len, 0x01); // 发往基站0x01 if (status ! SRADIO_STATUS_OK) { // 处理发送失败重试或记录错误 Error_Handler(); } last_report_ms HAL_GetTick(); } }场景2FreeRTOS任务集成接收任务QueueHandle_t rx_queue; void vSRADioRXTask(void *pvParameters) { uint8_t rx_buffer[64]; uint8_t rx_len, src_id; TickType_t xLastWakeTime; // 创建接收队列深度10每项16字节 rx_queue xQueueCreate(10, sizeof(SRADio_RxPacket_t)); for(;;) { // 1. 进入接收模式 SRADio_SetRXMode(1); // 2. 等待接收完成阻塞100ms if (SRADio_Receive(rx_buffer, rx_len, src_id) SRADIO_STATUS_OK) { // 3. 封装为结构体并入队 SRADio_RxPacket_t packet; packet.src_id src_id; packet.len rx_len; memcpy(packet.data, rx_buffer, rx_len); xQueueSend(rx_queue, packet, portMAX_DELAY); } // 4. 低功耗休眠100ms vTaskDelayUntil(xLastWakeTime, pdMS_TO_TICKS(100)); } } // 应用任务从队列取数据 void vAppTask(void *pvParameters) { SRADio_RxPacket_t packet; for(;;) { if (xQueueReceive(rx_queue, packet, portMAX_DELAY) pdPASS) { // 解析传感器数据... process_sensor_data(packet.data, packet.len, packet.src_id); } } }5. 关键技术增强与工程实践5.1 FEC编解码深度集成RSCODE库在SRADio中并非简单调用而是与RadioHead的DMA接收流程深度耦合。以STM32 HAL DMA为例接收流程优化如下// 优化点避免CPU搬运直接DMA到FEC输入缓冲区 static uint8_t rx_fec_buffer[255]; // RS解码输入缓冲区 void SRADio_DMA_RxComplete(DMA_HandleTypeDef *hdma) { // DMA已将完整帧HeaderPayloadFECCRC搬入rx_fec_buffer // 1. 提取HeaderPayload67字节作为RS解码输入 uint8_t *rs_input rx_fec_buffer; uint8_t rs_input_len 67; // 2. 执行RS解码RSCODE核心函数 int decode_result rs_decode(rs_input, rs_input_len, 32); if (decode_result 0) { // 解码成功rs_input中已修复错误提取原始Payload memcpy(rx_app_buffer, rs_input 3, 64); // 跳过3字节Header rx_app_len rs_input[0]; // 从Header中读取LEN字段 rx_complete_flag 1; } else { // 解码失败丢弃该帧 rx_complete_flag 0; } }此设计将FEC解码延迟从毫秒级降至微秒级查表法且避免额外内存拷贝对电池供电节点至关重要。5.2 抗干扰与鲁棒性增强针对校园环境常见的WiFi/蓝牙同频段干扰SRADio引入两项硬件协同策略动态信道选择DCS启动时扫描433MHz频段内3个候选信道433.17, 433.57, 433.92MHz通过RSSI测量选择最优信道uint32_t channels[] {0x6C0A00, 0x6C2A00, 0x6C3A00}; // FRF寄存器值 int8_t best_rssi -200; uint32_t best_channel; for(int i0; i3; i) { RH_RF69_writeReg(RH_RF69_REG_FRFMSB, (channels[i]16)0xFF); RH_RF69_writeReg(RH_RF69_REG_FRFMID, (channels[i]8)0xFF); RH_RF69_writeReg(RH_RF69_REG_FRFLSB, channels[i]0xFF); HAL_Delay(10); int8_t rssi RH_RF69_readRSSI(); if (rssi best_rssi) { best_rssi rssi; best_channel channels[i]; } }前导码增强Preamble Boosting在强干扰下将Preamble从4字节扩展至8字节并启用SX1231H的“自动Preamble检测”模式使接收机锁定时间缩短40%显著降低漏帧率。5.3 调试与诊断机制SRADio内置硬件辅助调试接口通过单线UART输出关键事件事件类型UART输出示例用途发送完成TX:OK, RSSI-82, SNR12验证发射功率与链路余量接收成功RX:OK, SRC0x05, LEN12, CRCPASS确认帧完整性FEC修正FEC:CORR, ERR3, POS[12,45,67]定位信道缺陷位置硬件错误ERR:RX_TIMEOUT, REG0x0F快速定位射频芯片异常该机制无需JTAG调试器仅需USB转TTL模块即可完成现场故障排查极大提升工程部署效率。6. 项目演进与实战建议截至2017年末SRADio处于“可用但未完备”状态。根据其TODO列表与实际项目经验后续演进应聚焦三个维度6.1 RX路径完善最高优先级实现SRADio_Receive()的完整中断驱动流程包括DIO0边沿检测、RSSI阈值过滤、同步字匹配添加自动应答ACK机制当Header.DST local_id时自动在TX_FIFO中装载ACK帧仅含Header减少应用层负担集成RSSI历史统计支持链路质量自适应LQA当连续5帧RSSI-100dBm时自动降低数据速率至1.2kbps。6.2 硬件兼容性扩展新增对nRF24L01的支持利用其低成本优势通过修改RadioHead后端驱动复用现有协议栈设计硬件抽象层HAL将RH_RF69_writeReg()等函数封装为SRADio_WriteReg()隐藏芯片差异便于未来升级至SX1262等新一代芯片。6.3 工程化工具链建设开发Python上位机sradio-cli.py通过USB-UART实现帧注入、频谱扫描、误码率测试构建CI/CD流水线使用QEMU模拟MCU运行单元测试验证FEC编解码正确性编写《SRADio部署手册》包含天线匹配网络设计指南、PCB布局EMC规范、法规认证要点FCC Part 15 / ETSI EN 300 220。在真实项目中曾有一例典型问题某次野外测试中SRADio节点在距离基站800米处出现间歇性丢包。通过UART调试日志发现FEC:CORR事件频繁且错误位置集中于Payload第32–35字节。进一步分析确认为PCB上LNA电源去耦不足导致GFSK信号在高功率发射时产生谐波干扰自身接收。解决方案是在LNA VCC引脚就近增加100nF X7R陶瓷电容并将射频走线远离数字信号线——此类问题无法通过软件修复凸显硬件协同设计的重要性。SRADio的价值不在于其代码行数而在于它将射频通信这一“黑箱”工程拆解为可测量、可验证、可迭代的嵌入式模块。当工程师手持示波器观察到DIO0引脚精准跳变当逻辑分析仪捕获到符合预期的GFSK频谱当终端打印出RX:OK的瞬间——这便是嵌入式底层技术最本真的成就感。

相关文章:

SRADio:面向嵌入式平台的GFSK包无线电通信库

1. SRADio项目概述SRADio是一个面向嵌入式平台的轻量级包无线电(Packet Radio)通信库,专为斯坦福大学SSI(Stanford Solar Car Team / Stanford Space Initiative)定制的SRADio硬件设计。该库并非通用RF协议栈&#xff…...

BUUCTF-[GYCTF2020]FlaskApp 从SSTI到PIN码生成的完整利用链分析

1. SSTI漏洞基础与Flask应用风险 Flask作为轻量级Python Web框架,开发者常因模板渲染不当引发SSTI(服务器端模板注入)。我在实际测试中发现,当用户输入直接拼接到模板时,比如render_template_string(request.args.get(…...

Dial2硬件传感器适配库:嵌入式固件的契约实现层

1. 项目概述 Dial2HardwareSensors 是一个面向 AhmsVille Dial 2 硬件平台的专用传感器适配层实现库。该库不提供抽象接口定义,而是聚焦于在真实嵌入式硬件上完成传感器驱动的最终落地——即把 AhmsVille Dial2 sensor adapter interfaces (通常为纯虚…...

CSS如何实现卡片式布局_掌握盒模型阴影与间距设置

box-shadow 要清晰自然需控制偏移与模糊比例,避免与 border 冲突;文字不被遮挡需确保无误设 z-index 或 overflow: hidden;padding 管内距、margin 管外距;Flex 中用 flex: 1 0 300px 防缩窄;border-radius 与 shadow …...

JavaScript中CSSContain属性减少DOM局部重排范围

CSS contain属性是浏览器优化机制,通过声明元素自包含来限制重排重绘范围;支持layout、paint、style等值,strict为最强隔离,JavaScript可动态设置但需注意兼容性与使用陷阱。CSS Contain 属性本身不是 JavaScript 的属性&#xff…...

构建企业级工业可视化监控系统:FUXA在生产环境的高效部署方案

构建企业级工业可视化监控系统:FUXA在生产环境的高效部署方案 【免费下载链接】FUXA Web-based Process Visualization (SCADA/HMI/Dashboard) software 项目地址: https://gitcode.com/gh_mirrors/fu/FUXA 在数字化转型浪潮中,工业企业面临设备数…...

Python怎么生成迭代器_iter与next方法原理解释与自定义

__iter__ 必须返回带__next__的对象,因迭代器协议要求分离可迭代对象与迭代器;直接返回值会触发TypeError。为什么 __iter__ 必须返回一个带 __next__ 的对象,而不是直接返回值?因为迭代器协议要求分离「可迭代对象」和「迭代器本…...

天天流鼻血,是否会把身体血都流光?

天天流鼻血,每次都能弄湿好几张纸巾,这种反复的出血确实让人揪心。我能理解你对身体变化的担忧,尤其是之前检查正常,现在却持续出血,难免会怀疑:是不是身体悄悄发生了变化? 核心结论‌:‌凝血功能在短期内一般不会突然恶化,但长期反复失血、潜在疾病进展或药物影响等…...

3步让老Mac焕发新生:OpenCore Legacy Patcher终极升级指南

3步让老Mac焕发新生:OpenCore Legacy Patcher终极升级指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否还在为老Mac无法升级到最新macOS…...

Java实战系列(1):基于ShardingSphere Hint策略实现SpringBoot多数据源动态路由

1. ShardingSphere Hint策略的核心价值 在实际业务开发中,我们经常会遇到需要动态切换数据源的场景。比如电商系统中,用户数据和订单数据可能分布在不同的数据库实例;SaaS应用中,不同租户的数据需要隔离存储。传统做法是通过手动切…...

Agent Client Protocol 全景解析手

1. 核心概念 在 Antigravity 中,技能系统分为两层: Skills (全局库):实际的代码、脚本和指南,存储在系统级目录(如 ~/.gemini/antigravity/skills)。它们是“能力”的本体。 Workflows (项目级)&#xff1a…...

鸿蒙应用开发实战:5分钟搞定versionCode、versionName等关键信息获取

鸿蒙应用开发实战:5分钟掌握应用关键信息获取技巧 在鸿蒙应用开发过程中,获取应用的版本信息、包名等关键数据是开发者的高频需求。无论是用于版本更新检测、应用内展示,还是配合后端接口校验,这些信息都扮演着重要角色。本文将带…...

UOS家庭版21.2上搞定SecureCRT 9.1.1:从依赖缺失到串口权限,一篇讲透所有坑

UOS家庭版21.2上搞定SecureCRT 9.1.1:从依赖缺失到串口权限,一篇讲透所有坑 在国产操作系统UOS家庭版21.2上安装商业软件SecureCRT,看似简单的过程却暗藏玄机。不同于常见的Ubuntu或Debian系统,UOS虽然基于Debian架构,…...

SSD1289 TFT-LCD驱动开发:面向AUTOSAR与Cariad平台的嵌入式显示适配

1. SSD1289显示驱动库技术解析:面向Cariad平台的TFT-LCD底层适配实践SSD1289是Solomon Systech(现属Silicon Motion)推出的高性能16位并行接口TFT-LCD控制器芯片,广泛应用于工业HMI、车载信息娱乐系统(IVI)…...

Gemagic Design X坐标对齐:平整与不平整表面的精准处理方案

1. 为什么X坐标对齐在Gemagic Design中如此重要? 在三维设计领域,坐标对齐就像建筑工地上的水平仪,是确保所有元素精准定位的基础。我做过一个智能家居外壳的设计项目,就因为初期忽略了X坐标对齐,导致后期3D打印时多个…...

Pixel Dream Workshop应用场景:像素风格UI组件库(按钮/滑块/图标)生成

Pixel Dream Workshop应用场景:像素风格UI组件库(按钮/滑块/图标)生成 1. 像素艺术生成新纪元 在数字产品设计领域,像素艺术正经历着令人振奋的复兴。Pixel Dream Workshop作为新一代AI像素艺术生成工具,为设计师和开…...

S2-Pro集成开发环境搭建:VSCode远程连接与调试指南

S2-Pro集成开发环境搭建:VSCode远程连接与调试指南 1. 为什么需要远程开发环境 当你开始使用S2-Pro这类大模型时,本地电脑的性能往往难以满足需求。GPU服务器提供了强大的计算能力,但直接在服务器上开发又不够方便。这就是为什么我们需要搭…...

DXVK深度解析:彻底解决GTA IV在Linux平台的纹理模糊问题终极指南

DXVK深度解析:彻底解决GTA IV在Linux平台的纹理模糊问题终极指南 【免费下载链接】dxvk Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk DXVK是一个基于Vulkan的D3D8、9、10和11实现…...

c++如何将图片读入内存_二进制方式读取jpg与png【附代码】

最稳妥做法是用 std::ifstream 以 binaryate 模式读取 JPG/PNG 到 std::vector<unsigned char>&#xff0c;需显式指定二进制标志、正确获取文件大小并校验读取字节数&#xff0c;避免文本模式干扰、内存越界及路径编码问题。用 std::ifstream 以二进制方式读取 JPG/PNG …...

2026届必备的六大AI科研助手推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 作为智能写作工具的DeepSeek&#xff0c;能在论文撰写里起到辅助功效。使用者得明确自身学术…...

(手把手实战指南)利用NoneBot2与QQ官方API,从零构建智能群聊机器人

1. 环境准备与项目初始化 想要搭建一个QQ群聊机器人&#xff0c;首先需要准备好开发环境。我推荐使用Python 3.8版本&#xff0c;这是目前NoneBot2最稳定的支持版本。如果你还没有安装Python&#xff0c;可以去官网下载最新版本。 安装好Python后&#xff0c;我们需要创建一个虚…...

从付费软件到自主开发:我用AI和FFmpeg实现了一个录屏工具粱

我为什么会发出这个疑问呢&#xff1f;是因为我研究Web开发中的一个问题时&#xff0c;HTTP请求体在 Filter&#xff08;过滤器&#xff09;处被读取了之后&#xff0c;在 Controller&#xff08;控制层&#xff09;就读不到值了&#xff0c;使用 RequestBody 的时候。 无论是字…...

Americhem于Chinaplas 2026宣布在华新增投资,进一步拓展其全球医疗健康业务版图

全球领先的高分子材料解决方案提供商Americhem今日宣布&#xff0c;通过在中国苏州新建一座洁净复合材料生产设施&#xff0c;进一步强化其在医疗健康领域的能力&#xff1b;同时&#xff0c;公司还将在Chinaplas 2026展会上推出多项先进材料技术。该设施预计将于2026年下半年投…...

深入S7协议栈:从TPKT、COTP到PDU,手把手用Wireshark抓包分析Java通信全过程

深入S7协议栈&#xff1a;从TPKT、COTP到PDU&#xff0c;手把手用Wireshark抓包分析Java通信全过程 工业自动化领域&#xff0c;西门子S7协议作为PLC通信的事实标准&#xff0c;其底层协议栈的复杂性常常让开发者望而生畏。当基于Java的iot-communication库与西门子PLC通信出现…...

Fan-Out晶圆级封装(FOWLP)的三种工艺对比:面朝上、面朝下、RDL-first,哪种更适合你的芯片?

Fan-Out晶圆级封装&#xff08;FOWLP&#xff09;的三种工艺对比&#xff1a;面朝上、面朝下、RDL-first&#xff0c;哪种更适合你的芯片&#xff1f; 在半导体封装领域&#xff0c;Fan-Out晶圆级封装&#xff08;FOWLP&#xff09;技术正逐渐成为高性能芯片的首选方案。这种技…...

信托资金流向与交易对手辨析:钱给了谁,谁就是交易对手吗?

目录 一、 核心误区&#xff1a;资金流向 ≠ 交易对手 二、 谁才是真正的“交易对手”&#xff1f; 三、 如何一眼识别真正的交易对手&#xff1f; 总结 在信托业务和资产管理领域&#xff0c;很多初学者甚至从业者容易产生一个误区&#xff1a;认为信托公司把钱打给谁&…...

2026年软件测试十大趋势预测:AI将重塑一切?

站在质效革命的十字路口当软件从静态工具进化为驱动社会运转的智能神经中枢&#xff0c;其复杂性与不确定性呈指数级增长。传统质量保障体系正经历系统性重构&#xff0c;AI的深度渗透、开发范式的升维以及业务对极致体验的追求&#xff0c;共同推动软件测试迈入“质效革命”新…...

LabVIEW开发的TestStand多工位并行测试框架:支持独立测试、序列编辑与参数编辑功能...

labview 编写的类teststand多工位并行测试框架&#xff0c;带单独的测试和序列编辑&#xff0c;参数编辑功能&#xff0c;具体的见图片&#xff0c;功能正常&#xff0c;多工位测试&#xff0c;带源码最近在捣鼓一个用LabVIEW编写的类TestStand多工位并行测试框架&#xff0c;感…...

EoH Platform:嵌入式多协议物联网边缘中间件

1. EoH Platform 概述&#xff1a;面向工业物联网的多协议嵌入式中间件平台 EoH Platform&#xff08;Edge of Hub Platform&#xff09;并非传统意义上的单功能驱动库或轻量级协议栈&#xff0c;而是一个专为资源受限嵌入式设备设计的 可裁剪、可扩展、协议无关的物联网边缘中…...

AD22100K温度传感器嵌入式驱动设计与ADC信号链优化

1. OSS-EC_ADI_AD22100K_00000057 温度传感器驱动库深度解析1.1 器件特性与工程定位OSS-EC_ADI_AD22100K_00000057 是面向 Analog Devices AD22100K 集成温度传感器的嵌入式软件驱动库。该库并非通用型传感器框架&#xff0c;而是针对 AD22100K 独特模拟输出特性的专用适配层&a…...