美文网首页程序员
解决CMSIS-RTOS osTimerCreate 参数传输错

解决CMSIS-RTOS osTimerCreate 参数传输错

作者: 超级普普罗特 | 来源:发表于2020-05-29 14:04 被阅读0次

    最近项目中用到FreeRTOS, 使用了CMSIS-RTOS中定义的接口。
    CMSIS-RTOS中的定时器支持传输参数,
    创建定时器时,argument的意图是用于传输用户自定义参数,如下,
    osTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void *argument);
    之后期望该参数传递给定时器time up回调,
    typedef void (*os_ptimer) (void const *argument);

    依照这个期望设计时,发现参数并未成功传递。

    osTimerCreate源码时发现,argument参数被传递给FreeRTOS定时器接口xTimerCreate中的pvTimerID参数。
    而FreeRTOS的time up回调中传递的参数是TimerHandle_t,是定时器的句柄,如下,
    typedef void (*TimerCallbackFunction_t)( TimerHandle_t xTimer );

    因此,直接获取time up回调,得到的参数并不是用户当初创建定时器时传递的那个argument
    这个问题不知道算不算CMSIS的bug,但是ARM也一直没有修正。

    解决方法

    在time up中取参数时,使用pvTimerGetTimerID函数获取真正的argument

    static void timeup_callback (void const *argument)
    {
      <T> t = pvTimerGetTimerID(argument);
    }
    

    相关文章

      网友评论

        本文标题:解决CMSIS-RTOS osTimerCreate 参数传输错

        本文链接:https://www.haomeiwen.com/subject/qqhoahtx.html