GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
SAKURAやCITRUSでは使えたMsTimer2は未対応でしょうか?
FreeRTOSのxTimerCreateとxTimerStartを使って周期タイマ処理ができました。
以下は、100ms周期のタイマ処理です。
#include <Arduino.h>extern "C" {#include "FreeRTOS.h"#include "timers.h"}TimerHandle_t handle;void interval_func(TimerHandle_t pxTimer){ digitalWrite(PIN_LED1, !digitalRead(PIN_LED1));}void setup() { pinMode(PIN_LED0, OUTPUT); pinMode(PIN_LED1, OUTPUT); handle = xTimerCreate("interval_100ms",(15 / portTICK_PERIOD_MS), pdTRUE, (void *)0, interval_func); if(handle != NULL) { xTimerStart(handle, 0); }}void loop() { digitalWrite(PIN_LED0, !digitalRead(PIN_LED0)); vTaskDelay(500);}
コピペミスすみませんでした。
FreeRTOSConfig.hで
#define configTICK_RATE_HZ ( 1000 )
となっており、FreeRTOSのtickが1ms周期に設定されているようなので、
これを2000にすれば0.5ms周期になるんでしょうか?
上記のサンプルコード中にあるportTICK_PERIOD_MSは、
#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
という定義です。
西村備山さん、digipontaさん、@chobichanさん こんにちは。シェルティと申します。 ROSのコア部分にあるAmazon FreeRTOSの移植を担当しております。 ご推察の通りAmazon FreeRTOSは1msを1tickとして動いています。 この1tickはRXマイコンのCMTを使用して実現しています。 割り込み優先度は1=最低に設定してあります。 github.com/.../FreeRTOSConfig.h →#define configKERNEL_INTERRUPT_PRIORITY 1 あと、OSとしてはソフトウェア割り込みも使っていて、 以下でOSが使用する最大の割り込み優先度設定ができます。 #define configMAX_PRIORITIES ( 7 )
↓ 2020/09/16 修正
configMAX_SYSCALL_INTERRUPT_PRIORITIES
一方で、ネイティブのCMT用のドライバのコンフィグコードが以下にあります。 github.com/.../r_cmt_rx_config.h 今は割り込み優先度5ですが、これを8とかにすれば、 OSに対して多重割り込みができます。 OS側も自分で管理する割り込み後に多重割り込み許可してます。 また、OSはCMTで使用するチャネルの割り込み優先度を自身で設定し、 CMT用のドライバ側はこれを検知してOSが使っているCMTのチャネルを 避けるようにチャネル割り当てを行うことができます。 あとはアプリ側でCMT用のドライバのR_CMT_CreatePriodic()を呼び出せば、 OSのtickに無関係な周期割り込みが実現できます。 github.com/.../r01an1856jj0321-rx.pdf tick=1msより短い割り込み周期が必要な場合はこの技を使ってください。 tick=1msより長い割り込み周期が必要な場合はOSのタイマ機能を使ってください。 tick自体を短く変えてもよいような気もしますが、 実験してないので未知の壁に当たる可能性が高いと思いますし、 tickを短くしすぎるとOSが常に動き続けてオーバヘッドも 大きいと思われますので、usオーダの割り込みは物理タイマに近い層で OSから独立した形で調整するのがよろしいかと思います。 以上です