自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(684)
  • 收藏
  • 关注

原创 嵌入式系统的交付检查

嵌入式系统的交付检查的讨论先落在硬件型号、编译选项和内存边界。不要用一段笼统的经验替代前提:输入从哪里来、谁负责确认、失败后怎样停止,都应在开始前写清。

2026-08-31 23:32:16 293 1

原创 受限设备的资源核算

受限设备的资源核算的讨论先落在硬件型号、编译选项和内存边界。不要用一段笼统的经验替代前提:输入从哪里来、谁负责确认、失败后怎样停止,都应在开始前写清。

2026-08-31 23:27:36 307

原创 驱动超时的隔离策略

驱动超时的隔离策略的讨论先落在硬件型号、编译选项和内存边界。不要用一段笼统的经验替代前提:输入从哪里来、谁负责确认、失败后怎样停止,都应在开始前写清。

2026-08-31 23:22:56 335

原创 裸机链路的拆分方法

裸机链路的拆分方法的讨论先落在硬件型号、编译选项和内存边界。不要用一段笼统的经验替代前提:输入从哪里来、谁负责确认、失败后怎样停止,都应在开始前写清。

2026-08-31 23:18:36 339

原创 实时任务的复盘记录

实时任务的复盘记录的讨论先落在硬件型号、编译选项和内存边界。不要用一段笼统的经验替代前提:输入从哪里来、谁负责确认、失败后怎样停止,都应在开始前写清。

2026-08-31 23:13:45 442

原创 驱动原型的交付路径

驱动原型的交付路径的讨论先落在硬件型号、编译选项和内存边界。不要用一段笼统的经验替代前提:输入从哪里来、谁负责确认、失败后怎样停止,都应在开始前写清。

2026-08-31 23:09:17 428

原创 嵌入式资源的取舍

嵌入式资源的取舍的讨论先落在硬件型号、编译选项和内存边界。不要用一段笼统的经验替代前提:输入从哪里来、谁负责确认、失败后怎样停止,都应在开始前写清。

2026-08-31 23:04:26 620

原创 端侧模型的降级设计

端侧模型的降级设计的讨论先落在硬件型号、编译选项和内存边界。不要用一段笼统的经验替代前提:输入从哪里来、谁负责确认、失败后怎样停止,都应在开始前写清。

2026-08-31 22:59:25 831

原创 微型推理的首版设计

微型推理的首版设计的讨论先落在硬件型号、编译选项和内存边界。不要用一段笼统的经验替代前提:输入从哪里来、谁负责确认、失败后怎样停止,都应在开始前写清。

2026-08-31 22:52:45 703

原创 边缘推理的验证方法

边缘推理的验证方法的讨论先落在硬件型号、编译选项和内存边界。不要用一段笼统的经验替代前提:输入从哪里来、谁负责确认、失败后怎样停止,都应在开始前写清。

2026-08-31 22:47:45 496

原创 嵌入式系统故障复盘要点

嵌入式系统发生故障后,恢复设备通常是最紧急的工作:让服务重新响应、替换异常设备、恢复外设连接、补传缺失数据。但恢复并不等于事件结束。若没有复盘,下次出现同类问题时,团队仍可能从“设备怎么又离线了”开始猜。复盘的目的,是将现场的事实、判断和改进沉淀下来,让后续维护少依赖个人记忆。嵌入式系统的复盘尤其需要重视环境差异。云端服务可以集中查看配置和日志,边缘设备却可能分散在不同地点,硬件批次、供电、网络和外设都不完全一致。因此,不能只记录应用报错,还要记录设备身份、版本、现场条件和恢复方式。

2026-08-30 09:36:32 300

原创 受限设备的上线配置管理

受限设备上线时,配置常常比应用包本身更容易出错。设备存储有限、网络不稳定、远程访问受限,现场维护人员也未必能随时介入。一个错误的模型路径、服务地址、日志级别或启动参数,可能让设备反复重启、无法上报,甚至把测试配置带进实际场景。配置管理的任务,就是让每台设备运行的内容可确认、可追溯,也能在必要时安全恢复。“受限”不只是算力小,还包括更新窗口短、带宽有限、物理接触困难和现场条件不稳定。管理方式不能照搬云端服务的做法。配置应尽量少、来源清楚、默认安全,并避免依赖现场临时手工输入。

