硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2214|回复: 23
收起左侧

[IAR] 理论上只要代码写的严谨,即使开最大优化应该也不会导致程序异常工作吧

  [复制链接]

77

主题

274

回帖

505

积分

金牌会员

积分
505
发表于 2024-9-2 22:11:06 | 显示全部楼层 |阅读模式
在结合实际硬件条件的情况下,只要代码写的严谨,即使开最大优化,程序也应该正常工作吧。


如果原本正常的程序的开了最大优化以后功能就不正常了,说明程序可能写的还不够严谨,我是这样理解的。


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116230
QQ
发表于 2024-9-3 00:56:03 | 显示全部楼层
耐优化的代码,可以做到所有优化等级通吃。
回复

使用道具 举报

218

主题

1106

回帖

1770

积分

至尊会员

More we do, more we can do.

积分
1770
发表于 2024-9-3 09:02:12 | 显示全部楼层
eric2013 发表于 2024-9-3 00:56
耐优化的代码,可以做到所有优化等级通吃。

"所有优化等级通吃",这个有不适用的情况,执行时间也是关键因素。
回复

使用道具 举报

0

主题

82

回帖

82

积分

初级会员

积分
82
发表于 2024-9-3 12:13:50 | 显示全部楼层
emwin 发表于 2024-9-3 09:02
"所有优化等级通吃",这个有不适用的情况,执行时间也是关键因素。

嗯,开最高优化,基于size还是speed的运行效率是有比较大的差异,对时序要求比较高的应用要做好时序的处理才行
回复

使用道具 举报

4

主题

1449

回帖

1461

积分

至尊会员

积分
1461
发表于 2024-9-3 13:35:05 | 显示全部楼层
eric2013 发表于 2024-9-3 00:56
耐优化的代码,可以做到所有优化等级通吃。

耐优化的代码,有哪些特征来遵循呢?硬汉大哥
回复

使用道具 举报

4

主题

391

回帖

403

积分

高级会员

积分
403
发表于 2024-9-3 16:27:26 | 显示全部楼层
morning_enr6U 发表于 2024-9-3 13:35
耐优化的代码,有哪些特征来遵循呢?硬汉大哥

你一开始写bug的时候就把ac6打开优化开到最高哪么写出来的代码就很好了 0 Error(s), 0 Warning(s).
老工程别折腾了,又不是不能跑
回复

使用道具 举报

11

主题

694

回帖

727

积分

金牌会员

积分
727
发表于 2024-9-3 17:32:55 | 显示全部楼层
cctv180 发表于 2024-9-3 16:27
你一开始写bug的时候就把ac6打开优化开到最高哪么写出来的代码就很好了 0 Error(s), 0 Warning(s). ...

回复

使用道具 举报

77

主题

274

回帖

505

积分

金牌会员

积分
505
 楼主| 发表于 2024-9-3 21:36:28 | 显示全部楼层
cctv180 发表于 2024-9-3 16:27
你一开始写bug的时候就把ac6打开优化开到最高哪么写出来的代码就很好了 0 Error(s), 0 Warning(s). ...

确实,用这种方法可以促使代码写的严谨
回复

使用道具 举报

8

主题

65

回帖

89

积分

初级会员

积分
89
发表于 2024-9-3 21:44:56 来自手机 | 显示全部楼层
不耐优化的代码,严格的说没有完全遵循C标准,也就是处在危险的边缘,有的优化等级正常,有的出错。如果有充足的时间
回复

使用道具 举报

8

主题

65

回帖

89

积分

初级会员

积分
89
发表于 2024-9-3 21:49:31 来自手机 | 显示全部楼层
旧项目有时间也可以慢慢debug,就怕用了很多第三方没有源码的库,库本身不耐优化,质量不高,这种无解。有源码也要读懂了,才能修改,很多细节的。
回复

使用道具 举报

8

主题

65

回帖

89

积分

初级会员

积分
89
发表于 2024-9-3 21:51:09 来自手机 | 显示全部楼层
我说错了,二进制库,不会被编译,而是直接链接到目标文件,比如hex文件。
回复

使用道具 举报

6

主题

53

回帖

71

积分

初级会员

积分
71
发表于 2024-9-4 22:29:55 | 显示全部楼层
有时序要求的代码,优化很容易出问题。需要使用__attribute__((optnone)) ,禁止优化。
回复

使用道具 举报

1

主题

38

回帖

41

积分

新手上路

积分
41
发表于 2024-9-8 08:57:09 | 显示全部楼层
建议不错,先开最高级的优化,然后写代码编译,写出来的肯定是耐优化的代码
回复

使用道具 举报

2

主题

35

回帖

41

积分

