FSP + FreeRTOSでタイマ割り込み10us

FreeRTOSでタイマーを使いたいときに

ソフトウェアタイマが使えるようですが

Tick Rate Hzがデフォルトだと1000で

xTimerCreateの引数を最小の1にしても1msタイマが最小になるかと思います。

今回10usタイマを作りたいのですが、

Tick Rate Hzを100000にすると、全く動作しなくなりました(何が起こってるのかすら分かってない)

//Tick Rate Hz = 1000 (default) // 1 = 1ms; // 10 = 10ms; // 100 = 100ms; // 1000 = 1000ms; //Tick Rate Hz = 10000 // 1 = 0.1ms; // 10 = 1ms; // 100 = 10ms; // 1000 = 100ms; xTimer = xTimerCreate("timer", 1, pdTRUE, (void*)0, vTimerCallback);

いろいろネットで検索していると

ソフトウェアタイマで10usは厳しいようなので

ハードウェアタイマを使うべきとあります。

そこで、今作成しているスレッドにE2StudioのStackのところでタイマを追加してやってみました。

結果ですが、

10usタイマのcallbackが呼ばれて、カウント動作はしているのですが

なぜか不定期にタイマー値が戻ってしまいます。

現在CAN の通信モニタを作っており、CANで受信したデータに10us単位のタイムスタンプをつけて、

EthernetのUDP通信でパソコンに送信しています。

下記はそのパソコンで受信した結果です。赤チェック部分のタイムスタンプがおかしい部分です。少し巻き戻った値になってしまっています。

マイコンC言語自体は15年ほどやっておりハードウェアタイマ割り込みなどは理解しているつもりですが

FreeRTOSやOSの知識はほとんどなく、今回はじめてFreeRTOSでの開発をしています。

単純にFSP + FreeRTOSで10usタイマを使用する場合、この使い方で良いのかが気になっております。

Stackの設定画面で追加したスレッドに、タイマ General PWMを追加して使うのは正しいやりかたなのでしょうか?

注意点等ありますでしょうか?

また原因が分かればご教授いただけると助かります。

Parents Reply Children
No Data