/* * 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 /* * ターゲット依存部 */ #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 */