2026-08-30 09:27:51 351 1

原创 内核驱动卡顿的排查顺序

嵌入式设备出现卡顿时,应用层往往最先被怀疑:是不是模型太大、循环写得不好、界面更新太频繁。但如果症状与某个外设、驱动或系统调用有关,根因可能在更靠下的层面。内核驱动中的等待、锁竞争、中断异常或 I/O 重试,都可能表现为应用“偶尔没反应”。排查时需要沿着现象逐层缩小范围,而不是先动最容易修改的业务代码。内核相关问题也不意味着可以随意修改驱动或重编内核。低层改动影响面大,错误配置可能让设备无法启动。更稳妥的顺序是:先确认现象和范围,保存证据,检查运行状态,再在受控环境中验证假设。

2026-08-30 09:24:11 370

原创 嵌入式开发环境的复现方法

嵌入式问题常常有很强的环境依赖:同一份代码在开发板上失败,在电脑上却正常;某台设备偶发重启,换一块板子又无法重现。原因可能藏在系统镜像、内核驱动、外设连接、启动参数、时钟或实际负载里。仅把应用代码拷出来,很难构成有效复现。复现环境的目标不是复制整套现场,而是保留那些会影响问题的条件,并把它们整理成其他人能够重新执行的步骤。环境越透明,排查越少依赖某个开发者的记忆;环境越小,验证就越容易重复。

2026-08-30 09:20:02 351

原创 嵌入式系统的日常巡检

嵌入式系统一旦进入长期运行阶段,问题往往不是突然出现的。存储空间慢慢减少、设备温度在某些时段升高、网络偶尔断开、传感器偶发读数异常、服务重启次数增加,这些都可能先以很小的迹象出现。日常巡检的意义,就是把这些迹象变成可跟进的信息,而不是等到设备完全不可用才发现。巡检应围绕设备真实职责设计。运行推理任务的板卡、采集传感器的控制器、展示信息的终端,关注点并不相同。把所有设备都套进同一份很长的清单,通常只会产生噪声。先明确设备提供什么能力、依赖什么外设和网络、失败会影响谁,才能选出值得每天看的项目。

2026-08-30 09:15:32 381

原创 裸机实验失败后的定位方法

裸机实验失败时,信息往往比在完整系统里更少:没有成熟的日志平台,没有容器隔离,也未必有稳定网络。设备可能只是停在启动阶段、外设没有响应,或者程序运行一段时间后无声退出。越是这种场景,越不能靠反复刷写镜像或随机修改参数。先保留现场、再建立排查顺序,通常更有效。定位的目标不是尽快找到一个“看起来能跑”的配置,而是确认失败发生在哪个层面:供电与连线、启动介质、固件、内核、驱动、文件系统、应用初始化,还是负载运行。每一层都有不同的证据和可控测试。跳过层次直接修改应用,容易掩盖根因。

2026-08-30 09:11:56 422

原创 嵌入式部署前的配置检查

嵌入式设备的部署,常常发生在与开发环境很不一样的现场。设备型号、系统镜像、驱动、网络方式、存储介质和供电条件都可能不同。代码在电脑上能运行,不能说明它在目标板卡上能稳定启动。部署前的配置检查,就是把这些差异显式化,尽量把问题留在交付之前。检查的重点不是把每个参数都调一遍,而是确认运行所需的前提已经满足:软件与硬件版本是否匹配,模型和运行时是否兼容,设备权限和挂载路径是否正确,启动后的服务会不会误连到错误环境。任何一项模糊,都可能在现场变成难以定位的故障。

2026-08-30 09:05:26 458

原创 小芯片推理的时延与资源核对

在小型芯片上运行推理服务,体验问题往往不是单一原因造成的。用户感觉“识别变慢”,可能是模型计算变重,也可能是摄像头输入增加、内存紧张触发回收、设备温度升高导致频率调整,或者结果传输与显示占用了额外时间。只看一次平均时延,很难知道应该改模型、改负载,还是先检查设备状态。核对时延与资源,首先要承认设备资源有限。边缘硬件通常需要同时处理采集、预处理、推理、存储和网络通信。一个环节短时间占用过多,就会挤压其他环节。

2026-08-30 09:00:47 479 1

原创 边缘推理演示结果的验证

