我试图在6x左右的VxWorks中循环一个命令,我无法为有问题的目标编译代码,所以我必须使用现有的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命令来处理我正在调用的函数中的参数< / p>
答案 0 :(得分:1)
重复和句点具有相同的签名,但第一个参数的解释是不同的。因此,如果您可以成功调用重复,那么您也可以成功调用句点。
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上的工作,或者看门狗处理程序触发的信号量。
实际上,现在我考虑一下,我相信repeat
和period
也会从ISR调用处理程序,所以从技术上来说,同样的限制也适用于那里。