查看: 2023|回复: 0

【SIGMA开发小组】利用32定时器实现的一种无等待周期延时

[复制链接]
  • TA的每日心情
    奋斗
    2013-10-28 09:28
  • 签到天数: 34 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-8-22 16:48:47 | 显示全部楼层 |阅读模式
    分享到:
    目前单片机中的延时分为软件延时和硬件延时,软件延时谁白了就是让CPU傻等,一直做--操作,直接影响到CPU性能的发挥;硬件延时的话,是通过内部定时器实现一个单位时间片,设置延时时间片time_1us,打开中断,没进入中断就time_1us ++;然后在主函数中判断time_1us的大小,就可以知道具体的时间,这样CPU不用太多干预,只要中断里面处理一下就好,但是还是稍显复杂,要打开中断去更新时间标志的大小,有没有一种不需要中断(软件延时优点),同时也不需要太多CPU干预,让CPU傻等(硬件延时的优点)的一种双优方案呢?答案是肯定的。请看下面代码:
    定义区:
    #define TIME_EXECUTE_PERIODICALLY_BEGIN(time_ms) \
    {\
        static uint32_t target = 0;\
        if(target <= time_nowMs())\
        {\
            target = time_nowMs() + time_ms;
    #define TIME_EXECUTE_PERIODICALLY_END() \
        }\
    }
    调用区:
    TIME_EXECUTE_PERIODICALLY_BEGIN(1)       
        {
            ;//要执行的代码,此代码会实现1ms定期执行一次,很强大吧
        }TIME_EXECUTE_PERIODICALLY_END()

    分享各位网友,望共同探讨四轴!!!
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-22 08:51 , Processed in 0.107686 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.