4710|6

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教:STM32的函数调用到底有多大的开销? [复制链接]

平台: IAR5.30 ST-LINK 使用3IN1的板子和STM32的FWLIB.
系统工作于72MHz下,初始化GPIO速度为50MHz,没有开任何的中断.


while (1)
{
    //GPIO_LED->BSRR = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
    GPIO_SetBits(GPIO_LED, GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8);
    Delay(500);
        
     //GPIO_LED->BRR = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
     GPIO_ResetBits(GPIO_LED, GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8);
     Delay(500);
}
这样的话,在示波器上测量到的(一个翻转)时间间隔为91uS

while (1)
{
    GPIO_LED->BSRR = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
    //GPIO_SetBits(GPIO_LED, GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8);
    Delay(500);
        
     GPIO_LED->BRR = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
     //GPIO_ResetBits(GPIO_LED, GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8);
     Delay(500);
}
如果直接操作寄存器的话,则只需要84uS,足足有7个uS的差别,可是查看FWLIB中的GPIO_SetBits和GPIO_ResetBits却很简单的也只是操作了寄存器而已,
难道STM32的函数调用开销有这么大,还是有一些另外的开销在里面呢?
此帖出自stm32/stm8论坛

最新回复

                                 楼上说的对,函数调用会产生较大的开销,,从指令上来看的话,调用函数的指令数更多,更致命的是,还要清空流水线,这也是额外的开销呀,返回的时候也要清流水线..函数里面的东西越少,相对来讲效率肯定是很低的..   详情 回复 发表于 2009-7-8 15:01
点赞 关注
 

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

楼主可以看看反汇编代码

                                 再对照Cortex-M3的手册察看指令的运行时间。
此帖出自stm32/stm8论坛
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

谢谢!但还是有不解的地方

首先很感谢版主很及时的回贴!
我特意去查看了汇编代码,没有发现有很大的开销在哪里,就是多了一条参数压栈,跳转指令和返回指令属于多余的开销没有其他的不同.
但是为什么会有7个uS的差别呢?7uS在72MHz的主频下应该有好几百条指令的时间才对啊!
难道CORTEX-M3也会有函数调用时发生页面切换的开销吗? 
此帖出自stm32/stm8论坛
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 

多了很多操作的!

需要传递两个参数, 需要压5个寄存器栈, 调用, 执行,弹栈,返回
而用寄存器时只有执行这个过程!
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 

ST的Lib大可有选择的使用

对于资源占用很小的模块,且速度要求不高,尽量用Lib吧,开发效率和可维护性
对于要求资源占用和速度敏感的模块,尽量自己coding吧,自己知根知底

在Link的时候,链接器会自动抓取user所使用的Lib而不是抓整个Lib

整体而言,STM32的Lib稳定性和可以移植性还是不错的,但某些函数的效率确实
偏低,这也是代码通用性带来的弊病之一吧,两者的折中有要有个平衡点。
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 

学习了

                                 听楼主这么说,用ST的函数库开销大,我们可以自己做库的吧!
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

7
 

:

                                 楼上说的对,函数调用会产生较大的开销,,从指令上来看的话,调用函数的指令数更多,更致命的是,还要清空流水线,这也是额外的开销呀,返回的时候也要清流水线..函数里面的东西越少,相对来讲效率肯定是很低的..
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表