搜索
bottom↓
回复: 8

一个简单函数,变量并没有分配在RAM中,为何要SUB SP,SP,#+4?

[复制链接]

出0入0汤圆

发表于 2008-9-13 10:35:25 | 显示全部楼层 |阅读模式
一个简单函数,变量并没有分配在RAM中,为何要SUB  SP,SP,#+4?
IAR EWARM5.20,hight speed优化。

typedef unsigned int reg_save_t;

reg_save_t CriticalEnter(void)
{
  reg_save_t flags=__get_primask();
  __disable_interrupt();
  return flags;
}

IAR 5.20编译出汇编代码:
CriticalEnter:
        PUSH     {LR}
        SUB      SP,SP,#+4  //有何用?
        BL       __get_primask
        CPSID    I
        ADD      SP,SP,#+4  //有何用?
        POP      {PC}             ;; return

出0入0汤圆

 楼主| 发表于 2008-9-13 10:44:02 | 显示全部楼层
换成high size优化,
两条多余指令去掉了。
CriticalEnter:
        PUSH     {R7,LR}
        BL       __get_primask
        CPSID    I
        POP      {R1,PC}          ;; return

IAR速度优化不行?

出0入0汤圆

发表于 2008-9-13 10:55:15 | 显示全部楼层
SUB      SP,SP,#+4
在堆栈中申请 4BYTE空间做临时变量

high size和hight speed对于有不同的库函数代码
high size不一定就hight speed
hight speed不一定就high size

出0入0汤圆

 楼主| 发表于 2008-9-13 11:09:39 | 显示全部楼层
IAR明显犯傻,没有用到RAM局部变量,竟然还去申请堆栈空间。!

看来,IAR SIZE优化做的很好,而SPEED优化不咋地。

出0入0汤圆

发表于 2008-9-13 11:55:54 | 显示全部楼层
__get_primask()是intrinsic function吧?我用的是IAR 4.2,没这个函数。你至少在反汇编窗口跟一下这两种优化策略下代码长度和执行时间,现在下结论太早了。

出0入0汤圆

 楼主| 发表于 2008-9-13 13:16:45 | 显示全部楼层
__get_primask()是我在4.42下写的内嵌函数,移到5.20下用。

多谢提醒。

IAR5.20有 CM3本征函数,这样效率就高。

static __always_inline__  reg_save_t CriticalEnter(void)
{
        reg_save_t flags=__get_interrupt_state();
        __disable_interrupt();
       return flags;
}

static __always_inline__ void CriticalExit(reg_save_t flags)
{
       __set_interrupt_state(flags);
}

出0入0汤圆

发表于 2008-9-17 08:39:59 | 显示全部楼层
看了这么久,才发现楼主是做评论测试工作的。iar实现你所说的高效率,那还是一款通用的开发软件吗?



多一个两个出入栈操作也大惊小怪。莫非你上班的时间都是在选一款适合你的武器。

出0入0汤圆

 楼主| 发表于 2008-9-17 08:33:06 | 显示全部楼层
多谢楼上。



原来是这个问题。

是我自己无知了。

出0入17汤圆

发表于 2008-9-16 22:33:03 | 显示全部楼层
是栈顶8字节对齐问题么?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 14:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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