打印

版主,调用固件库函数效率会比直接操作寄存器低吗?

[复制链接]
2376|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stm0574|  楼主 | 2012-8-29 15:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己想了想,除却占用空间大一些外似乎在执行效率上也没有打太大的折扣。
就是在编译的时候用#define替代一下直接的寄存器/位。
这样理解有没有问题?
沙发
香水城| | 2012-8-29 16:30 | 只看该作者
随便看一个库函数

void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel)
{
  uint32_t tmpreg = 0;
  /* Check the parameters */
  assert_param(IS_PWR_PVD_LEVEL(PWR_PVDLevel));
  tmpreg = PWR->CR;
  /* Clear PLS[7:5] bits */
  tmpreg &= CR_PLS_MASK;
  /* Set PLS[7:5] bits according to PWR_PVDLevel value */
  tmpreg |= PWR_PVDLevel;
  /* Store the new value */
  PWR->CR = tmpreg;
}

如果你直接写寄存器,你会怎么写?

效率是一定有所损失的,但换来安全可靠,快速上手,方便移植升级。

使用特权

评论回复
板凳
stm0574|  楼主 | 2012-8-29 16:49 | 只看该作者
固件库就这么一条语句:
PWR_PVDLevelConfig(PWR_PVDLevel_2V8);
这个库函数我跑了一下,汇编也没有几条,大概跟版主给的例程语句数相当;
可能我的表达有误,我说的效率就是调用最彻底的固件库,与寄存器相关的指令都被define的这种库与版主给出的这个例子比效率应该不相上下吧?
还有,我有点搞不懂版主给的例程算是调用了库还是没有调用呢?
如果直接操作寄存器的位,我会这么写:
#define PWR_PVDLevel     0x0E0     //PVD Level =2.9V
void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel)
{
   PWR->CR &=0x011F; //Clear PLS bits.
   PWR->CR |=PWR_PVDLevel;
}
别的都不要了,我觉得这样操作的效率倒是真的高了,安不安全这些配置反正也就一次,仔细点应该没有大问题。

使用特权

评论回复
地板
香水城| | 2012-8-29 17:24 | 只看该作者
我的意思是要么
PWR_PVDLevelConfig(PWR_PVDLevel_2V8);
要么
PWR->CR &=0x011F; //Clear PLS bits.
PWR->CR |=2V8;

这样还是有差别的

不然差别很小

使用特权

评论回复
5
stm0574|  楼主 | 2012-8-29 17:29 | 只看该作者
差别小就好。
反正主频72M,速度也不慢。:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

18

帖子

0

粉丝