新手上路

积分
41
发表于 2024-9-20 10:29:10 | 显示全部楼层
不敢认同。
编译器优化是个系统性的工作,我的观点有两个:
1.优化的目的
优化目的是提高速度还是减少代码量?很多时候这二者是不可兼得的。
执行速度高了往往代码量大,反之亦然。如果优化后芯片时序或者代码量变化了,是无法绝对保证芯片都能正常工作的。
把所有的责任都推到软件开发人员身上是不科学的。
2.不要完全相信编译器
优秀的软件代码,必须是与内核架构、指令集、总线及存储结构相匹配的,有人叫CPU友好型代码;
汇编器其实就是个工具,世界上还没有完美的编译器工具,ARM和DSP的编译器一直在升级更新,说明都存在不足之处。
STM32驱动库中部分代码段屏蔽了优化,就是为了防止优化带来的不确定性。

本人习惯是样机debug状态下不开优化,定型测试时再开优化。
回复

使用道具 举报

0

主题

131

回帖

131

积分

初级会员

积分
131
发表于 2024-9-21 00:53:51 | 显示全部楼层
matt_dash 发表于 2024-9-20 10:29
不敢认同。
编译器优化是个系统性的工作,我的观点有两个:
1.优化的目的

要求速度的通常都是调用频率高的模块或函数,而编译器的优化选项是可以自定义每个c文件都有不一样的优化选项的。所以是可以二者兼得的。
回复

使用道具 举报

69

主题

172

回帖

379

积分

高级会员

积分
379
发表于 2024-9-23 17:51:30 | 显示全部楼层
matt_dash 发表于 2024-9-20 10:29
不敢认同。
编译器优化是个系统性的工作,我的观点有两个:
1.优化的目的

请问:STM32驱动库中部分代码段屏蔽了优化,就是为了防止优化带来的不确定性,

这部分代码具体位置是哪里?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116230
QQ
发表于 2024-9-24 10:15:26 | 显示全部楼层
lindahnu 发表于 2024-9-23 17:51
请问:STM32驱动库中部分代码段屏蔽了优化,就是为了防止优化带来的不确定性,

这部分代码具体位置是 ...

全工程检索关键词#pragma
回复

使用道具 举报

69

主题

172

回帖

379

积分

高级会员

积分
379
发表于 2024-9-24 16:56:23 | 显示全部楼层
eric2013 发表于 2024-9-24 10:15
全工程检索关键词#pragma

目前我在G0的工程里搜索,都没有
回复

使用道具 举报

4

主题

120

回帖

132

积分

初级会员

积分
132
发表于 2024-9-24 17:10:09 | 显示全部楼层
用MDK的PC-LINT,让代码通过misrc 2012,基本不出问题
回复

使用道具 举报

21

主题

79

回帖

142

积分

初级会员

积分
142
发表于 2024-9-27 19:12:02 | 显示全部楼层
遇到奇葩。高等级优化2和3正常运行,0和1不正常,很蛋疼,我写代码就直接开最高,写完每个等级试一下,发现不行。而且问题居然出在一个PWM出问题。其他逻辑都是正确的。
回复

使用道具 举报

10

主题

100

回帖

130

积分

初级会员

积分
130
发表于 2024-9-27 23:19:14 | 显示全部楼层
从写代码以来,一直都是开最高优化,各种芯片都是,什么51,M内核,A内核,RSIC等等。。。。都是开最高优化走起。。。不过确实遇到了不少开最高优化不行,但是会定位到问题。直接那个函数指定优化等级就好了。其他继续开最高优化。。。习惯就好了。
回复

使用道具 举报

69

主题

172

回帖

379

积分

高级会员

积分
379
发表于 2024-10-28 09:27:17 | 显示全部楼层
turnip 发表于 2024-9-24 17:10
用MDK的PC-LINT,让代码通过misrc 2012,基本不出问题

这个工具免费吗?能提供一个下载链接和使用方法吗?
回复

使用道具 举报

69

主题

172

回帖

379

积分

高级会员

积分
379
发表于 2024-10-28 09:46:15 | 显示全部楼层
turnip 发表于 2024-9-24 17:10
用MDK的PC-LINT,让代码通过misrc 2012,基本不出问题

这个PClint免费吗?网上说有免费版和收费版,还没接触过
回复

使用道具 举报

4

主题

120

回帖

132

积分

初级会员

积分
132
发表于 2024-10-28 09:52:32 | 显示全部楼层
lindahnu 发表于 2024-10-28 09:46
这个PClint免费吗?网上说有免费版和收费版,还没接触过

你网上搜一下,有资源的。不好提供
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-11 03:41 , Processed in 0.364293 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表