picox  0.1
Config

picoxライブラリのコンパイル時コンフィギュレーション [詳解]

マクロ定義

#define X_BYTE_ORDER_BIG   (1)
 
#define X_BYTE_ORDER_LITTLE   (0)
 
#define X_BYTE_ORDER_UNKNOWN   (2)
 
#define X_CONF_ASSERT(expr)    X_DEFAULT_ASSERT(expr)
 X_ASSERT()を置き換えるルーチンを設定します。
 
#define X_CONF_BYTE_ORDER   X_BYTE_ORDER_UNKNOWN
 CPUのバイトオーダーを指定します。 [詳解]
 
#define X_CONF_ERR_HEADER   "[ERR ]"
 ERRORレベルのログヘッダ文字列を指定します。
 
#define X_CONF_FILE_NAME_MAX   (32)
 NULL終端を含むファイル名の最大バイト数を指定します [詳解]
 
#define X_CONF_FILE_PATH_MAX   (128)
 NULL終端を含むファイルパスの最大バイト数を指定します [詳解]
 
#define X_CONF_FREE(ptr)    free(ptr)
 メモリ解放関数を設定します。未指定時はfree()が使用されます。
 
#define X_CONF_GETTIMEOFDAY_IMPL_TYPE   X_GETTIMEOFDAY_IMPL_TYPE_ZERO
 x_port_gettimeofday()の実装方法を設定します [詳解]
 
#define X_CONF_HAS_C99_MATH   (0)
 strtof()等のC99で追加されたfloat版の標準関数を使用します。
 
#define X_CONF_INFO_HEADER   "[INFO]"
 INFOMATONレベルのログヘッダ文字列を指定します。
 
#define X_CONF_LINE_MAX   (128)
 1行のNULL終端を含む最大文字数を指定します [詳解]
 
#define X_CONF_LOG_LEVEL   X_LOG_LEVEL_INFO
 ログ出力レベルを設定します。 [詳解]
 
#define X_CONF_LOG_TIMESTAMP_BUF_SIZE   (32)
 タイムスタンプ文字列('\0'含む)の最大値を指定します [詳解]
 
#define X_CONF_MALLOC(size)    malloc(size)
 動的メモリ確保関数を設定します。未指定時はmalloc()が使用されます。
 
#define X_CONF_MDELAY_IMPL_TYPE   X_MDELAY_IMPL_TYPE_TICKS_BUSYWAIT
 x_port_mdelay()の実装方法を設定します [詳解]
 
#define X_CONF_MSLEEP_IMPL_TYPE   X_MSLEEP_IMPL_TYPE_MDELAY
 x_port_msleep()の実装方法を設定します [詳解]
 
#define X_CONF_NDEBUG   (0)
 アサートによる実行時チェックルーチンをコンパイル時に除去します。
 
#define X_CONF_NOTI_HEADER   "[NOTI]"
 NOTICEレベルのログヘッダ文字列を指定します。
 
#define X_CONF_TICKS_NOW_IMPL_TYPE   X_TICKS_NOW_IMPL_TYPE_GETTIMEOFDAY
 x_port_ticks_now()の実装方法を設定します [詳解]
 
#define X_CONF_TICKS_PER_SEC   1000
 1秒あたりのチック数を設定します
 
#define X_CONF_UDELAY_IMPL_TYPE   X_UDELAY_IMPL_TYPE_TICKS_BUSYWAIT
 x_port_udelay()の実装方法を設定します [詳解]
 
#define X_CONF_USE_ANSI_COLOR_LOG   (1)
 ログ出力時に、各レベルに応じて色をつけます。 [詳解]
 
#define X_CONF_USE_ASSERT_ARG   (1)
 引数の範囲チェック等の有効化
 
#define X_CONF_USE_ASSERT_ENUM   (1)
 列挙値チェックの有効化
 
#define X_CONF_USE_ASSERT_NULL   (1)
 引数のNULLチェックの有効化
 
#define X_CONF_USE_ASSERT_SELF   (1)
 クラス指向モジュールの第一引数のNULLチェックの有効化
 
#define X_CONF_USE_ASSERT_TAG   (1)
 タグチェックの有効化
 
#define X_CONF_USE_DETECT_MALLOC_NULL   (0)
 picoxライブラリで何らかの動的メモリ確保失敗をX_ASSERT()で検出します。 [詳解]
 
#define X_CONF_USE_DYNAMIC_LOG_SUPPRESS   (0)
 ログ出力レベルの実行時変更機能を使用します。 [詳解]
 
#define X_CONF_USE_FLOATING_POINT_PRINTF   (0)
 x_printf系統の関数でfによる浮動小数点出力を使用可能にします。
 
#define X_CONF_USE_LOG_TIMESTAMP   (0)
 ログ出力に任意のタイムスタンプを付加します。 [詳解]
 
#define X_CONF_USE_USER_CONFIG   (0)
 カスタムコンフィギュレーションを定義したヘッダファイルをincludeする かどうかを指定します [詳解]
 
#define X_CONF_USLEEP_IMPL_TYPE   X_USLEEP_IMPL_TYPE_UDELAY
 x_port_usleep()の実装方法を設定します [詳解]
 
#define X_CONF_VERB_HEADER   "[VERB]"
 VERBOSEレベルのログヘッダ文字列を指定します。
 
#define X_CONF_WARN_HEADER   "[WARN]"
 WARNINGレベルのログヘッダ文字列を指定します。
 
#define X_CONF_XFS_TYPE   X_XFS_TYPE_UNION_FS
 標準のファイルシステムタイプを指定します [詳解]
 
#define X_GETTIMEOFDAY_IMPL_TYPE_POSIX   (2)
 
#define X_GETTIMEOFDAY_IMPL_TYPE_USERPORT   (1)
 
#define X_GETTIMEOFDAY_IMPL_TYPE_ZERO   (0)
 
#define X_MDELAY_IMPL_TYPE_POSIX_NANOSLEEP   (2)
 
#define X_MDELAY_IMPL_TYPE_TICKS_BUSYWAIT   (0)
 
#define X_MDELAY_IMPL_TYPE_USERPORT   (1)
 
#define X_MSLEEP_IMPL_TYPE_MDELAY   (0)
 
#define X_MSLEEP_IMPL_TYPE_POSIX_NANOSLEEP   (2)
 
#define X_MSLEEP_IMPL_TYPE_USERPORT   (1)
 
#define X_TICKS_NOW_IMPL_TYPE_GETTIMEOFDAY   (0)
 
#define X_TICKS_NOW_IMPL_TYPE_USERPORT   (1)
 
#define X_UDELAY_IMPL_TYPE_POSIX_NANOSLEEP   (2)
 
#define X_UDELAY_IMPL_TYPE_TICKS_BUSYWAIT   (0)
 
#define X_UDELAY_IMPL_TYPE_USERPORT   (1)
 
#define X_USLEEP_IMPL_TYPE_POSIX_NANOSLEEP   (2)
 
#define X_USLEEP_IMPL_TYPE_UDELAY   (0)
 
#define X_USLEEP_IMPL_TYPE_USERPORT   (1)
 
#define X_xFS_TYPE_SINGLE_FS   (1)
 
#define X_XFS_TYPE_UNION_FS   (0)
 

詳解

picoxライブラリのコンパイル時コンフィギュレーション

マクロ定義詳解

#define X_CONF_BYTE_ORDER   X_BYTE_ORDER_UNKNOWN

CPUのバイトオーダーを指定します。

以下の値が指定可能です。CPUのバイトオーダーを指定していると、一部関数の実行 効率が上がります。

  • X_BYTE_ORDER_LITTLE (リトルエンディアン)
  • X_BYTE_ORDER_BIG (ビッグエンディアン)
  • X_BYTE_ORDER_UNKNOWN (不明)
#define X_CONF_FILE_NAME_MAX   (32)

NULL終端を含むファイル名の最大バイト数を指定します

X_CONF_FILE_PATH_MAXと同様に、スタックサイズに注意してください。

#define X_CONF_FILE_PATH_MAX   (128)

NULL終端を含むファイルパスの最大バイト数を指定します

filesystemモジュールの関数内では、X_CONF_FILE_PATH_MAXバイトの ローカル変数を多数使用するため、メモリ制約の厳しい組込みシステムではスタック サイズに注意する必要があります。

ファイル関数を使用する場合は、最低でもX_CONF_FILE_PATH_MAX * 3バイト程度のス タックを用意しておく確保しておいてください。

マルチスレッド環境ではファイル関数を呼び出すスレッドを限定しておくとメモリの 節約となります。

#define X_CONF_GETTIMEOFDAY_IMPL_TYPE   X_GETTIMEOFDAY_IMPL_TYPE_ZERO

x_port_gettimeofday()の実装方法を設定します

設定可能な値は以下の通りです

  • X_GETTIMEOFDAY_IMPL_TYPE_ZERO (default)
    常に0を返すダミー実装です
  • X_GETTIMEOFDAY_IMPL_TYPE_USERPORT
    x_port_gettimeofday()をユーザー自身が実装します
  • X_GETTIMEOFDAY_IMPL_TYPE_POSIX
    POSIX標準のgettimeofday()を使用します
#define X_CONF_LINE_MAX   (128)

1行のNULL終端を含む最大文字数を指定します

char[X_CONF_LINE_MAX]がスタックに確保される場合を考慮して適切な値を指定して ください

#define X_CONF_LOG_LEVEL   X_LOG_LEVEL_INFO

ログ出力レベルを設定します。

指定可能な値は以下の通りです。

  • X_LOG_LEVEL_VERB (優先度 低)
  • X_LOG_LEVEL_INFO
  • X_LOG_LEVEL_NOTI
  • X_LOG_LEVEL_WARN
  • X_LOG_LEVEL_ERR (優先度 高)

指定優先度未満のログは、X_CONF_USE_DYNAMIC_LOG_SUPPRESSが未定義であれば、コ ンパイル時に除去されます。

#define X_CONF_LOG_TIMESTAMP_BUF_SIZE   (32)

タイムスタンプ文字列('\0'含む)の最大値を指定します

指定なしの場合は、32がデフォルト値となります。x_port_stimestamp()にはここで 指定した値が渡されます。

参照
X_CONF_USE_LOG_TIMESTAMP
#define X_CONF_MDELAY_IMPL_TYPE   X_MDELAY_IMPL_TYPE_TICKS_BUSYWAIT

x_port_mdelay()の実装方法を設定します

sleepよりも微小な待ち時間に対して使用することを想定しており、呼び 出し側はsleepよりも精度がよいことを期待します。

設定可能な値は以下の通りです

  • X_MDELAY_IMPL_TYPE_TICKS_BUSYWAIT (default)
    x_ticks_now()を使用したビジーウエイトで実装します
  • X_MDELAY_IMPL_TYPE_USERPORT
    x_port_mdelay()をユーザー自身が実装します
  • X_MDELAY_IMPL_TYPE_POSIX_NANOSLEEP
    PISIX標準のnanosleep()を使用します
#define X_CONF_MSLEEP_IMPL_TYPE   X_MSLEEP_IMPL_TYPE_MDELAY

x_port_msleep()の実装方法を設定します

設定可能な値は以下の通りです

  • X_MSLEEP_IMPL_TYPE_MDELAY (default)
    x_mdelay()を使用して実装します
  • X_MSLEEP_IMPL_TYPE_USERPORT
    x_port_msleep()をユーザー自身が実装します
  • X_MSLEEP_IMPL_TYPE_POSIX_NANOSLEEP
    PISIX標準のnanosleep()を使用します
#define X_CONF_TICKS_NOW_IMPL_TYPE   X_TICKS_NOW_IMPL_TYPE_GETTIMEOFDAY

x_port_ticks_now()の実装方法を設定します

picox自身はチック割り込みに関与しません。ユーザーが定義したチックの周期を picoxが知るために必要な設定値です。

設定可能な値は以下の通りです

  • X_TICKS_NOW_IMPL_TYPE_GETTIMEOFDAY (default)
    x_port_ticks_now()を、x_gettimeofday()を使用して実装します。ホスト環境で のデバッグ時や、組込みLinuxで使用する場合を想定した設定です
  • X_TICKS_NOW_IMPL_TYPE_USERPORT x_port_ticks_now()をユーザー自身が実装します
#define X_CONF_UDELAY_IMPL_TYPE   X_UDELAY_IMPL_TYPE_TICKS_BUSYWAIT

x_port_udelay()の実装方法を設定します

x_mdelay()と同じく、x_udelay()よりも精度のよい待ちを期待します

設定可能な値は以下の通りです

  • X_UDELAY_IMPL_TYPE_TICKS_BUSYWAIT (default)
    x_ticks_now()を使用したビジーウエイトで実装します
  • X_UDELAY_IMPL_TYPE_USERPORT
    x_port_udelay()をユーザー自身が実装します
  • X_UDELAY_IMPL_TYPE_POSIX_NANOSLEEP
    PISIX標準のnanosleep()を使用します
#define X_CONF_USE_ANSI_COLOR_LOG   (1)

ログ出力時に、各レベルに応じて色をつけます。

ログ表示端末がANSIカラーシーケンスに対応していない場合は、表示崩れになるので 注意してください。

