第三篇 STM32MP157-M4:os_config 三板斧详解
STM32MP157-M4os_config 三板斧详解【高危前置提醒】Makefile 的-I路径中os_config必须放在最前链接脚本 lds 的堆地址ASSERT必须与target_config.h的LOSCFG_SYS_HEAP_ADDR严格一致。0 前言os_config/是 LiteOS-M 移植的板级配置隔离层。依靠 Makefile 头文件搜索优先级覆盖内核默认的los_config.h全程不修改内核源码仅包含 3 个固定配置文件。1 三个配置文件分工文件作用影响范围target_config.h系统时钟、SRAM 堆区、RTOS 功能总开关内核初始化、堆管理、tick 频率los_builddef.h中断向量表对齐参数g_hwiForm数组大小和内存对齐los_printf.h内核打印宏底层封装所有PRINT_ERR/PRINT_INFO宏2 target_config.h 完整模板逐项注释#ifndef_TARGET_CONFIG_H#define_TARGET_CONFIG_H/* 系统时钟 *//* M4 工程模式仅 HSI 64MHz 可用HSE 振荡器依赖 A7 域不可用 */#defineOS_SYS_CLOCK64000000UL/* 系统节拍 */#defineLOSCFG_BASE_CORE_TICK_PER_SECOND1000/* 1000Hz 1ms/tick */#defineLOSCFG_BASE_CORE_TIMESLICE_TIMEOUT10000/* 时间片超时 10ms */#defineLOSCFG_BASE_CORE_TICK_RESPONSE_MAX0xFFFFFFUL#defineLOSCFG_BASE_CORE_TICK_PER_SECOND_MINI1000/* 外部堆配置 *//* 堆起始 0x10014000Skip 0~0x14000(80KB) 给向量表代码数据BSS * 堆大小 128KB任务栈、队列、信号量全部从堆分配 * 注意必须与 lds 中 ASSERT(_ebss 0x10014000) 保持一致 */#defineLOSCFG_SYS_EXTERNAL_HEAP1#defineLOSCFG_SYS_HEAP_ADDR((void*)0x10014000U)#defineLOSCFG_SYS_HEAP_SIZE0x00020000U/* 中断向量表大小 *//* g_hwiForm 向量表项数 OS_SYS_VECTOR_CNT(16) LOSCFG_PLATFORM_HWI_LIMIT * STM32MP157 外设中断最多 150 号必须设 16032 会越界 HardFault */#defineLOSCFG_PLATFORM_HWI_LIMIT160/* 内核功能开关 */#defineLOSCFG_KERNEL_PM0/* 电源管理关闭 */#defineLOSCFG_BASE_CORE_SWTMR0/* 软件定时器关闭避免抢占首任务 */#defineLOSCFG_BASE_CORE_SWTMR_ALIGN0/* SWTMR0 时必须也为 0 */#defineLOSCFG_BASE_IPC_SEM1/* 信号量 */#defineLOSCFG_BASE_IPC_MUX1/* 互斥锁 */#defineLOSCFG_BASE_IPC_QUEUE1/* 消息队列 */#defineLOSCFG_BASE_CORE_TSK_MONITOR0/* 任务监控关闭节省 RAM *//* 内核打印 */#defineLOSCFG_KERNEL_PRINT_SWITCH0/* 无 UART 串口输出关闭 */#endif3 los_builddef.h 模板#ifndef_LOS_BUILDDEF_H#define_LOS_BUILDDEF_H/* 中断向量表对齐 512 字节STM32MP1 M4 要求 */#defineLOSCFG_ARCH_HWI_VECTOR_ALIGN512U#endif4 los_printf.h 标准模板#ifndef_LOS_PRINTF_H#define_LOS_PRINTF_H#includestdio.h/* 声明实际 UART 打印函数在 uart_printf.c 中实现 */externvoiduart_printf(constchar*fmt,...);/* do{}while(0) 包裹防止 if/else 语法断裂 */#definePRINT_ERR(fmt,...)do{uart_printf([ERR] fmt\r\n,##__VA_ARGS__);}while(0)#definePRINT_INFO(fmt,...)do{uart_printf([INFO] fmt\r\n,##__VA_ARGS__);}while(0)#endif##__VA_ARGS__是 GCC 扩展特性当可变参数为空时自动去掉前面的逗号避免编译报错。5 Makefile 头路径优先级原理# os_config 必须写在所有路径最前面 INCLUDES : -I$(PROJ_ROOT)/os_config # 优先级 1 ← 覆盖内核默认配置 INCLUDES -I$(PROJ_ROOT)/kernel_liteos_m/kernel/include # 优先级 2 INCLUDES -I$(PROJ_ROOT)/kernel_liteos_m/kernel/arch/include INCLUDES -I$(PROJ_ROOT)/kernel_liteos_m/kernel/arch/arm/cortex-m4/gcc INCLUDES -I$(PROJ_ROOT)/kernel_liteos_m/kal INCLUDES -I$(PROJ_ROOT)/Drivers/CMSIS/Include INCLUDES -I$(PROJ_ROOT)/Drivers/CMSIS/Device/ST/STM32MP1xx/Include INCLUDES -I$(PROJ_ROOT)/Core/Inc INCLUDES -I$(PROJ_ROOT)/Drivers/STM32MP1xx_HAL_Driver/Inc原理GCC 编译时按-I从左到右搜索头文件。los_config.h同时存在于os_config/板级配置和kernel_liteos_m/kernel/include/内核默认。因为os_config排第一编译器优先读取我们的配置。6 M4 SRAM 内存布局384KB⚠️ 本节踩坑速览现象根因修复自定义堆、时钟宏不生效os_config路径在 Makefile-I列表后置路径放 INCLUDES 首行PRINT 宏在 if/else 中编译报错未用do{}while(0)包裹语法断裂所有 PRINT 系列宏套 do-while 结构链接报 BSS overflowlds ASSERT 地址与target_config.h堆地址不一致两处地址同步为0x10014000los_builddef.h/los_printf.h找不到未添加-I os_config头路径INCLUDES 增加os_config搜索路径IRQ 越界 HardFaultLOSCFG_PLATFORM_HWI_LIMIT默认 32设为 160任务堆分配失败LOSCFG_SYS_HEAP_SIZE不足至少 128KB0x20000U

