- 博客(58)
- 资源 (7)
- 收藏
- 关注
原创 优快云_LiteOS_M_22_移植总Checklist_八环节与四铁律
移植做到哪算完?本文给出总 Checklist:先画全文件地图(每个文件=一篇博客),再列八环节(环境→源码裁剪→配置→构建→链接→烧录→板级→汇编)按顺序做事,最后四条铁律(分层 / 启动 VTOR+FPU / 双宏 / 调度必调)踩一条直接跑飞。
2026-11-02 15:54:05
251
原创 死机定位_FPU栈帧与backtrace实战
死机定位收官:为什么 `bt` 有时候栈是乱的?秘密在 LR 末尾位——它决定栈帧里有没有浮点(104 还是 176 字节)。本文复盘一次真实事故(FPU 双宏漏一个,栈帧错位 72 字节),手把手 `bt` 把真相扒出来,最后 `restore` 回能跑的基线。
2026-10-28 17:13:16
268
原创 死机定位_los_exc与三破坏现场
板子跑飞了怎么办?本文先给你 `demo_hang.sh` 制造三种「同一份工程、三种死法」的破坏现场,再用 OpenOCD+GDB 接上 M4(端口 3334)把现场捞出来;并说明 `los_exc.S` 早已接管 HardFault,所以你能直接 `bt` 看调用栈。
2026-10-26 15:19:07
327
原创 应用落地 · 两个 LED 任务实战与错误码(实战篇)
纸上谈兵不如来一段能编译的代码。本文给出 `app_task.c` 完整实战,标出它在四步法里的位置,并附 `LOS_TaskCreate` 错误码速查表(NO_MEMORY / 优先级错 / 栈过大 / 栈过小 / 任务数满,共五种)。照着敲,第一次就能点亮两个错相闪烁的灯。
2026-10-15 10:00:00
336
原创 上板第一天就 HardFault:一次 FPU 栈帧错位把我按在地上摩擦的排查实录
STM32MP157 的 M4 核移植 LiteOS-M,上板首日就 HardFault。根因是 FPU 双宏与 Makefile 编译参数对表错位,栈帧当场错位 72 字节、调试器 bt 全瞎。本文复盘从踩坑、排查到修复的完整过程,并沉淀两条实战排查手法。
2026-10-14 15:15:46
467
原创 应用落地 · 两个 LED 任务与 LOS_TaskCreate(详解篇)
内核跑起来了,怎么让它干点活?本文用两个 LED 任务讲清任务的真身:一个 `while(1)` 死循环 + 两个宏;错相闪烁的秘诀是频率不同自然拉开;`LOS_TaskCreate` 像「报名表」把任务登记进内核;`LOS_TaskDelay` 不是睡死,是让出 CPU。
2026-10-14 10:00:00
562
原创 板级适配 · target_config.h 平台裁剪清单(下):改错速查与换板经验
`target_config.h` 里每个 `=0` 凭什么是 0?本文逐条给理由,再讲你的配置怎么通过头文件覆盖机制盖过内核默认,并附一张「改错会怎样」速查表与换板三级排错阶梯。把这份清单存好,下次配新板直接对照查。
2026-10-13 10:00:00
402
原创 板级适配 · target_config.h 平台裁剪清单(中):FPU 三件套与栈档
FPU 浮点单元为什么是移植的「隐形炸弹」?本文讲清 FPU 三件套——`__FPU_PRESENT`/`__FPU_USED`/`__CORTEX_M` 三个宏,必须与 Makefile 的 `-mfpu`/`-mfloat-abi`/`-mcpu` 三个参数一一对齐、同开同关;再讲任务模块的「三档栈」(2KB/1.5KB/512B)怎么定、外部 80KB 堆这个大盘子怎么摆。改错一个宏,板子就起不来。
2026-10-12 16:03:00
247
原创 板级适配 · target_config.h 平台裁剪清单(上):六组宏之基础三
移植最头疼的 `target_config.h` 到底在配什么?本文把这块「控制面板」拆成六组宏,先讲最基础的三件:①系统时钟/节拍(内核心跳从哪来)②硬件中断(`HWI_LIMIT=32`、内核 `g_hwiForm` 接管 48 槽;启动文件硬件向量表 `g_pfnVectors` 共 166 槽(见第 11 篇))⑥裁剪清单(一堆 `=0` 是主动关掉、不是漏写)。零基础也能照着对号入座。
2026-10-11 10:00:00
566
原创 板级适配 · 启动文件 startup ②:内核如何接管中断(VTOR 重定向 + g_hwiForm)
内核怎么「不碰启动文件一行」就接管了所有中断?答案不是弱符号覆盖,而是**运行期改指针**:`HalHwiInit` 把 `SCB->VTOR` 从启动文件的向量表拨到内核自己的 `g_hwiForm` 表上,再把 `HalPendSV`/`HalExcHardFault`/`OsTickHandler` 这些**不同名**的函数直接填进槽位。本文用 `nm` 实测证据证伪"弱符号覆盖"这个流行说法,讲清两种接管方案的取舍、SysTick 那槽为什么被赋值两次,以及本工程相对官方
2026-10-10 16:49:10
324
原创 板级适配 · 启动文件 startup ①:五步启动与向量表 8 字节入场券
STM32MP157 Cortex‑M4上电不会直接进入main,先执行`Reset_Handler`汇编。本文解析startup启动五步流程,详解向量表前16个内核系统异常,给出槽号与IRQn换算、Thumb位、优先级规则,解释HardFault升级、PendSV低优先级调度原理,附带objdump与GDB校验向量表方法,说明LiteOS-M运行期重设VTOR接管中断的机制。
2026-10-09 18:10:22
519
原创 板级适配_链接脚本lds下② _契约断言与照妖镜
lds 和启动文件谁是甲方谁是乙方?本文用一张「交接单」讲清双方的符号契约:lds 供给 `_estack/_sidata/_sdata/_sbss` 等门牌号,startup.S 按①~⑤步消费;再教你怎么用 `ASSERT` 把越界 bug 拦在编译期,并附 9 条「照妖镜」拿到任何新工程都能照着查。
2026-09-30 09:00:00
481
原创 板级适配 · 链接脚本 lds(下)①:逐段解剖各内存段
裸机启动最劝退的就是链接脚本。这篇把 lds 拆成「逐间房看」:从向量表、代码段到 .data/.bss,连同 *、ALIGN、> SRAM 这些看不懂的符号,一次讲透。
2026-09-29 15:30:19
377
原创 板级适配 · 链接脚本 lds(上):256KB 硬约束与内存地图
移植 LiteOS-M 到 STM32MP157 的 M4 核,链接脚本 lds 是首道硬关卡。本篇用「256KB 公寓楼」比喻,讲清 SRAM 仅 256KB 的硬约束、MEMORY 如何画内存地图、栈顶为何定在 0x10040000,以及链接器如何用「位置计数器」自动给每个段编门牌号(VMA)。零基础也能读懂 lds 的底层逻辑。
2026-09-28 17:55:49
306
原创 板级适配 · SystemInit:给芯片上电后的“自检程序“动手
第 9 篇拆解 STM32MP157 上电后、main() 前的底层初始化 SystemInit()。以 ST 官方 CMSIS 模板为基底,只拆 HAL 依赖、不改逻辑,裁剪原因写入文件头。讲透开 FPU、向量表重定向到 0x10000000、报 64MHz 时钟三件事,及去 HAL 后三核对补宏、补 _init/_fini 空桩。附 6 条通用经验。
2026-09-24 12:38:06
342
原创 STM32MP157-M4:板级适配 BSP —— board.h 定契约,board.c 给实现
本文是移植实战系列的**第八篇**(板级适配第一篇)。上一篇给了工程全景地图和启动四步法;本篇进入地图上②层的第一站:BSP(Board Support Package,板级支持包)。我们把 `board.h` 和 `board.c` **合并成一篇讲**——契约和实现本来就是一对:头文件说"我提供什么",.c 文件说"我怎么做到"。读完你就能回答三个问题:业务代码为什么不许直接写寄存器?一个 46 行的头文件凭什么当"唯一接口"?内核的打印函数为什么反过来要我们板级来提供?
2026-09-22 09:55:42
176
原创 STM32MP157-M4:工程全景与启动四步法 —— 一张地图看懂所有“要自己改“的文件
本文是移植实战系列的**总览篇(第七篇)**。基础六篇(环境准备 → 源码裁剪 → os_config → Makefile → 链接脚本 → 一键烧录)解决了"怎么跑起来",切换汇编六篇解决了"内核怎么换任务";从这一篇开始,我们把镜头拉远,给你一张完整的工程地图:**哪些文件要自己写、它们怎么协作、main 函数里的四行代码凭什么能让两个 LED 各闪各的**。读完这篇,后面每一篇你都知道自己"在地图的哪个位置"。
2026-09-21 18:01:11
245
原创 LiteOS-M 切换汇编逐行图解(6):一次完整调度接力与调试实战
全系列收官篇,先给整体地图再拆四站:①用一次 LOS_TaskDelay(200) 把四函数串成接力,给出完整调度时序图;②objdump 验证编译期布局(+100/+72 ↔ #204,落实铁律③);③GDB 实战(断 HalPendSV 看 $psp 硬件帧);④全系列衔接与推荐阅读顺序。从零基础到能逐行读懂 los_dispatch.S。
2026-09-20 09:49:10
215
原创 LiteOS-M 切换汇编逐行图解(5):HalPendSV 任务切换的现场搬运(五阶段逐行)
逐行精讲 LiteOS-M `los_dispatch.S` 的 `HalPendSV`——任务切换的现场搬运。先给整体地图再拆三站:①开场(舞台换演员,存旧取新总逻辑);②五阶段逐行(保存 PRIMASK、问调度器选新任务、存旧任务——r12 顺势落进 uwPriMask 槽实现每任务独立中断状态、换任务指针、恢复新任务),新增“五阶段一步一步看”图解;③204 字节栈帧几何与 TaskContext 逐槽对齐(铁律③具象化)。并给出源码冗余指令的诚实判断。
2026-09-18 10:30:00
393
原创 LiteOS-M 切换汇编逐行图解(4):中断三件套与 HalTaskSchedule 触发
本篇讲 LiteOS-M `los_dispatch.S` 的两件小事——但小事很关键。先给整体地图再拆三站:①临界区 = 会议室门禁(三件套每段 3 条指令,核心是“存旧恢复旧”让嵌套天然正确);②`HalTaskSchedule` 三行写 ICSR bit28 挂起 PendSV,只是“按门铃”不搬运现场,PendSV 最低优先级要等 CPU 空下来才进场;③调用链从 `LOS_TaskDelay` 到 `HalTaskSchedule`。新增“触发切换一步一步看”图解。
2026-09-17 10:30:00
155
原创 LiteOS-M 切换汇编逐行图解(3):HalStartToRun 首任务五步直跳
本篇逐行精讲 LiteOS-M `los_dispatch.S` 的 `HalStartToRun`——开机后第一个任务怎么跑起来。先给整体地图再拆三站:①首任务为何特殊(复位后无异常上下文,bx r6 直跳);②伪造栈帧技巧(PC=OsTaskEntry、LR=HalSysExit、Thumb 位),新增“伪造栈帧一步一步看”图解;③HalStartToRun 五步直跳(设最低优先级、切 PSP、取栈指针、FPU/非 FPU 双路径恢复现场、vpush/vpop 激活 FPCA + bx r6)。三处“看
2026-09-16 10:00:00
321
原创 LiteOS-M 切换汇编逐行图解(2):指令·异常机制·全景表
本篇是 LiteOS-M 切换汇编系列第二篇,面向零基础读者。先给整体地图再拆三站:①本文件用到的指令(只精讲 4 组核心——数据搬运/多寄存器存取/特殊寄存器读写/跳转,其他按需查表);②异常进出栈与 EXC_RETURN 魔术值(硬件自动压 8/26 字、LR 装魔术值、bx lr 两种身份);③los_dispatch.S 全景表(7 常量+4 函数+3 数据结构)。新增“异常进出栈一步一步看”图解,把导演喊停→压帧→给钥匙→处理→返回走通。
2026-09-15 14:14:40
329
原创 LiteOS-M 切换汇编逐行图解(1):汇编是什么·寄存器与栈
本篇是 LiteOS-M 切换汇编系列的第一篇,面向零基础读者。先给整体地图再拆三站:①为什么切换必须写汇编(C 够不着的特殊寄存器只能用 mrs/msr);②栈 = 任务的私有笔记本(栈向低地址生长、stmfd 压栈一步一看);③16 个寄存器地图与 AAPCS 分工(硬件自动收 vs 软件手动收)。配图详解栈的生长方式,为第 2~6 篇逐行讲函数打好地基。
2026-09-14 21:01:35
284
原创 RTOS移植不是玄学:8个标准环节+4条铁律,换任何Cortex-M都通用(LiteOS-M实战)
本文基于STM32MP157 M4核在片内SRAM运行LiteOS-M v3.0-LTS实战,以任务创建成功却卡死的故障为例,提炼RTOS移植核心逻辑。给出8项移植自检环节与4条铁律,复盘3个工程事故,提供跨Cortex-M芯片可复用移植与排查方案,解决编译正常但运行卡死、HardFault等疑难问题。
2026-09-11 15:40:02
252
原创 CPU寄存器内存深度理解|结合LiteOS-M RTOS讲程序到底如何跑起来
本文把硬件原理和手上真实工程逐点对应:讲寄存器就对照任务切换汇编,讲栈就对照任务栈溢出,讲函数调用就对照任务入口为什么能跑。文末附一段**工程里真实的任务切换汇编逐行注释**和GDB调试命令清单。
2026-09-09 14:03:48
456
原创 勘误复盘:LiteOS-M 首任务启动卡死,真凶不是 SVC,是 FPU 栈帧 68/204 错位
上一篇我把根因归为"复位后 CPU 滞留 Handler 模式、Reset 优先级 -3 压死 PendSV,必须靠 SVC 异常返回切 Thread"——**这个结论经源码复核是错的**。真凶是 FPU 栈帧"编译期 68 字节 vs 运行期按 204 字节取数"错位,`bx r6` 跳到栈外垃圾地址直接进 HardFault。SVC 方案本身合法(FreeRTOS 同款),但在 LiteOS-M v3.0-LTS 上**不是必需条件**。
2026-09-09 13:54:04
370
原创 STM32MP157 M4 指针避坑(四):双核共享内存与 HardFault 实战排查(GDB/OpenOCD)
系列收尾篇。先讲双核场景的两个专属坑(IPCC 寄存器漏 volatile、共享内存里存栈地址),再给出 M4 指针高危坑点总清单(按溯源归类),最后落地一套**可直接照抄的 HardFault 定位流程与 OpenOCD + GDB 命令清单**——这是全系列最建议收藏的部分。
2026-09-08 08:58:37
125
原创 STM32MP157 M4 指针避坑(三):生命周期与内存踩踏——HardFault 重灾区
M4 上最高频的 HardFault,几乎都源于"门牌号还在,房间已经换人了"。本篇逐个溯源野指针、空指针、数组越界、回调悬空指针、DMA 与栈缓冲区、内存对齐、大小端、指针加法八大坑,并澄清一个常见误解:Cortex-M4 的 LDR/STR 本来就支持非对齐访问,真正会炸的是 LDM/STM、`__packed` 取成员地址和 UNALIGN_TRP。
2026-09-07 18:03:24
310
原创 STM32MP157 M4 指针避坑(二):仿真正常、离线必崩——硬件访问与并发
"单步仿真一切正常,全速离线必崩"是嵌入式最折磨人的一类 BUG。本篇拆解根因:编译器把重复读取优化掉了(volatile 缺失)、多字节共享变量被中断打断(数据撕裂)、外设地址跨核越权访问。同时澄清两个流传很广的错误说法:volatile 不是"绕过 CPU 缓存",单步调试也不是"强制刷新内存"。
2026-09-07 17:48:18
349
原创 STM32MP157 M4 指针避坑(一):先看清“客栈“——内存布局与指针基础
排查 90% 的指针异常,核心只有三件事:地址是否合法、内存生命周期是否有效、访问是否冲突。本篇先把 STM32MP157 M4 核的内存地图画清楚(256KB SRAM、向量表在 0x10000000、栈顶 0x10040000),再用"客栈"模型把全局/静态、栈、指针的角色讲透,最后逐条拆解 7 个最易混淆的指针基础概念。
2026-09-07 17:41:49
384
原创 看懂 STM32MP157 系统架构图,从此写代码不再盲目踩坑
STM32MP157 是 ARM 双核异构芯片:A7 跑 Linux、M4 跑裸机/RTOS。本文以 M4 开发者视角拆解总线矩阵、AHB/APB 总线层级、外设挂载规则与 DMA 底层逻辑,帮你从"套模板抄代码"进阶到"懂架构、能排错、可移植"。
2026-09-03 09:24:37
279
原创 别照搬 F103!STM32MP157‑M4 启动那些必踩的坑
本文面向STM32MP157 M4裸机/RTOS开发者,对比传统STM32单片机,讲解双核异构下M4启动流程。区分工程与生产两种M4释放模式,梳理上电释放、启动文件、时钟初始化、进入main四大步骤,解析SRAM内存布局,总结常见故障排查方法,给出资料查阅途径,为RTOS移植打好基础。
2026-09-02 20:11:00
313
原创 AI一键生成单片机代码!Trae实测:单片机还有必要深度学习吗?
Trae 等 AI 编程工具可直接读写 STM32 本地工程,快速生成单片机业务代码,轻松跑通硬件 Demo。这让不少嵌入式学习者疑惑是否还需要深耕单片机。本文结合 STM32F103C8T6 实测,分析 AI 工具的优势与局限,指出 AI 只能作为效率辅助,底层原理、硬件排错、工程能力仍需要扎实学习。
2026-08-31 20:38:42
453
原创 # STM32MP157+LiteOS-M GCC极简工程:启动源码适配+Windows Make终极避坑
MP157 M4有专属极简启动流程与编译规范。本文基于官方GCC启动文件改写Reset_Handler(删.data拷贝、删__libc_init_array、留VTOR+FPU+.bss清零、按需SystemInit),配套单SRAM区LMA==VMA链接脚本;详解M4F专属fpv4-sp-d16编译命令,彻底解决Windows mingw32-make的vpath大小写玄学编译报错,实现工程可量产、零BUG稳定运行。
2026-08-28 18:05:31
441
原创 STM32MP157 M4 致命误区:千万别手动把Keil启动文件转GNU
STM32MP157是双核MPU,与普通STM32单片机架构天差地别。全网主流教程照搬MCU迁移逻辑——提取Keil启动文件手转GNU汇编,套用到MP157会埋下向量表对齐异常、弱符号失效、段属性错误等隐性BUG,引发死机、变量错乱、RTOS内核初始化崩溃。本文从MPU与MCU架构差异切入,揭示ARMCC→GNU手转底层隐患,溯源CubeMX/CubeIDE启动文件来源,详解.data拷贝、SystemInit两大致命误区,给出ST官方GCC启动文件+链接脚本的最优方案。
2026-08-28 17:35:28
651
原创 STM32MP157 M4 LiteOS-M:Windows Makefile 100%编译成功终极排错指南
Windows 下移植 LiteOS-M 到 STM32MP157 M4 编译反复翻车?实测拆解三大坑:全角破折号污染参数、.s/.S 大小写失配、sh.exe 缺失致目录创建静默失败,并给出手敲参数、OBJECTS 改 .S=.o、Git Bash/usr\bin 补环境三招根治,附标准编译流程。
2026-08-27 21:03:23
514
原创 LiteOS‑M再辨析:启动第一个任务,到底需不需要SVC?
上一篇博客移植过程遇到故障:绕开直接调用任务会造成调度卡死,当时实现了SVC+异常返回的启动方案。当时形成的认知是Cortex‑M启动首个任务必须依靠SVC异常返回退出Reset上下文。后续深入研读原生工程汇编代码后发现一个值得探讨的问题:LiteOS‑M原生并没有使用SVC,同样可以正常完成任务创建、PendSV抢占调度。本篇做原理辨析:SVC究竟是启动首任务的硬件硬性标准,还是面向通用场景的高兼容性可选实现。
2026-08-26 10:50:18
721
原创 STM32MP157-M4-SRAM调试踩坑-flash脚本不跑main
运行一键下载脚本,OpenOCD 输出一切看着正常,但板子 LED 不闪烁、程序没跑起来;用手动 GDB 连接调试却一切正常,可以单步、可以跑 main。本文讲清楚两条高频警告的真相,以及旧脚本命令链里埋着的三个致命问题,并给出最小改动的修复方案与验证标准。💡 适用场景:STM32MP157 M4 独立运行在内部 SRAM、LiteOS-M 操作系统、GCC + Makefile 裸金属开发,不使用 Keil、不使用 STM32CubeIDE。
2026-08-25 20:08:59
392
原创 STM32MP157 M4开发实战:解决OpenOCD二次烧写失败,聊聊 unknown‑state 警告
STM32MP157 M4 跑内部 SRAM 踩坑,OpenOCD 二次下载后 LED 常亮 / 熄灭,无法正常闪烁;实测对比 reset‑halt 带来调试报错重连问题,通俗讲解 unknown state 警告为什么删不掉,给出 AIRCR 软复位 + RETRAM 伪向量表一键 bat 脚本,梳理开发容易踩的隐形陷阱。
2026-08-25 20:01:06
329
原创 Windows 下 STM32MP157‑M4 OpenOCD/GDB 疑难杂症:No registers、10054、UsageFault、编码警告
STM32MP157 的 M4 内核调试,程序下载到 M4 内部 SRAM。Windows 环境下 OpenOCD + GDB 组合会遇到一堆细碎坑:新建 GDB 连接后报无法修改 PC/SP;关闭 GDB 重连出现 10054 套接字错误;刚 attach 直接进入 UsageFault_Handler;出现 CP1252 编码转换警告;时而看到??()无符号,时而直接显示异常函数符号。本文记录完整现象、截图说明、根因、标准调试流程,同时补充CFSR 寄存器排查 UsageFault的实战方法。
2026-08-24 20:23:53
382
STM32MP157 基于 ncnn 与 MobileNetV2 的 ARM 图像分类工程(交叉编译源码+模型+文档)
2026-09-02
Keil .s 转 GCC .S 启动文件转换器 v1.1.0(含汇编验证示例)
2026-08-28
STM32MP157‑M4 LiteOS‑M 工程源码:SVC+PendSV 标准启动 + FPU 修复 + OpenOCD 一键烧录
2026-08-13
STM32MP157 M4 LiteOS-M 移植调试脚本包(一键烧录 + GDB 断点 + HardFault 排查)
2026-08-15
【嵌入式系统开发】基于STM32MP157的LiteOS-M内核移植与任务调度优化:启动流程、内存布局及PendSV阻塞漏洞解析
2026-08-12
STM32MP157-M4 LiteOS‑M GCC Makefile工程 SRAM调试 无Keil
2026-08-12
单片机 嵌入式LCD 特殊字符字模 带文档说明 C语言带makefile 可直接交叉编译在开发板运行测试
2022-09-15
嵌入式海思板交叉编译ffmpeg libx264 和 libx265可以在板子上面跑起来详细步骤记录。
2022-07-09
ffmpeg 本地265和264 和aac 合成MP4 代码带makefile 可以直接编译运行
2022-06-23
基于open cv 的图像灰度化均衡化和边缘化
2013-08-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