µITRON4.0 Specification
https://www.ertl.jp/ITRON/SPEC/mitron4-e.html
TOPPERS/SSP
https://www.toppers.jp/ssp-kernel.html
Drags files here, to add them to your repository
Yowza, that’s a lot of files. Try uploading fewer than 100 at a time.
Github
https://github.com/kaizen-nagoya/toppersssp
toppers/ssp upload
https://qiita.com/kaizen_nagoya/items/cffa0aaf2c029cef7334
include
itron.h
kernel.h
log_output.h
sil.h
t_stddef.h
t_syslog.h
itron.h
itron.h
/*
* TOPPERS Software
* Toyohashi Open Platform for Embedded Real-Time Systems
*
* Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
* Toyohashi Univ. of Technology, JAPAN
* Copyright (C) 2004-2008 by Embedded and Real-Time Systems Laboratory
* Graduate School of Information Science, Nagoya Univ., JAPAN
*
* 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
* ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
* 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
* (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
* 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
* スコード中に含まれていること.
* (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
* 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
* 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
* の無保証規定を掲載すること.
* (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
* 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
* と.
* (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
* 作権表示,この利用条件および下記の無保証規定を掲載すること.
* (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
* 報告すること.
* (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
* 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
* また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
* 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
* 免責すること.
*
* 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
* よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
* に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
* アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
* の責任を負わない.
*
* @(#) $Id: itron.h 1014 2008-05-10 08:28:40Z ertl-hiro $
*/
/*
* ITRON仕様共通規定のデータ型・定数・マクロ
*
* このヘッダファイルは,ITRON仕様共通規定のデータ型・定数・マクロの中
* で,TOPPERS共通ヘッダファイルに含まれないものの定義を含む.ITRON仕
* 様との互換性を必要とするアプリケーションがインクルードすることを想
* 定している.
*
* アセンブリ言語のソースファイルからこのファイルをインクルードする時
* は,TOPPERS_MACRO_ONLYを定義しておく.これにより,マクロ定義以外を
* 除くようになっている.
*/
#ifndef TOPPERS_ITRON_H
#define TOPPERS_ITRON_H
#ifdef __cplusplus
extern "C" {
#endif
/*
* TOPPERS共通ヘッダファイル
*/
#include "t_stddef.h"
/*
* ITRON仕様共通データ型
*/
#ifndef TOPPERS_MACRO_ONLY
#ifdef INT8_MAX
typedef int8_t B; /* 符号付き8ビット整数 */
#endif /* INT8_MAX */
#ifdef UINT8_MAX
typedef uint8_t UB; /* 符号無し8ビット整数 */
typedef uint8_t VB; /* 型が定まらない8ビットの値 */
#endif /* UINT8_MAX */
typedef int16_t H; /* 符号付き16ビット整数 */
typedef uint16_t UH; /* 符号無し16ビット整数 */
typedef uint16_t VH; /* 型が定まらない16ビットの値 */
typedef int32_t W; /* 符号付き32ビット整数 */
typedef uint32_t UW; /* 符号無し32ビット整数 */
typedef uint32_t VW; /* 型が定まらない32ビットの値 */
#ifdef INT64_MAX
typedef int64_t D; /* 符号付き64ビット整数 */
#endif /* INT64_MAX */
#ifdef UINT64_MAX
typedef uint64_t UD; /* 符号無し64ビット整数 */
typedef uint64_t VD; /* 型が定まらない64ビットの値 */
#endif /* UINT64_MAX */
typedef void *VP; /* 型が定まらないものへのポインタ */
typedef int_t INT; /* 自然なサイズの符号付き整数 */
typedef uint_t UINT; /* 自然なサイズの符号無し整数 */
typedef bool_t BOOL; /* 真偽値 */
typedef intptr_t VP_INT; /* ポインタまたは符号付き整数 */
#endif /* TOPPERS_MACRO_ONLY */
/*
* ITRON仕様共通定数
*/
#define TRUE true /* 真 */
#define FALSE false /* 偽 */
/*
* オブジェクト属性の定義
*/
#define TA_HLNG UINT_C(0x00) /* 高級言語用インタフェース */
#define TA_TFIFO UINT_C(0x00) /* タスクの待ち行列をFIFO順に */
#define TA_MFIFO UINT_C(0x00) /* メッセージキューをFIFO順に */
#define TA_WSGL UINT_C(0x00) /* 待ちタスクは1つのみ */
#define TA_DISINT UINT_C(0x00) /* 割込み要求禁止フラグをセット */
#define TA_LEVEL UINT_C(0x00) /* レベルトリガ */
/*
* ネスト回数の最大値
*/
#define TMAX_SUSCNT UINT_C(1) /* 強制待ち要求ネスト数の最大値 */
/*
* 強制待ち状態からの強制再開
*/
#define frsm_tsk(tskid) rsm_tsk(tskid)
#ifdef __cplusplus
}
#endif
#endif /* TOPPERS_ITRON_H */
kernel.h
kernel.h
/*
* TOPPERS/SSP Kernel
* Smallest Set Profile Kernel
*
* Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
* Toyohashi Univ. of Technology, JAPAN
* Copyright (C) 2004-2009 by Embedded and Real-Time Systems Laboratory
* Graduate School of Information Science, Nagoya Univ., JAPAN
* Copyright (C) 2010-2015 by Naoki Saito
* Nagoya Municipal Industrial Research Institute, JAPAN
* Copyright (C) 2010-2012 by Meika Sugimoto
*
* 上記著作権者は,以下の (1)~(4) の条件を満たす場合に限り,本ソフトウェ
* ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
* 再配布(以下,利用と呼ぶ)することを無償で許諾する.
* (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
* 表示,この利用条件および下記の無保証規定が,そのままの形でソース
* コード中に含まれていること.
* (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
* できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
* ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
* 証規定を掲載すること.
* (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
* できない形で再配布する場合には,次のいずれかの条件を満たすこと.
* (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
* 権表示,この利用条件および下記の無保証規定を掲載すること.
* (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
* 告すること.
* (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
* からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
* 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
* く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
*
* 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
* びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
* る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
* により直接的または間接的に生じたいかなる損害に関しても,その責任を負
* わない.
*
*/
/*
* TOPPERS/SSPカーネル 標準ヘッダファイル
*
* TOPPERS/SSPカーネルがサポートするサービスコールの宣言と,必要なデー
* タ型,定数,マクロの定義を含むヘッダファイル.
*
* アセンブリ言語のソースファイルからこのファイルをインクルードする時
* は,TOPPERS_MACRO_ONLYを定義しておく.これにより,マクロ定義以外を
* 除くようになっている.
*
* このファイルをインクルードする前にインクルードしておくべきファイル
* はない.
*/
#ifndef TOPPERS_KERNEL_H
#define TOPPERS_KERNEL_H
/*
* TOPPERS共通のデータ型・定数・マクロ
*/
#include <t_stddef.h>
/*
* ターゲット依存部
*/
#include "target_kernel.h"
#ifndef TOPPERS_MACRO_ONLY
/*
* データ型の定義
*/
/*
* ビットパターンやオブジェクト番号の型定義
*/
typedef uint_t INTNO; /* 割込み番号 */
typedef uint_t INHNO; /* 割込みハンドラ番号 */
typedef uint_t EXCNO; /* CPU例外ハンドラ番号 */
typedef unsigned long FLGPTN; /* イベントフラグパターン */
/*
* 処理単位の型定義
*/
typedef void (*TASK)(intptr_t exinf);
typedef void (*ISR)(intptr_t exinf);
typedef void (*INTHDR)(void);
typedef void (*EXCHDR)(void *p_excinf);
typedef void (*INIRTN)(intptr_t exinf);
typedef void (*TERRTN)(intptr_t exinf);
typedef void (*CYCHDR)(intptr_t exinf);
typedef void (*ALMHDR)(intptr_t exinf);
/*
* メモリ領域確保のための型定義
*/
#ifndef TOPPERS_STK_T
#define TOPPERS_STK_T intptr_t
#endif /* TOPPERS_STK_T */
typedef TOPPERS_STK_T STK_T; /* スタック領域を確保するための型 */
/*
* サービスコールの宣言
*/
/*
* タスク管理機能
*/
extern ER act_tsk(ID tskid);
extern ER iact_tsk(ID tskid);
/*
* 同期・通信機能
*/
/* データキュー */
extern ER psnd_dtq(ID dtqid, intptr_t data);
extern ER ipsnd_dtq(ID dtqid, intptr_t data);
extern ER prcv_dtq(ID dtqid, intptr_t *p_data);
/* イベントフラグ */
extern ER set_flg(ID flgid, FLGPTN setptn);
extern ER iset_flg(ID flgid, FLGPTN setptn);
extern ER clr_flg(ID flgid, FLGPTN clrptn);
extern ER pol_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn);
/*
* システム状態管理機能
*/
extern ER loc_cpu(void);
extern ER iloc_cpu(void);
extern ER unl_cpu(void);
extern ER iunl_cpu(void);
extern ER dis_dsp(void);
extern ER ena_dsp(void);
extern bool_t sns_ctx(void);
extern bool_t sns_loc(void);
extern bool_t sns_dsp(void);
extern bool_t sns_dpn(void);
extern bool_t sns_ker(void);
extern ER ext_ker(void);
/*
* 割込み管理機能
*/
extern ER dis_int(INTNO intno);
extern ER ena_int(INTNO intno);
/*
* 周期ハンドラ機能
*/
extern ER sta_cyc(ID cycid);
extern ER stp_cyc(ID cycid);
/*
* アラームハンドラ機能
*/
extern ER sta_alm(ID almid , RELTIM almtim);
extern ER ista_alm(ID almid , RELTIM almtim);
extern ER stp_alm(ID almid);
extern ER istp_alm(ID almid);
/*
* システム時刻管理機能
*/
extern ER get_tim(SYSTIM *p_systim);
#endif /* TOPPERS_MACRO_ONLY */
/*
* オブジェクト属性の定義
*/
#define TA_RSTR UINT_C(0x04) /* 制約タスク */
#define TA_CLR UINT_C(0x04) /* イベントフラグのクリア指定 */
#define TA_ACT UINT_C(0x02) /* タスクを起動された状態で生成 */
#define TA_STA UINT_C(0x02) /* 周期ハンドラを動作状態で生成 */
#define TA_NONKERNEL UINT_C(0x02) /* カーネル管理外の割込み */
#define TA_ENAINT UINT_C(0x01) /* 割込み要求禁止フラグをクリア */
#define TA_EDGE UINT_C(0x02) /* エッジトリガ */
/*
* サービスコールの動作モードの定義
*/
#define TWF_ORW UINT_C(0x01) /* イベントフラグのOR待ち */
#define TWF_ANDW UINT_C(0x02) /* イベントフラグのAND待ち */
/*
* その他の定数の定義
*/
#define TSK_SELF 0 /* 自タスク指定 */
#define TSK_NONE 0 /* 該当するタスクがない */
#define TPRI_INI 0 /* タスクの起動時優先度 */
#define TIPM_ENAALL 0 /* 割込み優先度マスク全解除 */
/*
* 構成定数とマクロ
*/
/*
* 優先度の範囲
*/
#define TMIN_TPRI 1 /* タスク優先度の最小値(最高値)*/
#ifndef TMAX_TPRI
#define TMAX_TPRI 16 /* タスク優先度の最大値(最低値)*/
#elif (TMAX_TPRI != 8) && (TMAX_TPRI != 16)
#error "TMAX_TPRI must defined 8 or 16."
#endif /* TMAX_TPRI */
#define TMIN_ISRPRI 1 /* 割込みサービスルーチン優先度の最小値 */
#ifndef TMAX_ISRPRI
#define TMAX_ISRPRI 16 /* 割込みサービスルーチン優先度の最大値 */
#elif (TMAX_ISRPRI != 8) && (TMAX_ISRPRI != 16)
#error "TMAX_ISRPRI must defined 8 or 16."
#endif /* TMAX_ISRPRI */
/*
* バージョン情報
*/
#define TKERNEL_MAKER UINT_C(0x0118) /* カーネルのメーカーコード */
#define TKERNEL_PRID UINT_C(0x0007) /* カーネルの識別番号 */
#define TKERNEL_SPVER UINT_C(0xf511) /* カーネル仕様のバージョン番号 */
#define TKERNEL_PRVER UINT_C(0x1030) /* カーネルのバージョン番号 */
/*
* キューイング回数の最大値
*/
#define TMAX_ACTCNT UINT_C(1) /* 起動要求キューイング数の最大値 */
/*
* ビットパターンのビット数
*/
#ifndef TBIT_FLGPTN /* イベントフラグのビット数 */
#define TBIT_FLGPTN (sizeof(FLGPTN) * CHAR_BIT)
#endif /* TBIT_FLGPTN */
/*
* メモリ領域確保のためのマクロ
*
* 以下のTOPPERS_COUNT_SZとTOPPERS_ROUND_SZの定義は,unitが2の巾乗であ
* ることを仮定している.
*/
#ifndef TOPPERS_COUNT_SZ
#define TOPPERS_COUNT_SZ(sz, unit) (((sz) + (unit) - 1) / (unit))
#endif /* TOPPERS_COUNT_SZ */
#ifndef TOPPERS_ROUND_SZ
#define TOPPERS_ROUND_SZ(sz, unit) (((sz) + (unit) - 1) & ~((unit) - 1))
#endif /* TOPPERS_ROUND_SZ */
#define COUNT_STK_T(sz) TOPPERS_COUNT_SZ((sz), sizeof(STK_T))
#define ROUND_STK_T(sz) TOPPERS_ROUND_SZ((sz), sizeof(STK_T))
/*
* その他の構成定数
*/
#define TMAX_MAXCYC UINT_C(16) /* 周期ハンドラの最大数 */
#define TMAX_MAXALM UINT_C(16) /* アラームハンドラの最大数 */
#endif /* TOPPERS_KERNEL_H */
log_output.h
log_output.h
/*
* TOPPERS Software
* Toyohashi Open Platform for Embedded Real-Time Systems
*
* Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
* Toyohashi Univ. of Technology, JAPAN
* Copyright (C) 2004-2008 by Embedded and Real-Time Systems Laboratory
* Graduate School of Information Science, Nagoya Univ., JAPAN
* Copyright (C) 2015 by Naoki Saito
* Nagoya Municipal Industrial Research Institute, JAPAN
*
* 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
* ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
* 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
* (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
* 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
* スコード中に含まれていること.
* (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
* 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
* 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
* の無保証規定を掲載すること.
* (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
* 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
* と.
* (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
* 作権表示,この利用条件および下記の無保証規定を掲載すること.
* (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
* 報告すること.
* (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
* 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
* また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
* 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
* 免責すること.
*
* 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
* よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
* に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
* アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
* の責任を負わない.
*
* @(#) $Id: log_output.h 1176 2008-07-01 10:24:46Z ertl-hiro $
*/
/*
* システムログのフォーマット出力
*/
#ifndef TOPPERS_LOG_OUTPUT_H
#define TOPPERS_LOG_OUTPUT_H
#ifdef __cplusplus
extern "C" {
#endif
#include <t_syslog.h>
/*
* 文字列整形出力
*
* formatで指定されるフォーマット記述とp_argsで指定される引数列から作
* 成したメッセージを,1文字出力関数putcを用いて出力する.
*/
extern void syslog_printf(const char *format, const intptr_t *p_args,
void (*putc)(char)) throw();
/*
* ログ情報の出力
*
* p_syslogで指定されるログ情報を文字列に整形し,1文字出力関数putcを用
* いて出力する.
*/
extern void syslog_print(const SYSLOG *p_syslog, void (*putc)(char)) throw();
/*
* ログ情報喪失メッセージ文字列
*
* lost個のログ情報が失われた旨のメッセージを,1文字出力関数putcを用い
* て出力する.
*/
extern void syslog_lostmsg(uint_t lost, void (*putc)(char)) throw();
#ifdef __cplusplus
}
#endif
#endif /* TOPPERS_LOG_OUTPUT_H */
sil.h
sil.h
/*
* TOPPERS Software
* Toyohashi Open Platform for Embedded Real-Time Systems
*
* Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
* Toyohashi Univ. of Technology, JAPAN
* Copyright (C) 2004-2008 by Embedded and Real-Time Systems Laboratory
* Graduate School of Information Science, Nagoya Univ., JAPAN
* Copyright (C) 2015 by Naoki Saito
* Nagoya Municipal Industrial Research Institute, JAPAN
*
* 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
* ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
* 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
* (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
* 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
* スコード中に含まれていること.
* (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
* 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
* 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
* の無保証規定を掲載すること.
* (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
* 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
* と.
* (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
* 作権表示,この利用条件および下記の無保証規定を掲載すること.
* (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
* 報告すること.
* (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
* 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
* また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
* 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
* 免責すること.
*
* 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
* よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
* に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
* アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
* の責任を負わない.
*
* @(#) $Id: sil.h 883 2008-04-11 10:45:20Z hiro $
*/
/*
* システムインタフェースレイヤ
*
* システムインタフェースレイヤのサービスコールの定義・宣言とマクロな
* どの定義を含むヘッダファイル.
*
* アセンブリ言語のソースファイルからこのファイルをインクルードする時
* は,TOPPERS_MACRO_ONLYを定義しておくことで,マクロ定義以外の記述を
* 除くことができる.
*
* このファイルをインクルードする前にインクルードしておくべきファイル
* はない.
*/
#ifndef TOPPERS_SIL_H
#define TOPPERS_SIL_H
#ifdef __cplusplus
extern "C" {
#endif
/*
* TOPPERS共通のデータ型・定数・マクロ
*/
#include <t_stddef.h>
/*
* ターゲット依存部
*/
#include "target_sil.h"
#ifndef TOPPERS_MACRO_ONLY
/*
* 全割込みロック状態の制御
*
* SIL_PRE_LOC,SIL_LOC_INT(),SIL_UNL_INT()は,ターゲット依存部で用
* 意する.デフォルトの定義は用意していない.
*/
/*
* 微少時間待ち
*/
extern void sil_dly_nse(ulong_t dlytim) throw();
/*
* エンディアンの反転
*/
#ifndef TOPPERS_SIL_REV_ENDIAN_UINT16
#define TOPPERS_SIL_REV_ENDIAN_UINT16(data) \
((((data) & 0xffU) << 8U) | (((data) >> 8U) & 0xffU))
#endif /* TOPPERS_SIL_REV_ENDIAN_UINT16 */
#ifndef TOPPERS_SIL_REV_ENDIAN_UINT32
#define TOPPERS_SIL_REV_ENDIAN_UINT32(data) \
((((data) & 0xffU) << 24U) | (((data) & 0xff00U) << 8U) \
| (((data) >> 8U) & 0xff00U) | (((data) >> 24U) & 0xffU))
#endif /* TOPPERS_SIL_REV_ENDIAN_UINT32 */
/*
* メモリ空間アクセス関数
*/
#ifndef TOPPERS_OMIT_SIL_ACCESS
/*
* 8ビット単位の読出し/書込み
*/
#ifdef UINT8_MAX
Inline uint8_t
sil_reb_mem(void *mem)
{
uint8_t data;
data = *((volatile uint8_t *) mem);
return(data);
}
Inline void
sil_wrb_mem(void *mem, uint8_t data)
{
*((volatile uint8_t *) mem) = data;
}
#endif /* UINT8_MAX */
/*
* 16ビット単位の読出し/書込み
*/
Inline uint16_t
sil_reh_mem(void *mem)
{
uint16_t data;
data = *((volatile uint16_t *) mem);
return(data);
}
Inline void
sil_wrh_mem(void *mem, uint16_t data)
{
*((volatile uint16_t *) mem) = data;
}
#ifdef SIL_ENDIAN_BIG /* ビッグエンディアンプロセッサ */
#define sil_reh_bem(mem) sil_reh_mem(mem)
#define sil_wrh_bem(mem, data) sil_wrh_mem(mem, data)
#ifndef TOPPERS_OMIT_SIL_REH_LEM
Inline uint16_t
sil_reh_lem(void *mem)
{
uint16_t data;
data = *((volatile uint16_t *) mem);
return(TOPPERS_SIL_REV_ENDIAN_UINT16(data));
}
#endif /* TOPPERS_OMIT_SIL_REH_LEM */
#ifndef TOPPERS_OMIT_SIL_WRH_LEM
Inline void
sil_wrh_lem(void *mem, uint16_t data)
{
*((volatile uint16_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT16(data);
}
#endif /* TOPPERS_OMIT_SIL_WRH_LEM */
#else /* SIL_ENDIAN_BIG */ /* リトルエンディアンプロセッサ */
#define sil_reh_lem(mem) sil_reh_mem((mem))
#define sil_wrh_lem(mem, data) sil_wrh_mem((mem), (data))
#ifndef TOPPERS_OMIT_SIL_REH_BEM
Inline uint16_t
sil_reh_bem(void *mem)
{
uint16_t data;
data = *((volatile uint16_t *) mem);
return(TOPPERS_SIL_REV_ENDIAN_UINT16(data));
}
#endif /* TOPPERS_OMIT_SIL_REH_BEM */
#ifndef TOPPERS_OMIT_SIL_WRH_BEM
Inline void
sil_wrh_bem(void *mem, uint16_t data)
{
*((volatile uint16_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT16(data);
}
#endif /* TOPPERS_OMIT_SIL_WRH_BEM */
#endif /* SIL_ENDIAN_BIG */
/*
* 32ビット単位の読出し/書込み
*/
Inline uint32_t
sil_rew_mem(void *mem)
{
uint32_t data;
data = *((volatile uint32_t *) mem);
return(data);
}
Inline void
sil_wrw_mem(void *mem, uint32_t data)
{
*((volatile uint32_t *) mem) = data;
}
#ifdef SIL_ENDIAN_BIG /* ビッグエンディアンプロセッサ */
#define sil_rew_bem(mem) sil_rew_mem(mem)
#define sil_wrw_bem(mem, data) sil_wrw_mem(mem, data)
#ifndef TOPPERS_OMIT_SIL_REW_LEM
Inline uint32_t
sil_rew_lem(void *mem)
{
uint32_t data;
data = *((volatile uint32_t *) mem);
return(TOPPERS_SIL_REV_ENDIAN_UINT32(data));
}
#endif /* TOPPERS_OMIT_SIL_REW_LEM */
#ifndef TOPPERS_OMIT_SIL_WRW_LEM
Inline void
sil_wrw_lem(void *mem, uint32_t data)
{
*((volatile uint32_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT32(data);
}
#endif /* TOPPERS_OMIT_SIL_WRW_LEM */
#else /* SIL_ENDIAN_BIG */ /* リトルエンディアンプロセッサ */
#define sil_rew_lem(mem) sil_rew_mem((mem))
#define sil_wrw_lem(mem, data) sil_wrw_mem((mem), (data))
#ifndef TOPPERS_OMIT_SIL_REW_BEM
Inline uint32_t
sil_rew_bem(void *mem)
{
uint32_t data;
data = *((volatile uint32_t *) mem);
return(TOPPERS_SIL_REV_ENDIAN_UINT32(data));
}
#endif /* TOPPERS_OMIT_SIL_REW_BEM */
#ifndef TOPPERS_OMIT_SIL_WRW_BEM
Inline void
sil_wrw_bem(void *mem, uint32_t data)
{
*((volatile uint32_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT32(data);
}
#endif /* TOPPERS_OMIT_SIL_WRW_BEM */
#endif /* SIL_ENDIAN_BIG */
#endif /* TOPPERS_OMIT_SIL_ACCESS */
#endif /* TOPPERS_MACRO_ONLY */
#ifdef __cplusplus
}
#endif
#endif /* TOPPERS_SIL_H */
t_stddef.h
t_stddef.h
/*
* TOPPERS Software
* Toyohashi Open Platform for Embedded Real-Time Systems
*
* Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
* Toyohashi Univ. of Technology, JAPAN
* Copyright (C) 2004-2009 by Embedded and Real-Time Systems Laboratory
* Graduate School of Information Science, Nagoya Univ., JAPAN
* Copyright (C) 2015 by Naoki Saito
* Nagoya Municipal Industrial Research Institute, JAPAN
*
* 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
* ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
* 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
* (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
* 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
* スコード中に含まれていること.
* (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
* 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
* 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
* の無保証規定を掲載すること.
* (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
* 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
* と.
* (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
* 作権表示,この利用条件および下記の無保証規定を掲載すること.
* (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
* 報告すること.
* (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
* 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
* また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
* 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
* 免責すること.
*
* 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
* よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
* に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
* アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
* の責任を負わない.
*
* @(#) $Id: t_stddef.h 1513 2009-04-22 07:35:20Z ertl-hiro $
*/
/*
* TOPPERS共通ヘッダファイル
*
* TOPPERS関連のすべてのソースファイルでインクルードすべきヘッダファイ
* ル.各種のカーネルやソフトウェア部品で共通に用いることを想定してい
* る.TOPPERSの各種のカーネルやソフトウェア部品で共通に用いるデータ型,
* 定数,マクロの定義などを含む.
*
* アセンブリ言語のソースファイルからこのファイルをインクルードする時
* は,TOPPERS_MACRO_ONLYを定義しておく.これにより,マクロ定義以外を
* 除くようになっている.
*
* このファイルをインクルードする前にインクルードしておくべきファイル
* はない.
*/
#ifndef TOPPERS_T_STDDEF_H
#define TOPPERS_T_STDDEF_H
#ifdef __cplusplus
extern "C" {
#endif
/*
* ターゲット依存部
*/
#include "target_stddef.h"
/*
* C言語/EC++でthrow()に対処するための定義
*/
#if !defined(__cplusplus) || defined(__embedded_cplusplus)
#define throw()
#endif
#ifndef TOPPERS_MACRO_ONLY
/*
* ターゲット依存のデータ型のマクロのデフォルト定義
*/
#ifndef TOPPERS_bool
#define TOPPERS_bool int /* ブール型 */
#endif /* TOPPERS_bool */
#ifndef TOPPERS_size
#define TOPPERS_size uintptr_t /* サイズ型 */
#endif /* TOPPERS_size */
#ifndef TOPPERS_fp
struct TOPPERS_dummy_t { int TOPPERS_dummy_field; };
typedef void (*TOPPERS_fp_t)(struct TOPPERS_dummy_t);
#define TOPPERS_fp TOPPERS_fp_t /* プログラムの起動番地 */
#endif /* TOPPERS_fp */
/*
* 共通データ型
*/
typedef TOPPERS_bool bool_t; /* 真偽値 */
typedef signed int int_t; /* 自然なサイズの符号付き整数 */
typedef unsigned int uint_t; /* 自然なサイズの符号無し整数 */
typedef signed long long_t; /* 長めのサイズの符号付き整数 */
typedef unsigned long ulong_t; /* 長めのサイズの符号無し整数 */
typedef int_t FN; /* 機能コード */
typedef int_t ER; /* エラーコード */
typedef int_t ID; /* オブジェクトのID番号 */
typedef uint_t ATR; /* オブジェクトの属性 */
typedef uint_t STAT; /* オブジェクトの状態 */
typedef uint_t MODE; /* サービスコールの動作モード */
typedef int_t PRI; /* 優先度 */
typedef TOPPERS_size SIZE; /* メモリ領域のサイズ */
typedef int_t TMO; /* タイムアウト指定 */
typedef uint_t RELTIM; /* 相対時間 */
typedef ulong_t SYSTIM; /* システム時刻 */
typedef ulong_t SYSUTM; /* 性能評価用システム時刻 */
typedef TOPPERS_fp FP; /* プログラムの起動番地 */
typedef int_t ER_BOOL; /* エラーコードまたは真偽値 */
typedef int_t ER_ID; /* エラーコードまたはID番号 */
typedef int_t ER_UINT; /* エラーコードまたは符号無し整数 */
typedef uint32_t ACPTN; /* アクセス許可パターン */
typedef struct acvct { /* アクセス許可ベクタ */
ACPTN acptn1; /* 通常操作1のアクセス許可パターン */
ACPTN acptn2; /* 通常操作2のアクセス許可パターン */
ACPTN acptn3; /* 管理操作のアクセス許可パターン */
ACPTN acptn4; /* 参照操作のアクセス許可パターン */
} ACVCT;
#endif /* TOPPERS_MACRO_ONLY */
/*
* 整数定数を作るマクロ
*/
#ifndef UINT_C
#define UINT_C(val) (val ## U) /* uint_t型の定数を作るマクロ */
#endif /* UINT_C */
#ifndef ULONG_C
#define ULONG_C(val) (val ## UL) /* ulong_t型の定数を作るマクロ */
#endif /* ULONG_C */
/*
* 一般定数
*/
#ifndef NULL
#define NULL 0 /* 無効ポインタ */
#endif /* NULL */
#ifndef true
#define true 1 /* 真 */
#endif /* true */
#ifndef false
#define false 0 /* 偽 */
#endif /* false */
#define E_OK 0 /* 正常終了 */
/*
* メインエラーコード
*/
#define E_SYS (-5) /* システムエラー */
#define E_NOSPT (-9) /* 未サポート機能 */
#define E_RSFN (-10) /* 予約機能コード */
#define E_RSATR (-11) /* 予約属性 */
#define E_PAR (-17) /* パラメータエラー */
#define E_ID (-18) /* 不正ID番号 */
#define E_CTX (-25) /* コンテキストエラー */
#define E_MACV (-26) /* メモリアクセス違反 */
#define E_OACV (-27) /* オブジェクトアクセス違反 */
#define E_ILUSE (-28) /* サービスコール不正使用 */
#define E_NOMEM (-33) /* メモリ不足 */
#define E_NOID (-34) /* ID番号不足 */
#define E_NORES (-35) /* 資源不足 */
#define E_OBJ (-41) /* オブジェクト状態エラー */
#define E_NOEXS (-42) /* オブジェクト未生成 */
#define E_QOVR (-43) /* キューイングオーバーフロー */
#define E_RLWAI (-49) /* 待ち状態の強制解除 */
#define E_TMOUT (-50) /* ポーリング失敗またはタイムアウト */
#define E_DLT (-51) /* 待ちオブジェクトの削除 */
#define E_CLS (-52) /* 待ちオブジェクトの状態変化 */
#define E_WBLK (-57) /* ノンブロッキング受付け */
#define E_BOVR (-58) /* バッファオーバーフロー */
/*
* オブジェクト属性
*/
#define TA_NULL UINT_C(0) /* オブジェクト属性を指定しない */
/*
* タイムアウト指定
*/
#define TMO_POL 0 /* ポーリング */
#define TMO_FEVR (-1) /* 永久待ち */
#define TMO_NBLK (-2) /* ノンブロッキング */
/*
* アクセス許可パターン
*/
#define TACP_KERNEL (0U) /* カーネルドメインだけにアクセスを許可 */
#define TACP_SHARED (~0U) /* すべてのドメインからアクセスを許可 */
/*
* 型に関する情報を取り出すためのマクロ
*/
#ifndef offsetof
#define offsetof(structure, field) ((uintptr_t) &(((structure *) 0)->field))
#endif /* offsetof */
#ifndef alignof
#define alignof(type) offsetof(struct { char field1; type field2; }, field2)
#endif /* alignof */
#ifndef ALIGN_TYPE /* アラインメントのチェック */
#define ALIGN_TYPE(addr, type) \
((((uintptr_t)(addr)) & (alignof(type) - 1)) == 0U)
#endif /* ALIGN_TYPE */
/*
* assertマクロ
*/
#undef assert
#ifndef NDEBUG
#define assert(exp) ((void)((exp) ? 0 : (TOPPERS_assert_fail(#exp, \
__FILE__, __LINE__), TOPPERS_assert_abort(), 0)))
#else /* NDEBUG */
#define assert(exp) ((void) 0)
#endif /* NDEBUG */
#ifdef __cplusplus
}
#endif
/*
* エラーコード生成・分解マクロ
*
* 以下のマクロ定義は,符号付き整数が2の補数で表現されており,右シフト
* 演算子(>>)が算術シフトされることを仮定している.そうでない開発環
* 境では,target_stddef.hでこれらの定義を上書きしなければならない.
*
* MERCDマクロの定義は,メインエラーコードが負であることを仮定している.
* そうでない場合,2つの定義が一致しなくなる.
*/
#ifndef ERCD
#define ERCD(mercd, sercd) \
((ER)(((((uint_t) (sercd))) << 8) | ((((uint_t) (mercd))) & 0xffU)))
#endif /* ERCD */
#ifndef MERCD
#ifdef INT8_MAX
#define MERCD(ercd) ((ER)((int8_t)(ercd)))
#else /* INT8_MAX */
#define MERCD(ercd) ((ER)((((uint_t) (ercd))) | ~0xffU))
#endif /* INT8_MAX */
#endif /* MERCD */
#ifndef SERCD
#define SERCD(ercd) ((ER)((ercd) >> 8))
#endif /* SERCD */
/*
* 相対時間(RELTIM)に指定できる最大値
*/
#if UINT_MAX < LONG_MAX
#define TMAX_RELTIM ((RELTIM) UINT_MAX)
#else /* UINT_MAX < LONG_MAX */
#define TMAX_RELTIM ((RELTIM) LONG_MAX)
#endif /* UINT_MAX < LONG_MAX */
#endif /* TOPPERS_T_STDDEF_H */
t_syslog.h
t_syslog.h
/*
* TOPPERS/ASP Kernel
* Toyohashi Open Platform for Embedded Real-Time Systems/
* Advanced Standard Profile Kernel
*
* Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
* Toyohashi Univ. of Technology, JAPAN
* Copyright (C) 2004-2008 by Embedded and Real-Time Systems Laboratory
* Graduate School of Information Science, Nagoya Univ., JAPAN
*
* 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
* ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
* 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
* (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
* 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
* スコード中に含まれていること.
* (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
* 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
* 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
* の無保証規定を掲載すること.
* (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
* 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
* と.
* (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
* 作権表示,この利用条件および下記の無保証規定を掲載すること.
* (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
* 報告すること.
* (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
* 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
* また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
* 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
* 免責すること.
*
* 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
* よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
* に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
* アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
* の責任を負わない.
*
* @(#) $Id: t_syslog.h 1900 2010-08-14 02:31:44Z ertl-hiro $
*/
/*
* システムログ出力を行うための定義
*
* システムログサービスは,システムのログ情報を出力するためのサービス
* である.カーネルからのログ情報の出力にも用いるため,内部で待ち状態
* にはいることはない.
*
* ログ情報は,カーネル内のログバッファに書き込むか,低レベルの文字出
* 力関数を用いて出力する.どちらを使うかは,拡張サービスコールで切り
* 換えることができる.
*
* ログバッファ領域がオーバフローした場合には,古いログ情報を消して上
* 書きする.
*
* アセンブリ言語のソースファイルからこのファイルをインクルードする時
* は,TOPPERS_MACRO_ONLYを定義しておくことで,マクロ定義以外の記述を
* 除くことができる.
*
* このファイルをインクルードする前に,t_stddef.hをインクルードしてお
* くことが必要である.
*/
#ifndef TOPPERS_T_SYSLOG_H
#define TOPPERS_T_SYSLOG_H
#ifdef __cplusplus
extern "C" {
#endif
/*
* ログ情報の種別の定義
*/
#define LOG_TYPE_COMMENT UINT_C(0x01) /* コメント */
#define LOG_TYPE_ASSERT UINT_C(0x02) /* アサーションの失敗 */
#define LOG_TYPE_INH UINT_C(0x11) /* 割込みハンドラ */
#define LOG_TYPE_ISR UINT_C(0x12) /* 割込みサービスルーチン */
#define LOG_TYPE_CYC UINT_C(0x13) /* 周期ハンドラ */
#define LOG_TYPE_ALM UINT_C(0x14) /* アラームハンドラ */
#define LOG_TYPE_OVR UINT_C(0x15) /* オーバランハンドラ */
#define LOG_TYPE_EXC UINT_C(0x16) /* CPU例外ハンドラ */
#define LOG_TYPE_TEX UINT_C(0x17) /* タスク例外処理ルーチン */
#define LOG_TYPE_TSKSTAT UINT_C(0x18) /* タスク状態変化 */
#define LOG_TYPE_DSP UINT_C(0x19) /* ディスパッチャ */
#define LOG_TYPE_SVC UINT_C(0x1a) /* サービスコール */
#define LOG_ENTER UINT_C(0x00) /* 入口/開始 */
#define LOG_LEAVE UINT_C(0x80) /* 出口/終了 */
/*
* ログ情報の重要度の定義
*/
#define LOG_EMERG UINT_C(0) /* シャットダウンに値するエラー */
#define LOG_ALERT UINT_C(1)
#define LOG_CRIT UINT_C(2)
#define LOG_ERROR UINT_C(3) /* システムエラー */
#define LOG_WARNING UINT_C(4) /* 警告メッセージ */
#define LOG_NOTICE UINT_C(5)
#define LOG_INFO UINT_C(6)
#define LOG_DEBUG UINT_C(7) /* デバッグ用メッセージ */
#ifndef TOPPERS_MACRO_ONLY
/*
* ログ情報のデータ構造
*/
#define TMAX_LOGINFO 6
typedef struct {
uint_t logtype; /* ログ情報の種別 */
SYSTIM logtim; /* ログ時刻 */
intptr_t loginfo[TMAX_LOGINFO]; /* その他のログ情報 */
} SYSLOG;
/*
* ログ情報の重要度のビットマップを作るためのマクロ
*/
#define LOG_MASK(prio) (1U << (prio))
#define LOG_UPTO(prio) ((1U << ((prio) + 1)) - 1)
/*
* ログ情報を出力するためのライブラリ関数
*/
#ifndef TOPPERS_OMIT_SYSLOG
extern ER syslog_wri_log(uint_t prio, const SYSLOG *p_syslog) throw();
Inline void
_syslog_0(uint_t prio, uint_t type)
{
SYSLOG syslog;
syslog.logtype = type;
(void) syslog_wri_log(prio, &syslog);
}
Inline void
_syslog_1(uint_t prio, uint_t type, intptr_t arg1)
{
SYSLOG syslog;
syslog.logtype = type;
syslog.loginfo[0] = arg1;
(void) syslog_wri_log(prio, &syslog);
}
Inline void
_syslog_2(uint_t prio, uint_t type, intptr_t arg1, intptr_t arg2)
{
SYSLOG syslog;
syslog.logtype = type;
syslog.loginfo[0] = arg1;
syslog.loginfo[1] = arg2;
(void) syslog_wri_log(prio, &syslog);
}
Inline void
_syslog_3(uint_t prio, uint_t type, intptr_t arg1, intptr_t arg2,
intptr_t arg3)
{
SYSLOG syslog;
syslog.logtype = type;
syslog.loginfo[0] = arg1;
syslog.loginfo[1] = arg2;
syslog.loginfo[2] = arg3;
(void) syslog_wri_log(prio, &syslog);
}
Inline void
_syslog_4(uint_t prio, uint_t type, intptr_t arg1, intptr_t arg2,
intptr_t arg3, intptr_t arg4)
{
SYSLOG syslog;
syslog.logtype = type;
syslog.loginfo[0] = arg1;
syslog.loginfo[1] = arg2;
syslog.loginfo[2] = arg3;
syslog.loginfo[3] = arg4;
(void) syslog_wri_log(prio, &syslog);
}
Inline void
_syslog_5(uint_t prio, uint_t type, intptr_t arg1, intptr_t arg2,
intptr_t arg3, intptr_t arg4, intptr_t arg5)
{
SYSLOG syslog;
syslog.logtype = type;
syslog.loginfo[0] = arg1;
syslog.loginfo[1] = arg2;
syslog.loginfo[2] = arg3;
syslog.loginfo[3] = arg4;
syslog.loginfo[4] = arg5;
(void) syslog_wri_log(prio, &syslog);
}
Inline void
_syslog_6(uint_t prio, uint_t type, intptr_t arg1, intptr_t arg2,
intptr_t arg3, intptr_t arg4, intptr_t arg5, intptr_t arg6)
{
SYSLOG syslog;
syslog.logtype = type;
syslog.loginfo[0] = arg1;
syslog.loginfo[1] = arg2;
syslog.loginfo[2] = arg3;
syslog.loginfo[3] = arg4;
syslog.loginfo[4] = arg5;
syslog.loginfo[5] = arg6;
(void) syslog_wri_log(prio, &syslog);
}
/*
* ログ情報(コメント)を出力するためのライブラリ関数(vasyslog.c)
*/
extern void syslog(uint_t prio, const char *format, ...) throw();
#else /* TOPPERS_OMIT_SYSLOG */
/*
* システムログ出力を抑止する場合
*/
Inline void
_syslog_0(uint_t prio, uint_t type)
{
}
Inline void
_syslog_1(uint_t prio, uint_t type, intptr_t arg1)
{
}
Inline void
_syslog_2(uint_t prio, uint_t type, intptr_t arg1, intptr_t arg2)
{
}
Inline void
_syslog_3(uint_t prio, uint_t type, intptr_t arg1, intptr_t arg2,
intptr_t arg3)
{
}
Inline void
_syslog_4(uint_t prio, uint_t type, intptr_t arg1, intptr_t arg2,
intptr_t arg3, intptr_t arg4)
{
}
Inline void
_syslog_5(uint_t prio, uint_t type, intptr_t arg1, intptr_t arg2,
intptr_t arg3, intptr_t arg4, intptr_t arg5)
{
}
Inline void
_syslog_6(uint_t prio, uint_t type, intptr_t arg1, intptr_t arg2,
intptr_t arg3, intptr_t arg4, intptr_t arg5, intptr_t arg6)
{
}
Inline void
syslog(uint_t prio, const char *format, ...)
{
}
#endif /* TOPPERS_OMIT_SYSLOG */
/*
* ログ情報(コメント)を出力するためのマクロ
*
* formatおよび後続の引数から作成したメッセージを,重大度prioでログ情
* 報として出力するためのマクロ.arg1~argnはintptr_t型にキャストする
* ため,intptr_t型に型変換できる任意の型でよい.
*/
#define syslog_0(prio, format) \
_syslog_1(prio, LOG_TYPE_COMMENT, (intptr_t) format)
#define syslog_1(prio, format, arg1) \
_syslog_2(prio, LOG_TYPE_COMMENT, (intptr_t) format, \
(intptr_t)(arg1))
#define syslog_2(prio, format, arg1, arg2) \
_syslog_3(prio, LOG_TYPE_COMMENT, (intptr_t) format, \
(intptr_t)(arg1), (intptr_t)(arg2))
#define syslog_3(prio, format, arg1, arg2, arg3) \
_syslog_4(prio, LOG_TYPE_COMMENT, (intptr_t) format, \
(intptr_t)(arg1), (intptr_t)(arg2), (intptr_t)(arg3))
#define syslog_4(prio, format, arg1, arg2, arg3, arg4) \
_syslog_5(prio, LOG_TYPE_COMMENT, (intptr_t) format, \
(intptr_t)(arg1), (intptr_t)(arg2), (intptr_t)(arg3), \
(intptr_t)(arg4))
#define syslog_5(prio, format, arg1, arg2, arg3, arg4, arg5) \
_syslog_6(prio, LOG_TYPE_COMMENT, (intptr_t) format, \
(intptr_t)(arg1), (intptr_t)(arg2), (intptr_t)(arg3), \
(intptr_t)(arg4), (intptr_t)(arg5))
/*
* ログ情報(アサーションの失敗)を出力するためのマクロ
*/
#ifndef TOPPERS_assert_fail
#define TOPPERS_assert_fail(exp, file, line) \
_syslog_3(LOG_EMERG, LOG_TYPE_ASSERT, (intptr_t)(file), \
(intptr_t)(line), (intptr_t)(exp))
#endif /* TOPPERS_assert_fail */
#endif /* TOPPERS_MACRO_ONLY */
#ifdef __cplusplus
}
#endif
#endif /* TOPPERS_T_SYSLOG_H */