硬汉嵌入式论坛

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

[MDK] 汇编延时

[复制链接]

5

主题

132

回帖

147

积分

初级会员

积分
147
发表于 2021-6-7 18:28:09 | 显示全部楼层 |阅读模式
/*!
  * @brief    汇编延时
  *
  * @param    ulCount:延时时钟数
  *
  * @return   无
  *
  * @note     ulCount每增加1,该函数增加3个时钟
  *
  * @see      120Mhz时钟时,当ulCount为1时,函数耗时3个时钟,延时=3*1/120us=1/40us
  */
#if defined   (__CC_ARM) /*!< ARM Compiler */
__asm void userDelay(unsigned long ulCount)
{
    subs    r0, #1;
    bne     userDelay;
    bx      lr;
}
#elif defined ( __ICCARM__ ) /*!< IAR Compiler */
void userDelay(unsigned long ulCount)
{
    __asm("    subs    r0, #1\n"
       "    bne.n   userDelay\n"
       "    bx      lr");
}

#elif defined (__GNUC__) /*!< GNU Compiler */
void __attribute__((naked)) userDelay(unsigned long ulCount)
{
    __asm("    subs    r0, #1\n"
       "    bne     userDelay\n"
       "    bx      lr");
}

#elif defined  (__TASKING__) /*!< TASKING Compiler */                           
/*无*/

#endif /* __CC_ARM */

之前us级别延时经常使用这个,也测量过基本很准确,但是最近使用的时候发现延时时间是设定的2倍,不知道有没有老哥用过这种汇编延时?或者帮忙测试一下

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106989
QQ
发表于 2021-6-8 08:33:39 | 显示全部楼层
我一直用的DWT

DWT实现一个精确微秒延迟的参考例程
http://www.armbbs.cn/forum.php?m ... 9128&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

5

主题

132

回帖

147

积分

初级会员

积分
147
 楼主| 发表于 2021-6-8 09:04:04 | 显示全部楼层
eric2013 发表于 2021-6-8 08:33
我一直用的DWT

DWT实现一个精确微秒延迟的参考例程

OK,我试试,不过dwt  M0没有有点遗憾
回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
发表于 2021-6-8 22:14:36 | 显示全部楼层
nop不好用吗
回复

使用道具 举报

5

主题

132

回帖

147

积分

初级会员

积分
147
 楼主| 发表于 2021-6-9 08:45:16 | 显示全部楼层

nop受优化等级影响,汇编延时不会,仔细试过了,这个在M3上是6个时钟,M4上是3个时钟
回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
发表于 2021-6-9 12:26:26 | 显示全部楼层
无关风月 发表于 2021-6-9 08:45
nop受优化等级影响,汇编延时不会,仔细试过了,这个在M3上是6个时钟,M4上是3个时钟

nop就是汇编,它怎么会受优化等级影响?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 10:11 , Processed in 0.197641 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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