硬汉嵌入式论坛

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

[开发工具] 细节问题,MDK AC6的0级优化对局部变量的操作全部LDR+SP相对地址和STR+SP相对地址操作玩法

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2022-10-23 13:16:27 | 显示全部楼层 |阅读模式
MDK AC6的0级优化比较特殊,接近于原始编译,未做任何优化的玩法。对局部变量操作全程SP堆栈地址的相对操作。

比如这个问题(坛友yelu在此贴:链接 提出分析的问题)。

对于单个(或者少量)的局部变量操作,MDK AC5的所有优化等级和MDK AC6除0以为的优化等级,都会直接用R0等寄存器来记录,无需开辟额外的栈空间。

如果想屏蔽优化,我们一般的玩法都是直接变量前加个__IO防止编译器优化,此时就不会是由寄存器记录了,继续采用原始的SP相对地址操作。


image.png


image.png


那么问题来了,如果是大数组的局部变量,是怎么操作的呢,也是原始的SP相对地址。这种情况寄存器没法上了,寄存器个数太少。


结论:

对于MSP, PSP等修改的地方,如果修改后需要继续访问之前的局部变量,推荐设置为全局变量,简单省事。





回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-10-23 13:32:34 | 显示全部楼层
初步确诊MDK AC6的0级优化是个大坑,玩不顺手的话,慎用(2022-10-23)
https://www.armbbs.cn/forum.php? ... 9584&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

1

主题

60

回帖

63

积分

初级会员

积分
63
发表于 2022-10-23 16:11:38 | 显示全部楼层
一直没用上AC6
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-10-23 19:04:56 | 显示全部楼层

后面得慢慢切到AC6上了,从MDK5.37开始已经没默认安装AC5软件包了。
回复

使用道具 举报

2

主题

29

回帖

35

积分

新手上路

积分
35
发表于 2022-10-24 18:25:18 | 显示全部楼层
eric2013 发表于 2022-10-23 13:32
初步确诊MDK AC6的0级优化是个大坑,玩不顺手的话,慎用(2022-10-23)
https://www.armbbs.cn/forum.php? ...

不用0级优化的,调试起来有时候不方便,代码很多地方被优化,临时变量不显示数值等等
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-10-25 10:23:07 | 显示全部楼层
kkang 发表于 2022-10-24 18:25
不用0级优化的,调试起来有时候不方便,代码很多地方被优化,临时变量不显示数值等等

是的,调节还是0级优化好用。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 16:10 , Processed in 0.173725 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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