STM32でNUTTXを使ってみる

SYSLOG Interfaces


Nuttxのデバック時に使用するSYSLOG Interfacesを紹介します

この動作を確認するためのサンプルアプリを公開しています。
こちらの手順でapps/examplesディレクトリに追加してくださ い。
以下の手順でサンプルアプリをファームに組み込みます。
$ make clean
$ make menuconfig

Application Configuration > Examples で以下のアプリを追加してください。


このアプリを追加したらひたすらExitで抜けます。
新しい[.config]を使ってファームウェアをビルドし、新しいファームウェアをマイコンに書き込みます。
nshに接続するとsyslog_testアプリが追加されています。




Nuttxには標準出力とsyslogの出力先の2つの出力先が有ります。
syslogの出力先はnshの環境と、usbnshの環境で変わります。
usbnshを使う場合、printfの出力先は標準出力、syslogの出力先は/dev/ttyS0となります。
F4 Discoveryの場合、/dev/ttyS0はPA2/PA3にアサインされます。
TTL-USBコンバータとF4 Discoveryを以下のように接続します。
USB-TTL F4 Discovery
TX PA3
RX PA2
GND GND

USB-TTLコンバータをホストマシンのUSBポートに接続し、新しい端末で以下のコマンドを実行します。
$ sudo screen /dev/ttyUSB0 115200

syslogの引数で実行すると以下のコードを実行します。
    printf("Hello, World!!\n");
    syslog(LOG_ERR,"[LOG_ERR] syslog\n");
    syslog(LOG_WARNING,"[LOG_WARNING] syslog\n");
    syslog(LOG_NOTICE,"[LOG_NOTICE] syslog\n");
    syslog(LOG_INFO,"[LOG_INFO] syslog\n");
    syslog(LOG_DEBUG,"[LOG_DEBUG] syslog\n");

printfの出力先は標準出力となります。


syslogの出力先は/dev/ttyS0になります。


ttyS0の引数を指定して起動すると/dev/ttyS0への出力を行います。
標準出力には何も表示されません。


ttyS0への出力もsyslogと同じ出力先(/dev/ttyUSB0)となります。


これ以外の出力先として/dev/consoleが有ります。
/dev/consoleは標準出力に割り当てられています。




nshを使う場合、標準出力がそもそも/dev/ttyS0なので、printfの出力先とsyslogの出力先は同じとなります。
以下の様にprintfはバッファリングされてしまうので、[Hello, World!!]は正しく表示できないことが分かります。


当然/dev/ttyS0と/dev/consoleの出力先も同じです。






APIの使い方に間違いがあるかもしれません。
こ ちらのドキュメントで確認してください。

ファームの書き込み方法と、nshへの接続方法はこちらに紹介しています。
STM32F4 Discovery
STM32F3 Discovery
STM32F103RB Nucleo
STM32F103 BluePill/BlackPill
STM32F103 VEボード
STM32F407 VGボード

続く...