自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

通俗拆解嵌入式底层|STM32MP157|LiteOS-M 内核移植|嵌入式 AI 实战。配套工程源码,把晦涩原理变成可复现项目。

用通俗语言讲透嵌入式底层,避开晦涩抽象的理论。聚焦 STM32MP157、LiteOS‑M 内核移植、底层调试、嵌入式 AI 实战。结合工程源码和真实踩坑案例,把复杂原理拆解通俗,帮助学习者真正理解、动手复现项目。

  • 博客(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 图像分类工程(交叉编译源码+模型+文档)

内容概要 本资源是一套在 STM32MP157(ARM Cortex-A7) 上跑通的 ncnn 轻量级图像分类工程,核心使用 ncnn 推理框架运行 MobileNetV2(ImageNet 1000 类预训练模型),支持 USB/MIPI 摄像头实时分类与静态图片分类。包含完整可编译源码、已转换好的 ncnn .param/.bin 模型文件、1000 类标签文件、交叉编译工具链配置文件、一键构建脚本(路径已参数化,无需硬编码修改)、PyTorch→ONNX→ncnn 模型转换脚本,以及详细的 README 与交叉编译指南。 适用人群 STM32MP157/STM32MP1 系列开发者 ARM Linux 嵌入式 AI 推理入门学习者 想在 Cortex-A7 上跑通深度学习分类的工程师 高校嵌入式课程教学参考 使用场景与目标 在 STM32MP157 开发板上快速验证 ncnn 推理链路 对比不同模型/预处理在 ARM 上的实际效果与性能(FPS、内存、CPU 占用) 基于本工程二次开发自己的分类/检测应用(替换模型即可) 运行环境 主机:Ubuntu 18.04/20.04 + 正点原子 arm-none-linux-gnueabihf 9.2 工具链 + 源码安装的 OpenCV 3.4(需生成 OpenCVConfig.cmake) 目标板:STM32MP157(Cortex-A7 @ 800MHz,带 NEON),Linux 系统

2026-09-02

Keil .s 转 GCC .S 启动文件转换器 v1.1.0(含汇编验证示例)

支持 AREA / EXPORT / MACRO / 条件汇编 / 标签冒号化等指令的 GUI+CLI 双模式转换器,附 arm-none-eabi-as 汇编通过的对照示例。适用 STM32 F1/F4/F7 从 Keil 迁移 GCC Makefile 场景。 读者下载后即可复现验证: python keil_s2gnu_S_converter.py examples/keil_sample.s -o test.S -v arm-none-eabi-as -mcpu=cortex-m4 -mthumb -o test.o test.S

2026-08-28

STM32MP157‑M4 LiteOS‑M 工程源码:SVC+PendSV 标准启动 + FPU 修复 + OpenOCD 一键烧录

Windows 纯 GCC+Makefile 搭建 STM32MP157‑Cortex‑M4 LiteOS‑M RTOS 工程,不依赖 Keil MDK、CubeMX、CubeIDE。修复 2 个内核隐蔽 BUG,附带 OpenOCD 一键烧录脚本。 核心修复点: 1.SVC+PendSV 标准启动:修复原版 HalStartToRun 直接 bx r6 跳转,PendSV 被 Reset 异常优先级永久压制,调度器无法启动问题,改用 svc0 异常返回方案,对齐 FreeRTOS 实现。 2.FPU 上下文修复:解决 CMSIS 宏缺失导致 TaskContext 结构体尺寸错乱,运行出现 UsageFault 崩溃,恢复完整 FPU 上下文 204 字节布局。 3.flash‑m4.bat 一键烧录,踩通 Thumb 位、寄存器大小写、RCC_MP_GCR 保护、批处理换行等 MP157 特有坑。 使用:make clean && make 编译;双击 flash‑m4.bat 下载运行。运行现象:红 LED500ms、绿 LED200ms 独立闪烁,多任务调度正常。 工程运行在 M4 内部 SRAM (0x10000000),掉电丢失,需要 ST‑Link 调试器。适合 RTOS 学习者、STM32MP1 双核开发者、LiteOS‑M 移植研究。配套 优快云 系列博文《LiteOS‑M 移植①~⑥》,完整原理与踩坑分析见博文与包内 README。

2026-08-13

STM32MP157 M4 LiteOS-M 移植调试脚本包(一键烧录 + GDB 断点 + HardFault 排查)

STM32MP157 M4 移植 LiteOS-M 的调试脚本包 在正点原子 STM32MP157(Cortex-M4)上把 LiteOS-M(鸿蒙轻量内核)跑通 SVC+PendSV 标准启动流程时沉淀的脚本,每个都标注用途和使用场景。 包含 6 个文件:flash-m4.bat 一键烧录、start_openocd.bat 常驻启动 OpenOCD(端口 3334)、M4 板级配置、m4_debug.gdb 下载运行、m4_breakpoints.gdb 断点验证调度器、故障排查命令清单。 亮点: 1、断点 HalSVCHandler / HalPendSV 验证 SVC 启动与任务切换,解决 LOS_Start 卡死、任务从不调度。 2、CFSR(0xE000ED28) 速查表定位 HardFault 原因,对应 FPU 布局错位、向量表容量不足、优先级陷阱三个坑。 3、固定 M4 调试端口 3334,避开连 3333 误操作 A7 导致假死。 前提:arm-none-eabi 工具链、OpenOCD、拨码 001、已编译 elf。 注意:bat 已保证 CRLF 换行;配套讲课 PPT 与移植手册见同名工程。

2026-08-15

【嵌入式系统开发】基于STM32MP157的LiteOS-M内核移植与任务调度优化:启动流程、内存布局及PendSV阻塞漏洞解析

适配正点原子 STM32MP157,M4 内核 SRAM 独立运行;包含启动汇编、链接脚本、Makefile、PendSV 调度卡死问题分析、OpenOCD+GDB 调试踩坑完整注释文档。适合嵌入式 RTOS 移植学习者,配合博文配套阅读。

2026-08-12

STM32MP157-M4 LiteOS‑M GCC Makefile工程 SRAM调试 无Keil

【工程简介】 STM32MP157 M4内核 LiteOS‑M移植工程,Windows环境使用arm‑none‑eabi‑gcc + Makefile编译,**不依赖Keil、不需要虚拟机WSL**。 支持OpenOCD+GDB直接SRAM下载调试,已经完成硬件调通,解决M4内核复位释放、链接脚本、map内存布局等踩坑问题。 【环境说明】 1.编译:Windows GCC Makefile,执行make生成elf/bin/hex/map文件 2.调试:OpenOCD + GDB,支持VSCode Cortex‑Debug 3.拨码设置:001(M4 Developer模式) 【适用人群】 正点原子STM32MP157开发板开发者,想要脱离Keil使用GCC做M4内核LiteOS开发,博文配套完整源码。 【注意】 仅适配正点原子STM32MP157,其他板子需要修改链接脚本与底层驱动;build编译输出目录可自行make生成。

2026-08-12

canny算法经典论文

本文针对已有的Canny算法提出新的边缘检测的论点和看法,并经过实例认证。

2013-06-20

单片机 嵌入式LCD 特殊字符字模 带文档说明 C语言带makefile 可直接交叉编译在开发板运行测试

区位码在线查询系统可以查询到汉字对应的区位码 https://www.23bei.com/tool/54.html# 例如特殊符号° 我们可以查询到其对应的区位码是A1E3 但是如果字库里面没有这个字模那么程序单片机或者嵌入式就无法显示,如何将字模与程序结合起来正常显示对应的符号。 1.首先了解现有的汉字或者ASCII 显示的原理就是把字模图片转换成对应的rgb 位图然后调用海思的接口去显示,那么尝试通过在每个字符字模传入的地方加入特殊符号度对应的字模,接下来就是如何生成字模。 2.首先要有字库,附件中存放了对应的字库以及响应的程序可以直接使用,程序里面有对应注释。 3.研究字模的生成 可以看出16size大小每一行是16位。其字模对应的值比如第一行 0x04 第一个字节第四位是黑点 0x80 第二个黑点第一位是黑点全部用16进制显示参考这个规律我们可以生成对应的其他符号的字模比如°(我们可以参考16size 的度手动编写对应的24和32size 的符号字模数组使用在对应的程序中)。

2022-09-15

嵌入式海思板交叉编译ffmpeg libx264 和 libx265可以在板子上面跑起来详细步骤记录。

嵌入式海思板交叉编译ffmpeg libx264 和 libx265可以在板子上面跑起来详细步骤记录。 自己已经跑起来可以正常推流264和265. 其中对应的详细每一步骤 ./config 配置命令 make make install 其中265用的cmake交叉编译 脚本也包含。

2022-07-09

ffmpeg 本地265和264 和aac 合成MP4 代码带makefile 可以直接编译运行

ffmpeg 本地265和264 和aac 合成MP4 代码带makefile 可以直接编译运行

2022-06-23

支持海思板子linux 交叉编译支持实时流265封装MP4的mp2v2 库,下载直接可以编译。

linux 交叉编译支持265封装的mp2v2 库,下载直接可以编译。

2022-06-20

基于open cv 的图像灰度化均衡化和边缘化

在之前单独的灰度化、均衡化和边缘化的基础上,基于open cv 整合了对图像进行灰度化、均衡化和边缘化于一体,是一个完整的程序,下载即可使用。

2013-08-17

基于C++电子时钟程序

改程序实现在C++单文档中显示系统当前的时间的时分秒。并可以设置闹钟、时间格式、指针形式、日历。

2013-10-16

OpenCV教程

本文从第一个使用OPEN CV的程序入手,详细介绍使用其创建第一个程序的步骤。

2013-06-20

空空如也

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

TA关注的人

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