いくつかの IO でポーリングを行うタスクを書きたいと思います。ここで、CPU をブロックするのではなく、1 マイクロ秒ごとに IO をチェックする必要があります。私は比較的 VxWorks の初心者でありusleep(1);
、ポーリング ループに a を挿入しても、おそらく必要な処理が行われないことに気付きました。これについてはどうすればよいですか?
私にはsysClkRateGet()
十分ではない 60 が返されることがわかりました。私はポーリングして迅速に反応する必要がありますが、CPU で行われている他のことをブロックすることはできないので、私のためにtaskDelay()
それを行うことはできないと思います...私のタスクのダウンタイムを短縮できるものは他にありますか (よりも 1/60 秒)?
編集
短いポーリング機能を実行する 1 秒ごとにタイマーを開始する方がはるかにスマートであることがわかったと思います。私は次のようにタイマーをトリガーしました:
timer_t polltimerID;
struct itimerspec poll_time;
poll_time.it_value.tv_sec = 0;
poll_time.it_value.tv_nsec= 1000;
poll_time.it_interval.tv_sec = 0;
poll_time.it_interval.tv_nsec= 1000; // execute it every 1us
if(timer_create (CLOCK_REALTIME, NULL, &polltimerID))
printf("problem in timer_create(): %s",strerror(errno));
if(timer_connect (polltimerID,MyPollFunction,0))
printf("problem in timer_connect(): %s",strerror(errno));
if(timer_settime (polltimerID, 0, &poll_time, NULL))
printf("problem in timer_settime(): %s",strerror(errno));
しかし、私はまだ正確にはわかりません.タイマーの優先順位は何ですか.現在のタスクを先取りできる場合(およびその方法)は誰ですか?