相关新闻

域内信息搜集实战:从零构建内网渗透侦察地图

域内信息搜集实战:从零构建内网渗透侦察地图

1. 从“我是谁”开始:一次真实的域内信息搜集实战复盘如果你刚拿到一个内网渗透的授权测试任务,或者作为安全运维人员需要摸清自家网络的家底,第一步该做什么?很多人会直接去搜各种工具命令,但往往忽略了最根本的问题&…

2026/10/8 12:37:04 阅读更多 →
宇树机器人估值与灵心巧手技术瓶颈:从技术演示到产品落地的挑战

宇树机器人估值与灵心巧手技术瓶颈:从技术演示到产品落地的挑战

这次我们来看一个关于宇树机器人估值与“灵心巧手”技术瓶颈的讨论。这个话题的核心不是某个具体的开源代码仓库,而是围绕一家明星机器人公司——宇树科技,在获得高估值后,其核心技术“灵心巧手”所面临的挑战与公众期待之间的落差。简单说&a…

2026/10/8 12:53:52 阅读更多 →
无域名,使用阿里云公网 IP 部署若依 + 钉钉小程序接入完整流程

无域名,使用阿里云公网 IP 部署若依 + 钉钉小程序接入完整流程

重要前提:你是钉钉小程序,正式发布强制要求 HTTPS 域名;公网 IPHTTP 仅能做本地开发调试,不能提交上线发布。开发阶段可以先用公网 IP 调试接口,上线必须申请域名 SSL 证书。防火墙已经处理完毕:仅开放 80…

2026/10/7 7:10:57 阅读更多 →

最新新闻

LitePal事务实战:保证批量写入原子性与数据一致性

LitePal事务实战:保证批量写入原子性与数据一致性

做客户端开发这些年,“数据写到一半挂了”这种情况碰到的次数真不算少。尤其是一直在用LitePal这种轻量级ORM框架的,前期CRUD写起来确实爽,但真到了批量导入、多表联动这种需要“要么全成、要么全败”的场景,少了官方的事务支持&a…

2026/10/13 21:59:44 阅读更多 →
储能系统调峰容量配置与经济性分析

储能系统调峰容量配置与经济性分析

1. 项目背景与核心价值储能系统参与电力调峰是当前新能源领域的热点研究方向。随着可再生能源占比不断提升,电网面临的峰谷差问题日益突出。传统火电机组调峰不仅效率低下,还会增加碳排放。相比之下,储能系统具有响应速度快、调节精度高、环境…

2026/10/13 21:59:44 阅读更多 →
Pascal if语句嵌套详解:从语法陷阱到重构方法

Pascal if语句嵌套详解:从语法陷阱到重构方法

简介:《pascal-if语句的嵌套》是一份面向Pascal初学者的PDF学习资料,重点讲解条件判断中if语句的嵌套写法与else子句的配对规则,帮助读者理清then与else的匹配关系、避免常见的逻辑歧义。资源共1个文件,即PDF电子文档,…

2026/10/13 21:59:44 阅读更多 →
C语言词法分析器完整实现:从预处理到符号表的编译原理参考

C语言词法分析器完整实现:从预处理到符号表的编译原理参考

简介:编译原理课程设计中,词法分析器是编译器前端的关键模块,负责将源代码字符流转换为有意义的单词序列。该文档以docx格式封装,内含完整的C语言词法分析器代码与实现说明,面向计算机专业学生、编译原理学习者及需快速…

2026/10/13 21:59:44 阅读更多 →
Kepware OPC DA Client连接失败的三大DCOM配置要点

Kepware OPC DA Client连接失败的三大DCOM配置要点

简介:本资源是一份面向工业物联网(IIoT)开发者与自动化工程师的Kepware OPC DA Client实战入门教程,聚焦于使用KEPServerEX实现设备数据采集与监控的核心配置流程。内容覆盖从新建Project、配置Channel(含Optimization…

2026/10/13 21:59:44 阅读更多 →
React脚手架原理与选型指南:从Vite到工程化落地

React脚手架原理与选型指南:从Vite到工程化落地

聊到React项目的起步阶段,脚手架这几个字几乎每次都会被摆上台面。它不是一个简单的配置文件,而是把一整套前端工程化底座直接端到你面前:开发服务器、热更新、构建打包、代码规范、环境变量管理,这些原本要折腾一周的事情&#x…

2026/10/13 21:58:43 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →