[STM32F7] STM32F767 的执行耗时比 STM32F429 更长?

[复制链接]
65|10
内核558 发表于 2026-8-27 08:56 | 显示全部楼层 |阅读模式
我使用 STM32CubeMX 生成的 FreeRTOS 示例工程,分别在两款芯片上重复创建 100 次操作系统任务,观测结果如下:
F429 —— 6 个 Ticks
F767 —— 16  Ticks
差值 —— 10 个 Ticks

出现该延时的原因是什么?
是否有优化提速的办法?

公羊子丹 发表于 2026-9-3 12:46 | 显示全部楼层
我怀疑F7这边Flash等待周期配置不对,F7主频更高,如果ART缓存没开,代码跑在Flash上执行效率反而会比F4还差,你先核对下ART使能状态。
周半梅 发表于 2026-9-3 12:47 | 显示全部楼层
这个现象挺反直觉的,F7内核明明更强,结果任务创建更慢。想问下你两个工程的FreeRTOS配置是不是完全一样?堆栈大小、钩子函数这些细节很容易被忽略。
帛灿灿 发表于 2026-9-3 12:48 | 显示全部楼层
之前遇到过类似情况,CubeMX生成的F7工程默认开启很多中断和外设,任务创建时会受中断干扰。你可以临时关掉全部外设,裸跑测试任务创建耗时对比看看。
童雨竹 发表于 2026-9-3 12:49 | 显示全部楼层
提醒一下,你确认两款芯片系统主频一致吗?F767默认能跑到216M,要是工程里没配置到最高频率,再加上缓存没开,性能直接就拉胯了。
万图 发表于 2026-9-3 12:50 | 显示全部楼层
哈哈万万别以为新芯片就一定更快,F7坑点比F4多不少。建议你把任务创建那段代码放到RAM里面运行,对比Flash执行,看看耗时会不会明显降下来。
Wordsworth 发表于 2026-9-3 12:50 | 显示全部楼层
你检查过SysTick的配置吗?两边的系统节拍定时器分频、tick频率必须完全相同,不然直接拿tick计数对比时间,本身就会得出错误的结论。
Bblythe 发表于 2026-9-3 12:51 | 显示全部楼层
我建议把统计方式改一下,不要只依赖FreeRTOS的tick,用芯片内部DWT周期计数器,直接读取CPU周期数,这样可以避开系统节拍带来的计量误差。
Pulitzer 发表于 2026-9-3 12:52 | 显示全部楼层
会不会是F7工程开启了MPU内存保护单元?CubeMX生成F7工程经常默认打开MPU,内存访问加了校验开销,会拖慢任务创建这类频繁内存操作。
Uriah 发表于 2026-9-3 12:53 | 显示全部楼层
想问问两个工程堆内存来源一样吗?F7如果用外部SDRAM当堆,速度远不如内部RAM。任务创建频繁申请内存,SDRAM访问延迟会直接叠加到耗时上。
Clyde011 发表于 2026-9-3 12:54 | 显示全部楼层
我之前调F7的FreeRTOS,发现开启断言、栈溢出检测之后任务开销暴涨。你对比下两边FreeRTOSConfig.h,把调试相关选项全部关掉再重新测试一遍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

213

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0