テクニック
UARTの受信を1バイト単位ではなく、連続して行うには?
複数バイトの読み取りは Serial >>
によって行えますが、1バイトずつ読み出すことを推奨いたします。
UART の規格は物理層を対象としており、データの区切りは規定しません。例えばセンサIC等であれば、先頭のヘッダや末尾のフッタ等によって、出力するデータへ区切りを設けているはずです。
データの区切りを適切に処理するためには、次のようにして1バイトずつ読み出し、状態遷移を行う必要があります。
void loop() {
uint8_t c;
while(Serial.available()) {
Serial >> c;
// または c = Serial.read();
switch(c) { ... } // cの値によって処理を分岐する
}
}
例えば送信元が [ヘッダ][データ長][データ][チェックサム][フッタ]
の形式によってデータを出力する場合、一般的には switch
によって次のような仕組みを設けることで、データの区切りを利用した受信処理を行います。
全般
内蔵ウォッチドッグタイマの時間間隔は?変更するには?
内蔵 WDT の操作は、半導体メーカの低層インタフェースから直接行う必要があります。
詳細は半導体メーカが提供する資料(JN516x Integrated Peripherals API User Guide)の P95 をご覧ください。
- 時間は
vAHI_WatchdogStart()
の引数から設定します(同資料P308) - 停止するには
vAHI_WatchdogStop()
を呼び出します(同資料P309) - Restart するには
vAHI_WatchdogRestart()
を呼び出します(同資料P310)
なお、初期状態の TWENET システムが vAHI_WatchdogStart()
へ与える引数 u8Prescale
の値は、10
としています(非公開コード)。
したがって、ユーザコードで vAHI_WatchdogStart()
を呼び出していない場合の設定時間は (2^(10-1)+1)*8 = 4104 ms = 約4.1秒
であるものと考えられます。
MWX
Analogue
スリープ復帰後にADCの周波数が1kHzに戻ってしまうことを防ぐには?
ADCのタイマデバイスにE_AHI_DEVICE_TIMER0
等を指定している場合は、スリープ復帰後にAnalogue.setup()
を呼び出すことで、もう一度初期化してください。スリープ復帰後の既定の状態では、E_AHI_DEVICE_TICK_TIMER
を指定しているため、1kHzに固定されます。