开始验证前,应明确演示要回答的问题。是确认设备能加载模型、验证某类输入能被处理、比较不同模型版本,还是检查在离线条件下仍能工作?目标不同,测试设计和结果解释也不同。没有明确目标的演示很容易变成“看起来效果不错”,但没人知道它是否满足实际需求。对于模型输出,还要说明它的含义和限制。分类标签、置信度、检测框或生成结果,都是算法基于输入做出的计算,不是对现场事实的保证。演示界面应避免用过度确定的措辞,必要时提示输入质量、设备状态和模型覆盖范围会影响结果。若设备处于高风险场景,演示不能替代完整安全评估。

2026-08-30 08:53:40 515

原创 边缘推理设备的运行保护

边缘推理设备常被部署在现场:摄像头旁、工厂设备旁、门店机柜里,或者网络不稳定的场所。它们不能像云端服务那样随时扩容或由专人查看,因此运行保护要更贴近设备本身。温度、供电、存储空间、内存、驱动状态和推理负载,任何一项持续异常都可能影响结果或让设备停止服务。运行保护的目标不是在检测到一点波动后就频繁降频、重启或切换模型。过度干预同样会破坏可用性。更可靠的做法是先收集状态、判断风险等级,在满足明确条件时执行受控动作,并记录每次动作的原因和结果。

2026-08-30 08:50:50 482 1

原创 嵌入式系统构建方案的选择

嵌入式系统构建方案的选择”不是一张泛泛的检查表。它要回答的是:当前系统面对什么输入,允许消耗多少资源,失败时停在哪里,又由谁处理。资源受限设备与软硬件协同链路往往跨过多个组件,问题也常藏在交界处。只看一段顺利运行的演示,很难判断方案能否进入真实环境。

2026-08-29 11:18:59 292 1

原创 资源受限设备升级前的确认项

讨论“资源受限设备升级前的确认项”时,最容易出现的偏差是先给方案,再补问题定义。资源受限设备与软硬件协同链路里,同一个实现放到不同负载、不同依赖版本或不同操作路径下,结果可能完全不同。更稳妥的起点,是把目标、限制和失败后的处理写清楚,让评审者知道哪些结论已经验证,哪些只是暂时判断。

2026-08-29 11:15:41 365

原创 内核驱动负载上升前的防线

彻底放弃纯硬中断驱动:高频网络或字符设备必须强行采用 NAPI 或 Tasklet/WorkQueue 混合机制,绝不允许每个数据包都拉高 IRQ。严防 TX 队列暴拉崩溃:驱动内必须实现与的背压水位线控制,严禁静默丢包或让 DMA 描述符发生 Buffer Overflow。DMA 缓冲区严格对齐:开辟给网卡 DMA 的 Ring 描述符物理地址,必须用申请且按 Cache Line (64 bytes) 显式对齐,防止 Cache 一致性穿透。

2026-08-29 11:10:55 351

原创 裸机驱动接口的约定方法

业务文件零包含芯片头文件main.c和业务逻辑模块绝不包含或类似头文件,所有交互必须走hal_*.h接口。错误码统一拒绝魔鬼数字:抛弃return -1习惯,必须定义包含HAL_ERR_前缀的结构化枚举,并提供诊断能力。结构体物理对齐明确化:用于驱动传输的数据模型,必须使用标量类型定义,避免跨平台或跨编译器时的内存对齐隐患。

2026-08-29 11:06:06 339

原创 实时系统代码审查清单

实时系统代码审查清单”不是一张泛泛的检查表。它要回答的是:当前系统面对什么输入,允许消耗多少资源,失败时停在哪里,又由谁处理。软件工程交付链路往往跨过多个组件,问题也常藏在交界处。只看一段顺利运行的演示,很难判断方案能否进入真实环境。

2026-08-29 10:59:54 473

原创 裸机调试工具的选型边界

在 C 语言裸机(Bare-metal)开发与硬件驱动调试阶段,面对物理总线抖动、DMA 内存乱序以及随机性中断丢失等顽疾,传统的硬编码printf或简单的 GPIO 翻转打点早已力不从心。为了在裸机侧引入异常识别与预测建模能力,团队开始寻找适合嵌入式调试与日志 Trace 的工具方案。选型表上看似百花齐放:J-Link RTT、OpenOCD + SystemView、嵌入式轻量微型检测库,以及各种基于 SWO (Serial Wire Output) 的跟踪器。

