正点原子 STM32MP257 修复异核 FreeRTOS+OpenAMP 例程里 SysTick 延时异常的问题

本篇文章基于 ATK-DLMP257B 开发板,记录在 STM32MP257 异核 FreeRTOS + OpenAMP 例程调试过程中遇到的一个问题:程序运行后,部分延时接口表现异常,导致任务调度或通信流程不符合预期。经过排查,问题与工程中的 SysTick 中断处理配置 有关。下面整理具体修改方法,方便大家在移植或调试异核通信例程时快速定位并修复。

正点原子STM32MP257开发板 ARM嵌入式Linux异核A35&M33 AI工控

STM32MP257 修复异核 FreeRTOS+OpenAMP 例程里 SysTick 延时异常的问题

一、问题现象

在运行 STM32MP257 异核 FreeRTOS + OpenAMP 例程时,可能会出现延时不准确、任务切换异常,或者 OpenAMP 通信流程卡住等现象。

这类问题通常不是 OpenAMP 本身引起的,而是 FreeRTOS 工程中 SysTick_Handler 的实现方式和系统节拍配置存在冲突。

二、修改 SysTick 配置

首先打开工程配置文件,将宏定义:

c 复制代码
USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION

修改为:

c 复制代码
USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 0

也就是关闭自定义 SysTick Handler 实现,让工程使用默认的 FreeRTOS 系统节拍处理逻辑。

三、删除重复的 SysTick_Handler

接着打开 stm32mp2xx_it.c 文件,找到里面手动实现的:

c 复制代码
SysTick_Handler

函数,并将该函数删除。

这样可以避免工程中同时存在多个 SysTick 中断处理入口,防止 FreeRTOS 的系统节拍被异常接管。

四、修改完成后重新编译测试

完成以上两处修改后,重新编译并下载 FreeRTOS 固件,再运行 OpenAMP 异核通信例程。

如果修改正确,SysTick 延时异常问题即可修复,FreeRTOS 任务调度和 OpenAMP 通信流程也会恢复正常。

五、总结

本次问题的核心原因是 SysTick_Handler 重复或错误接管,导致 FreeRTOS 系统节拍异常。

处理方法很简单:

  1. 将 USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 改为 0;
  2. 删除 stm32mp2xx_it.c 中自定义的 SysTick_Handler;
  3. 重新编译并验证例程运行状态。

后续在移植 STM32MP257 异核 FreeRTOS + OpenAMP 工程时,如果遇到延时异常、任务调度异常等问题,可以优先检查 SysTick 相关配置。

相关推荐
2601_9583529018 小时前
不改PCB也能调拾音方向?真相在这。
前端·嵌入式硬件·回声消除·语音模块·降噪处理
M78佐菲18 小时前
ARM学习笔记(四)
linux·arm开发·笔记·嵌入式硬件·学习
半导体憨包19 小时前
光伏组件级MLPE功率优化器DCDC:25年寿命+IP67+雷击,怎么设计才不“翻车“?
嵌入式硬件·硬件工程·dc-dc·半导体芯片
LCG元19 小时前
STM32F103 双ADC交错采样实战:DUALMOD寄存器拆解、DMA位宽陷阱与1.71MSPS有效采样率实测
stm32·单片机·嵌入式硬件
Industio_触觉智能19 小时前
瑞芯微RK3576开发板部署模型|端侧Agent工具调用实现拆解
嵌入式硬件·agent·智能硬件·开发板·瑞芯微·端侧部署·rk3576
星栖与芯1 天前
LiteOS-M 切换汇编逐行图解(4):中断三件套与 HalTaskSchedule 触发
汇编·stm32·单片机·嵌入式硬件·harmonyos
G***技1 天前
告别物联网碎片化:杰和LH707+LM2-100-V0联合方案给出标准答案
人工智能·嵌入式硬件
SKH.1 天前
ARM汇编
嵌入式硬件·arm
深圳市恒锐丰科技杨生1 天前
EG2134 300V 三相独立半桥栅极驱动芯片|屹晶 EGmicro
嵌入式硬件·硬件工程
LCG元2 天前
STM32F103 SPI 驱动 W5500 以太网模块实战:硬件协议栈寄存器体系、Socket 状态机避坑与 TCP 吞吐实测
stm32·单片机·嵌入式硬件