[其他ST产品]

如何更改特定函数/中断的代码优化?

[复制链接]
246|10
手机看帖
扫描二维码
随时随地手机跟帖
WHALEE|  楼主 | 2025-7-2 22:54 | 显示全部楼层 |阅读模式
正在处理一些中断相关的代码,中断需要非常快速。我至少需要使用gcc的"-O2"优化级别。不想将整个项目设置为O2,因为这样调试很麻烦。
我发现了两种方法可以将gcc为特定函数设置自定义优化选项:
添加optimize属性:
void __attribute__ ((optimize("-O2"))) EXTI4_15_IRQHandler(void){    // ...}
或者使用pragma命令:
#pragma GCC push_options#pragma GCC optimize ("-O2")void EXTI4_15_IRQHandler(void){    // ...}#pragma GCC pop_options
经测试,这两种方法对优化没有影响。
这种情况咋办?

使用特权

评论回复
xiaoqizi| | 2025-8-2 18:32 | 显示全部楼层
使用__attribute__((optimize("...")))属性,直接作用于目标函数,无需修改全局配置

使用特权

评论回复
木木guainv| | 2025-8-2 20:50 | 显示全部楼层
可以选择通过#pragma指令临时调整优化选项

使用特权

评论回复
Jiangxiaopi| | 2025-8-2 23:01 | 显示全部楼层
直接标记中断服务函数的优化级别

使用特权

评论回复
荣陶陶| | 2025-8-3 09:55 | 显示全部楼层
#define GCC_OPTIMIZE_AWARE ((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) || defined(__clang__))
#ifdef GCC_OPTIMIZE_AWARE
  #pragma GCC push_options
  #pragma GCC optimize ("-O2")
#endif


使用特权

评论回复
Zhiniaocun| | 2025-8-3 12:31 | 显示全部楼层
由于中断向量表中存有ISR地址引用,理论上不会被完全优化掉

使用特权

评论回复
Zuocidian| | 2025-8-3 14:43 | 显示全部楼层
最小化执行时间,仅执行必要操作,复杂逻辑交由主循环处理

使用特权

评论回复
Puchou| | 2025-8-3 17:19 | 显示全部楼层
使用[size=0.875]volatile修饰共享变量防止缓存一致性问题

使用特权

评论回复
Xiashiqi| | 2025-8-3 19:37 | 显示全部楼层
通过优先级管理和临界区保护降低延迟不确定性

使用特权

评论回复
小海师| | 2025-8-3 21:57 | 显示全部楼层
高优化级别可能导致调试困难,建议在开发阶段分模块测试不同优化配置的效果差异

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

33

帖子

0

粉丝