zoukankan      html  css  js  c++  java
  • μC/OS-II中使用软件定时器

    在试着将μC/OS-II移植到ARM7芯片(LPC2138)上的过程中,发现使用OSTmrCreate创建的OSTmr始终都不能执行CallbackFunction,OS版本是v2.85,最后是这么解决的。

    在文档《uCOS-II-RefMan.PDF》中找到了关于“OSTmrSignal()”这个函数的一段描述:

    OSTmrSignal() is called either by a task or an ISR to indicate that it’s time to update the timers. Typically, OSTmrSignal() would be called by OSTimeTickHook() at a multiple of the tick rate.

    它说明需要调用“OSTmrSignal()”以更新定时器。这样大概就知道问题出在哪儿了,文档下面也给出了例子:

    #if OS_TMR_EN > 0
    
    static INT16U OSTmrTickCtr = 0;
    
    #endif
    
    void OSTimeTickHook (void)
    
    {
    
    #if OS_TMR_EN > 0
    
      OSTmrTickCtr++;
    
    if (OSTmrTickCtr >= (OS_TICKS_PER_SEC / OS_TMR_CFG_TICKS_PER_SEC))
    
    {
    
      OSTmrTickCtr = 0;
    
      OSTmrSignal();
    
    }
    
    #endif
    
    }

    于是修改了钩子函数,加进上述代码,我不太确定新定义的静态局部变量放在哪里比较合适,所以一并也放在了钩子函数里面,这样子:

    /*
    *********************************************************************************************************
    *                                               TICK HOOK
    *
    * Description: This function is called every tick.
    *
    * Arguments  : none
    *
    * Note(s)    : 1) Interrupts may or may not be ENABLED during this call.
    *********************************************************************************************************
    */
    #if (OS_CPU_HOOKS_EN > 0) && (OS_TIME_TICK_HOOK_EN > 0)
    void  OSTimeTickHook (void)
    {
    #if OS_TMR_EN > 0 
        static INT16U OSTmrTickCtr = 0; 
    #endif
        
    #if OS_TMR_EN > 0
        OSTmrTickCtr++;
        if(OSTmrTickCtr >= (OS_TICKS_PER_SEC / OS_TMR_CFG_TICKS_PER_SEC))
        {
            OSTmrTickCtr = 0;
            OSTmrSignal();
        }
    #endif
    }
    #endif

    最后在Proteus里面验证通过。

    之前有用过μC/OS-III的软件定时器,直接用就可以了,貌似并不需要这样做呀。

    感觉移植操作系统对我来说难度还是太大,好吧,算不上移植,仅仅只是改写BSP而已啦~~

  • 相关阅读:
    BZOJ 1854: [Scoi2010]游戏( 二分图最大匹配 )
    BZOJ 2038: [2009国家集训队]小Z的袜子(hose) ( 莫队 )
    BZOJ 3555: [Ctsc2014]企鹅QQ( hash )
    BZOJ 2226: [Spoj 5971] LCMSum( 数论 )
    BZOJ 3505: [Cqoi2014]数三角形( 组合数 )
    BZOJ 2510: 弱题( 矩阵快速幂 )
    BZOJ 1009: [HNOI2008]GT考试( dp + 矩阵快速幂 + kmp )
    BZOJ 1090: [SCOI2003]字符串折叠( 区间dp )
    HDU 2295 Radar dancing links 重复覆盖
    ZOJ 3209 Treasure Map dancing links
  • 原文地址:https://www.cnblogs.com/heyxiaotang/p/5358192.html
Copyright © 2011-2022 走看看