参照
https://en.wikipedia.org/wiki/ANSI_escape_code
#define X_CONF_USE_DETECT_MALLOC_NULL   (0)

picoxライブラリで何らかの動的メモリ確保失敗をX_ASSERT()で検出します。

組込みプログラムでは動的メモリ確保に失敗しないように設計することが普通なので まじめにNULLチェックをするより、メモリ不足 == バグ or 設計ミスとして即死させ た方が楽かもしれません。

#define X_CONF_USE_DYNAMIC_LOG_SUPPRESS   (0)

ログ出力レベルの実行時変更機能を使用します。

x_set_log_level()でログレベルを指定し、指定レベル未満のログは、出力されませ ん。

#define X_CONF_USE_LOG_TIMESTAMP   (0)

ログ出力に任意のタイムスタンプを付加します。

この設定を有効にした場合は以下の関数を実装する必要があります。

1 void x_port_stimestamp(char* dst, size_t size)
#define X_CONF_USE_USER_CONFIG   (0)

カスタムコンフィギュレーションを定義したヘッダファイルをincludeする かどうかを指定します

picoxを含む外部ライブラリを使用する時は、管理上あまりファイルを編集したくな いものです。

この設定値が0でない場合は、picox_config.hという設定ファイルをincludeするので 、プレデファインオプションで1に設定し、picox_config.hに変更したい項目だけ定 義すると、picoxのファイルを直接編集することなくカスタマイズが可能です。

#define X_CONF_USLEEP_IMPL_TYPE   X_USLEEP_IMPL_TYPE_UDELAY

x_port_usleep()の実装方法を設定します

設定可能な値は以下の通りです

  • X_USLEEP_IMPL_TYPE_MDELAY (default)
    x_udelay()を使用して実装します
  • X_USLEEP_IMPL_TYPE_USERPORT
    x_port_usleep()をユーザー自身が実装します
  • X_USLEEP_IMPL_TYPE_POSIX_NANOSLEEP
    PISIX標準のnanosleep()を使用します
#define X_CONF_XFS_TYPE   X_XFS_TYPE_UNION_FS

標準のファイルシステムタイプを指定します

アプリケーションの特性に合わせて以下のどちらかを指定してください

  • X_XFS_TYPE_UNION_FS (xunionfsを使用する)
  • X_XFS_TYPE_SINGLE_FS (xsinglefsを使用する)

xunionfsとxsinglefsは初期化部分と一部の関数以外は共通のインターフェースをも っています。例えばX_XFS_TYPE_UNION_FSを指定すると、xfs_open()は xunionfs_open()ににdefineで置換されます。

xunionfsは複数の仮想ファイルシステムを共通のディレクトリツリーにマウントする 機能を提供しますが、余分な処理が増えるため、コードサイズや実行時間が増大しま す。

xsinglefsは単一の仮想ファイルシステムだけを扱います。xunionfsに比べて低機能 ですが、余分なオーバーヘッドがありません。

#define X_GETTIMEOFDAY_IMPL_TYPE_POSIX   (2)
#define X_GETTIMEOFDAY_IMPL_TYPE_USERPORT   (1)
#define X_GETTIMEOFDAY_IMPL_TYPE_ZERO   (0)
#define X_MDELAY_IMPL_TYPE_POSIX_NANOSLEEP   (2)
#define X_MDELAY_IMPL_TYPE_TICKS_BUSYWAIT   (0)
#define X_MDELAY_IMPL_TYPE_USERPORT   (1)
#define X_MSLEEP_IMPL_TYPE_MDELAY   (0)
#define X_MSLEEP_IMPL_TYPE_POSIX_NANOSLEEP   (2)
#define X_MSLEEP_IMPL_TYPE_USERPORT   (1)
#define X_TICKS_NOW_IMPL_TYPE_GETTIMEOFDAY   (0)
#define X_TICKS_NOW_IMPL_TYPE_USERPORT   (1)
#define X_UDELAY_IMPL_TYPE_POSIX_NANOSLEEP   (2)
#define X_UDELAY_IMPL_TYPE_TICKS_BUSYWAIT   (0)
#define X_UDELAY_IMPL_TYPE_USERPORT   (1)
#define X_USLEEP_IMPL_TYPE_POSIX_NANOSLEEP   (2)
#define X_USLEEP_IMPL_TYPE_UDELAY   (0)
#define X_USLEEP_IMPL_TYPE_USERPORT   (1)