u-boot 学习笔记
u-boot 学习笔记 u-boot分类 1.1. api 1.1.1. api.md 1.2. arch 1.2.1. arm 1.2.1.1. arm.md 1.2.1.2. assembly.md 1.2.2. arch.md 1.3. boot 1.3.1. bootm.md 1.3.2. bootretry.md 1.3.3. bootz.md 1.3.4. image.md 1.4. cmd 1.4.1. cmd.md 1.5. common 1.5.1. autoboot.md 1.5.2. board.md 1.5.3. cli.md 1.5.4. command.md 1.5.5. console.md 1.5.6. dmalloc.md 1.5.7. event.md 1.5.8. export.md 1.5.9. log.md 1.5.10. main.md 1.6. dm 1.6.1. adc.md 1.6.2. button.md 1.6.3. clock.md 1.6.4. core.md 1.6.5. dts.md 1....
RT-Thread 学习笔记
RT-Thread 学习笔记 其他资料 1.1. fatfs 1.1.1. fatfs.md 2. ARM指针寄存器.md 3. CAN驱动.md 4. completion.md 5. condvar.md 6. dataqueue.md 7. DFS.md 8. fal.md 9. fatfs.md 10. FINSH模块.md 11. I2C驱动.md 12. IDLE线程.md 13. IPC.md 14. littlefs.md 15. map文件分析.md 16. pipe.md 17. PM电源管理.md 18. readme.md 19. ringblock.md 20. ringbuffer.md 21. romfs.md 22. RTC.md 23. RT-LINK.md 24. RTT系统初始化.md 25. SDMMC.md 26. SIGNAL.md 27. SPI驱动.md 28. tmpfs.md 29. ULOG.md 30. USB.md 31. waitqueue.md 32. 串口驱动.md 33. 调度.md 34. 工作队列...
Lely `dcf-tools` 与 `master
Lely dcf-tools 与 master.yml 配置教程:从 EDS 生成可用的主站 DCF @[toc] 适用版本:原生 Lely CANopen 2.4.0 dcfgen。本文使用上游 master/options/<slave> 结构,不适用于 ROS 2 或其他 downstream 项目自定义的 defaults/nodes YAML 格式。 本文解决什么问题Lely 主站通常不是直接读取从机 EDS 后运行,而是先在开发机上通过 dcfgen 合并主站策略、从机 EDS 和 PDO/SDO 配置,生成 master.dcf 以及按需生成的 concise DCF 二进制文件。 本文给出一条可复现的配置路径: 在 Ubuntu 开发机安装与目标 Lely 源码匹配的 dcf-tools; 准备从机 EDS 和 master.yml; 逐项理解 options、master 和从机 section; 生成并检查 master.dcf; 使用一份完整的 demo.yml 作为字段字典,其中非必需字段全部保留为注释。 本文示例环境: ...
Lely canopen:用 EDS 和 `master
Lely canopen:用 EDS 和 master.yml 生成 CANopen 主站 DCF 本文以 Lely CANopen 2.4.0、Ubuntu 20.04 和 CANopenNode 从站为例,演示如何在开发机上安装 dcf-tools,编写原生 Lely master.yml,并从 EDS 生成可供主站程序使用的 master.dcf。 本文要解决的问题在嵌入式 CANopen 项目中,经常会同时存在两套运行环境: 目标板运行交叉编译后的 Lely C/C++ 库; 开发机运行 Python 版 dcf-tools,用于检查 EDS/DCF 和生成主站配置。 这两部分相互配合,但不需要安装到同一个系统,也不要求使用同一种架构。目标板可以继续使用 --disable-python --disable-cython 构建 Lely;dcf-tools 只安装在 Ubuntu 开发机上即可。 完成本文后,你将得到: 123456789config/├── project.eds # 原始从站 EDS├──...
RTOS 优先级翻转与实时任务阻塞的通用治理
嵌入式面试真题第 11 题:RTOS 优先级翻转与实时任务阻塞的通用治理 123456flowchart LR H[高优先级实时任务\n控制 / 音频 / 通信 / 采样] -->|请求共享资源| R{共享资源} L[低优先级后台任务\n日志 / 存储 / 维护] -->|已经持有| R M[中优先级任务\nUI / 协议 / 计算] -->|持续占用 CPU| L R --> P[阻塞时间不可控\n高优先级任务错过期限] P --> S[治理目标\n有界阻塞 + 可分析 + 可降级] 问题在采用固定优先级抢占调度的 RTOS 系统中,通常同时存在硬实时或准实时任务、普通业务任务和后台维护任务。系统还会共享 SPI、I2C、Flash、文件系统、网络控制器、内存分配器、日志通道、配置数据库、图形缓冲区、硬件加速器或其他软硬件资源。 某次压力测试中,高优先级任务出现周期抖动、数据断流、控制超时、音频卡顿、通信丢包或看门狗复位。初步分析发现,高优先级任务正在等待一个由低优先级任务持有的资源;与此同...
高优化等级下共享状态可见性、内存模型与系统级同步设计
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计 问题在一个带有 RTOS 的嵌入式系统中,某个共享状态在调试版本或 -O0 下工作正常,但切换到 -O2、-O3、LTO,或迁移到带数据 Cache、多核 CPU、DMA 和总线主设备的新平台后,消费者偶发看不到生产者刚刚写入的数据,或者出现“标志位已经变化,但数据体仍是旧值”“中断已经发生,任务仍在空转”“DMA 已完成,CPU 读取的缓冲区却没有更新”“单核正常,多核失效”等问题。 生产者可能来自按键扫描任务、设备驱动中断、协议接收线程、DMA、另一个 CPU 核、协处理器或外部总线主设备;消费者可能是状态机、控制任务、日志线程、UI、音视频处理线程或安全监控任务。共享对象也不一定只是一个布尔标志,它可能是一组状态位、计数器、描述符、环形缓冲区索引、消息结构体、双缓冲区、控制块或一段 DMA 共享内存。 请不要把问题简化为“加一个 volatile”。需要从 C/C++ 抽象机、编译器优化、寄存器分配、CPU 乱序执行、Store Buffer、Cache 一致性、DMA 非一致性...
非易失性存储局部失效下的通用持久化容错架构设计
嵌入式面试真题第 09 题:非易失性存储局部失效下的通用持久化容错架构设计 问题在一款需要长期运行、频繁保存配置、日志、计量数据、资源索引、模型参数、升级状态或业务文件的嵌入式设备中,底层非易失性存储可能是片内 Flash、外部 SPI NOR、原始 NAND、QSPI/OSPI Flash,也可能是带内部控制器的 eMMC、UFS、SD 卡或其他块设备。 产品在量产、老化、运输、现场升级和多年使用过程中,可能出现以下任一种异常: 某个擦除单元无法擦成全擦除态; 某个编程单元写入后读回不一致; 某页出现不可纠正 ECC; 某次写入被掉电、复位或看门狗打断,只完成了一部分; 某个元数据块长期高频更新后提前磨损; 底层控制器偶发超时、忙状态不退出或返回瞬态错误; 映射表、目录、超级块或日志头部自身损坏; 可用备用空间持续下降,最终无法完成垃圾回收或数据迁移。 如果这些故障直接透传给上层,轻则丢失单条配置或日志,重则整个分区无法挂载、固件无法启动、设备反复重启甚至永久“变砖”。 你会如何设计一套通用的持久化容错架构,使局部介质失效不会立即演变成卷级损坏,并做到: 已...
多中断源竞争下关键实时事件丢失的系统化诊断与中断架构设计
嵌入式面试真题第 08 题:多中断源竞争下关键实时事件丢失的系统化诊断与中断架构设计 问题在一个由 MCU、SoC 或实时处理器构成的嵌入式系统中,同时存在多类中断源:外部 GPIO 事件、定时器捕获、ADC/I2S/PWM 同步、DMA 半满/全满、CAN/Ethernet/USB、UART/SPI 高速数据、传感器告警、存储完成、看门狗和软件中断等。 系统在正常负载下运行稳定,但在通信突发、日志增加、Flash 擦写、协议栈高负载、任务临界区增多或多个外设同时活跃时,某个关键实时事件偶尔出现以下异常之一: 外部边沿已经产生,但软件没有记录到; 中断计数小于硬件事件计数; 中断没有真正丢失,但响应延迟超过业务截止时间; 多个事件被合并成一次 pending,导致事件次数丢失; ISR 已执行,但后续队列、缓冲区或任务处理路径丢了事件; 高频通信中断占满 CPU,关键同步、采样、控制或保护事件偶发失效; RTOS 运行后才出现问题,裸机或低负载时无法复现。 你会如何建立一套通用的系统级排查方法,区分“硬件事件未被...
电源纹波影响 ADC 电量采样的软件滤波
嵌入式面试真题第 07 题:电源纹波影响 ADC 电量采样的软件滤波 123456789101112flowchart LR A[电池/分压网络] --> B[ADC 原始采样] P[DC-DC/PWM/PA/射频负载] -->|周期纹波与瞬态压降| B V[内部 Vref/Bandgap] --> C[参考电压修正] B --> D[同步采样与过采样] D --> E[异常点剔除] E --> F[均值/中值/低通/陷波] C --> F L[负载、温度、充放电状态] --> G[负载感知补偿] F --> G G --> H[电压慢变量估计] H --> I[SOC 映射、滞回与 UI 状态机] 问题硬件工程师告诉你,当前版图的电源纹波太大,可能会影响 ADC 电池电量采样精度。作为软件工程师,在硬件已经无法改版的前提下,你能通过哪些纯软件或数字滤波手段,最大限度地剔除这部分周期性电源噪声? 除了列出滤波算法,还需要说明:如何判断噪声来...
I2C SDA 被拉低死锁后的软件恢复
嵌入式面试真题第 06 题:I2C SDA 被拉低死锁后的软件恢复 问题一款样机在产线上频繁死机,经抓取日志发现死在了一个 I2C 读取函数内的 while 等待应答 ACK 死循环里。进一步使用示波器或逻辑分析仪确认,I2C 总线的 SDA 线被外部从设备意外拉低,主机 I2C 控制器一直认为总线忙或者一直等待应答,导致后续访问全部失败。 除了给等待循环增加超时机制以外,还能通过什么软件 IO 操作序列去拯救并复位这条死锁的总线?恢复时需要如何处理 SCL、SDA、I2C 外设状态、从设备状态、线程并发和失败兜底? 回答结论:应实现 I2C Bus Recovery。核心做法是:先停止硬件 I2C 控制器并解除它对 SCL/SDA 的复用驱动,然后把 SCL、SDA 临时切换成 GPIO 开漏模式;在不推挽强拉总线的前提下释放 SDA,并手动给 SCL 输出若干个时钟脉冲,让卡在中间 bit、ACK 或 byte 状态的从设备继续推进内部状态机;当 SDA 被释放后,在 SCL 为高电平时让 SDA 从低到高,生成一个标准 STOP 条件;最后再复位 I2C 外...









