【问题标题】:Loop a command in VxWorks at a certain frequency在 VxWorks 中以特定频率循环命令
【发布时间】:2015-01-27 10:13:28
【问题描述】:

我试图在 VxWorks 中以 6Hz 左右循环命令,我无法为相关目标编译代码,因此我必须使用现有的 VxWorks shell 命令

我试过了:

repeat(1000,functionX,param1,param2,param3)

这在重复命令 1000 次时效果很好,但不会给我所需的频率

作为一种妥协,我查看了:

period() 

因为这能够给我 1hz 函数调用(这可能是可以接受的)但是我不知道如何将所需的参数输入到 FunctionX 我都试过了:

period(1,functionX,param1,param2,param3)

period(1,functionX(param1,param2,param3))

没有运气

关于如何为 FunctionX 实现 6Hz 速率的任何想法都会很棒,但如果不编译一些代码就无法实现,那么我将寻求一种让 period 命令与我正在调用的函数中的参数一起工作的方法

【问题讨论】:

    标签: shell loops vxworks


    【解决方案1】:

    Repeat 和 period 具有相同的签名,但对第一个参数的解释不同。所以如果你可以成功调用repeat,那么你也可以成功调用period。

    int period
        (
        int     secs,             /* period in seconds */
        FUNCPTR func,             /* function to call repeatedly */
        int     arg1,             /* first of eight args to pass to func */
        int     arg2,
        int     arg3,
        int     arg4,
        int     arg5,
        int     arg6,
        int     arg7,
        int     arg8
        )
    
    
    
    int repeat
        (
        int     n,                /* no. of times to call func (0=forever) */
        FUNCPTR func,             /* function to call repeatedly */
        int     arg1,             /* first of eight args to pass to func */
        int     arg2,
        int     arg3,
        int     arg4,
        int     arg5,
        int     arg6,
        int     arg7,
        int     arg8
        )
    

    repeat第一个参数是调用函数的次数,period第一个参数是周期,单位是秒

    所以period 对你来说真的太慢了​​,repeat 太快了,尽管你可以使用tickGet 让它工作。你真正想要的是一个 vxworks 看门狗。在您的 vxworks 文档中查找 wdCreate()wdStart(),但请注意,您的看门狗处理程序将从 ISR 调用,因此应采取标准的 ISR 预防措施(即您将需要一项任务来完成应该未决的实际工作在 msgQ 或看门狗处理程序触发的信号量上)。

    实际上,现在我想起来了,我相信repeatperiod 也会从 ISR 调用处理程序,所以从技术上讲,同样的限制也适用于那里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      • 2019-06-13
      • 2020-08-11
      • 1970-01-01
      相关资源
      最近更新 更多