2026-08-29 10:54:51 442

原创 嵌入式灰度更新的验证方法

把智能检索(Vector Search)与端侧 Agent 知识库编排逻辑下沉到 ARM Cortex-M55 / Cortex-M7 这类微控制器上,能让边缘工业传感器无需依赖外网便可完成本地故障语义识别。然而上周在一批物联网网关(搭载 RT-Thread / FreeRTOS)的灰度 OTA 升级中,下发了包含新版向量索引格式与上下文 Prompt 编排引擎的固件后,约有 3% 的现场设备在重启后直接触发了硬故障(HardFault)。使用 Segger J-Link 连接故障设备并用。

2026-08-29 10:48:59 434

原创 小芯片推理的并发边界

背压逻辑写入模块后,必须在真实嵌入式板卡上使用高并发压测工具(如vegeta或wrk)配合gdb进行极端验证。# 启动压测脚本# 压测期间观察端侧控制台日志输出[ACCEPT] 请求通过,当前激活 Slot 数: 1[ACCEPT] 请求通过,当前激活 Slot 数: 2[ACCEPT] 请求通过,当前激活 Slot 数: 3[ACCEPT] 请求通过,当前激活 Slot 数: 4[REJECT] 并发槽位已满 (4/4), 拒绝请求[REJECT] 并发槽位已满 (4/4), 拒绝请求。

2026-08-29 10:42:24 467

原创 边缘推理中的上下文与工具分工

边缘推理中的上下文与工具分工”不是一张泛泛的检查表。它要回答的是:当前系统面对什么输入,允许消耗多少资源,失败时停在哪里,又由谁处理。模型推理与工具调用链路往往跨过多个组件,问题也常藏在交界处。只看一段顺利运行的演示,很难判断方案能否进入真实环境。

2026-08-29 10:35:43 469

原创 边缘模型量化的评审要点

边缘模型量化的评审要点”不是一张泛泛的检查表。它要回答的是:当前系统面对什么输入,允许消耗多少资源,失败时停在哪里,又由谁处理。模型推理与工具调用链路往往跨过多个组件,问题也常藏在交界处。只看一段顺利运行的演示,很难判断方案能否进入真实环境。

2026-08-29 10:30:54 527

原创 引导系统协作的常见边界

在嵌入式 Linux 系统研发项目中,经常出现这样的画面:BSP 团队声称“内核和 U-Boot 已经完美 Boot 起来了”,而上层应用团队却抱怨“拿到板子根本进不去 rootfs 命令行”。双方各执一词的根源,在于嵌入式 Linux 体系中 Bootloader (U-Boot)、Linux Kernel 与 Rootfs (Busybox/systemd) 之间的。Bootloader 团队通过bootargs环境变量向内核传递根文件系统挂载点、TTY 控制台设备号以及 Memory Map;

2026-08-28 10:14:54 1337

原创 受限设备的排障证据

现场设备跑在野外,死机复位看门狗不断重启,日志却空空如也。研发接到客服反馈把板子拿到跳板机前,尝试用串口捕获复位前的最后几行输出,发现打印卡在半句后直接挂断。这是嵌入式 MCU 排障中最令人痛恨的“现场蒸发”现象。在 SRAM 只有几十 KB 的资源受限 MCU 上,传统的printf输出强依赖 UART 发送 FIFO。一旦触发 HardFault 或 Watchdog 超时,CPU 会立即停机或复位,导致还在 RAM 缓冲区和 Tx FIFO 中的最后几十字节关键日志根本没机会发出去。

2026-08-28 10:11:24 1389 1

原创 内核驱动性能数据的解读

在将一款千兆/万兆 PCIe 网卡驱动移植到新的 ARM64 BSP 平台后,测试组发来报告:在 10Gbps 网卡上运行 iperf3 测试,双向吞吐量卡死在 2.1Gbps,再也打不上去了。研发团队最初怀疑是硬件 PHY 芯片信号衰减或 PCIe Gen3 x2 的 Lane 带宽不足,甚至准备修改 PCB 走线。但深入内核排查后发现,硬件物理带宽完全正常,真正的瓶颈出在 BSP 默认的中断分配策略上——网卡所有的 RX 硬件中断,都被毫无保留地压在了 CPU0 一个核心上,导致 CPU0 的。

