[其他ST产品] 如何更改特定函数/中断的代码优化?

[复制链接]
 楼主| 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 | 显示全部楼层
高优化级别可能导致调试困难,建议在开发阶段分模块测试不同优化配置的效果差异
Haizangwang 发表于 2025-8-4 08:19 | 显示全部楼层
部分特性在旧版GCC中不可用,需根据目标平台文档调整方案
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

39

帖子

0

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

39

主题

39

帖子

0

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