2026-08-28 10:05:27 1389

原创 裸机驱动的最小实现

很多裸机 C 语言项目在迭代几个版本后,main.c就会膨胀成一个动辄几千行的“万能文件”。串口接收、SPI 显示屏刷新、ADC 采样与按键消抖逻辑全部塞在同一个巨大的while(1)轮询大循环里。随着功能增加,系统的实时性急剧恶化:按下一个按键要等待半秒才有响应,串口数据在高速传输时频频丢包(Overrun Error)。面对这种情况,引入复杂的 RTOS 往往会增加内存负担与调试复杂度;而继续使用轮询大循环又是死路一条。

2026-08-28 10:00:26 1423

原创 嵌入式系统升级的检查重点

固件从 FreeRTOS v10.4.3 升级到 v10.6.1 后,原本运行了一年多的 Cortex-M4 工业网关固件,在启动 3 秒后突发死机。系统直接挂死在中中断中断,复位看门狗也无法挽救。很多人以为 RTOS 的跨版本升级只是替换几个头文件和.c源文件,这种理解在开启了 MPU(内存保护单元)或使用了 Cortex-M 硬件 TrustZone 的系统中非常致命。新版本的 RTOS 往往会调整任务栈对齐要求、硬件 SysTick 响应优先级以及 MPU Region 的划分算法。

2026-08-28 09:56:02 1526

原创 裸机驱动协作的接口边界

在工业电机预测性维护(Predictive Maintenance)的项目现场,算法团队交付了一套在 Python 环境下表现完美的“电机故障预测模型”。然而,当嵌入式团队把编译后的 C 语言算子静态库引入 C/C++ 裸机驱动工程后,板子在运行不到 2 分钟时直接触发 HardFault,电机控制 PWM 信号瞬间丢失。这是典型的跨团队协作断层:算法团队习惯了内存无上限的 Python 动态环境,将 JSON 结构体格式化、动态malloc分配数组直接塞进了底层的 SPI 采样回调函数里;

2026-08-28 09:37:38 1492 1

原创 嵌入式运行状态的观察方法

在一块只有 2MB SRAM 的 ARM Cortex-M55 微控制器上,当引入 Edge Vector DB(边缘向量数据库)与 RAG 上下文编排逻辑后,设备每隔几小时就会突发一次死锁。串口输出在打印完半句后彻底挂起,SysTick 中断停止响应。在无 Linux 文件系统、无标准 OpenTelemetry 框架的 MCU 裸机与 RTOS 环境下,传统的 Printf 打印日志会严重阻塞中断响应时间(ISR Latency),甚至直接改变并发竞争的时序,掩盖真实 Bug。

2026-08-28 09:33:38 1475 1

原创 小芯片模型评测的样本准备

当团队把 DeepSeek-R1-Distill-Qwen-1.5B 跑在 RK3588 边缘开发板上时,测试报告里的数据让所有人一头雾水。研发给出的推理速度是 42 Tokens/s,而测试组测出的平均吞吐却只有 8.5 Tokens/s。这种巨大差异并非测试失误,而是基准测试(Benchmarking)在指标定义和数据集设计上踩了坑。在计算资源受限的边缘芯片上,模型推理被严格切分为 Prefill(首字生成/上下文处理)与 Decode(逐字生成)两个物理阶段。

2026-08-28 09:30:38 1551

原创 微型推理模型的任务拆分

把 TensorFlow Lite Micro 或 NCNN 交叉编译并烧录进嵌入式 Linux 板子(如 RV1126 或 Allwinner H616)后,很多工程师写的第一个推理 Demo 往往充满了隐患:在每一帧图像到来时,直接在 C++ 代码里调用动态分配内存,推理结束后又依赖 C++ 析构函数去释放。运行半小时后,板子因为 SRAM/DRAM 内存碎片化触发了 LinuxOOM Killer挂掉,或者由于未对齐的指针传给了 NEON 向量算子而抛出SIGBUS异常。

2026-08-28 09:25:48 1586

原创 边缘推理框架升级的核查

量化推理框架升级时,先检查算子接口、张量布局、缓存分配策略和运行时依赖。不同模型、驱动与硬件的组合可能表现不同,不能把某一份日志或单次测量当作通用结论。

2026-08-28 09:22:37 1542

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除