$ $ TOPPERS/ASP Kernel $ Toyohashi Open Platform for Embedded Real-Time Systems/ $ Advanced Standard Profile Kernel $ $ Copyright (C) 2007 by TAKAGI Nobuhisa $ Copyright (C) 2007-2014 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: pridataq.tf 480 2016-01-03 07:37:12Z ertl-hiro $ $ $ $ 優先度データキュー機能のテンプレートファイル $ $ $ AID_PDQの処理 $ $num_apdqid = 0$ $FOREACH i APDQ.ORDER_LIST$ $ // nopdqが負の場合(E_PAR) $IF APDQ.NOPDQ[i] < 0$ $ERROR APDQ.TEXT_LINE[i]$E_PAR:$SPC$ $FORMAT(_("illegal %1% `%2%\' in %3%"), "nopdq", APDQ.NOPDQ[i], "AID_PDQ")$ $END$ $END$ $num_apdqid = num_apdqid + APDQ.NOPDQ[i]$ $END$ $num_pdqid = LENGTH(PDQ.ID_LIST) + num_apdqid$ $ $ kernel_cfg.hの生成 $ $FILE "kernel_cfg.h.new"$ #define TNUM_PDQID $num_pdqid$$NL$ $FOREACH id PDQ.ID_LIST$ #define $id$ $+id$$NL$ $END$ $ $ kernel_cfg.cの生成 $ $FILE "kernel_cfg.c"$ /*$NL$ $SPC$* Priority Dataqueue Functions$NL$ $SPC$*/$NL$ $NL$ $ $ 優先度データキューのID番号を保持する変数 $ $IF USE_EXTERNAL_ID$ $FOREACH id PDQ.ID_LIST$ const ID $id$_id = $+id$;$NL$ $END$ $END$ $ $ 静的に生成された優先度データキューの数 $ #define TNUM_SPDQID $LENGTH(PDQ.ID_LIST)$$NL$ $NL$ $ $ 優先度データキューID番号の最大値 $ const ID _kernel_tmax_pdqid = (TMIN_PDQID + TNUM_PDQID - 1);$NL$ const ID _kernel_tmax_spdqid = (TMIN_PDQID + TNUM_SPDQID - 1);$NL$ $NL$ $ $ 優先度データキュー初期化ブロック $ $IF LENGTH(PDQ.ID_LIST)$ $FOREACH pdqid PDQ.ID_LIST$ $ // pdqatrが無効の場合(E_RSATR)[NGKI1804] $ //(TA_TPRI以外のビットがセットされている場合) $IF (PDQ.PDQATR[pdqid] & ~TA_TPRI) != 0$ $ERROR PDQ.TEXT_LINE[pdqid]$E_RSATR:$SPC$ $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "pdqatr", PDQ.PDQATR[pdqid], pdqid, "CRE_PDQ")$ $END$ $END$ $ // pdqcntが負の場合(E_PAR)[NGKI3289] $IF PDQ.PDQCNT[pdqid] < 0$ $ERROR PDQ.TEXT_LINE[pdqid]$E_PAR:$SPC$ $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "pdqcnt", PDQ.PDQCNT[pdqid], pdqid, "CRE_PDQ")$ $END$ $END$ $ // (TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI)でない場合(E_PAR) $ // [NGKI1819] $IF !(TMIN_DPRI <= PDQ.MAXDPRI[pdqid] && PDQ.MAXDPRI[pdqid] <= TMAX_DPRI)$ $ERROR PDQ.TEXT_LINE[pdqid]$E_PAR:$SPC$ $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "maxdpri", PDQ.MAXDPRI[pdqid], pdqid, "CRE_PDQ")$ $END$ $END$ $ // pdqmbがNULLでない場合(E_NOSPT)[ASPS0142] $IF !EQ(PDQ.PDQMB[pdqid], "NULL")$ $ERROR PDQ.TEXT_LINE[pdqid]$E_NOSPT:$SPC$ $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "pdqmb", PDQ.PDQMB[pdqid], pdqid, "CRE_PDQ")$ $END$ $END$ $ // 優先度データキュー管理領域 $IF PDQ.PDQCNT[pdqid]$ static PDQMB _kernel_pdqmb_$pdqid$[$PDQ.PDQCNT[pdqid]$];$NL$ $END$ $END$ $ // 優先度データキュー初期化ブロック const PDQINIB _kernel_pdqinib_table[TNUM_SPDQID] = {$NL$ $JOINEACH pdqid PDQ.ID_LIST ",\n"$ $TAB${$SPC$ ($PDQ.PDQATR[pdqid]$),$SPC$ ($PDQ.PDQCNT[pdqid]$),$SPC$ ($PDQ.MAXDPRI[pdqid]$),$SPC$ $IF PDQ.PDQCNT[pdqid]$ _kernel_pdqmb_$pdqid$ $ELSE$ NULL $END$$SPC$ }$END$$NL$ };$NL$ $ELSE$ TOPPERS_EMPTY_LABEL(const PDQINIB, _kernel_pdqinib_table);$NL$ $END$$NL$ $ $ 動的生成優先度データキュー用の優先度データキュー初期化ブロック $ $IF num_apdqid > 0$ PDQINIB _kernel_apdqinib_table[$num_apdqid$];$NL$ $ELSE$ TOPPERS_EMPTY_LABEL(PDQINIB, _kernel_apdqinib_table);$NL$ $END$$NL$ $ $ 優先度データキュー管理ブロックと優先度データキュー機能初期化関数 $ $IF num_pdqid > 0$ PDQCB _kernel_pdqcb_table[TNUM_PDQID];$NL$ $initfuncs = APPEND(initfuncs, "_kernel_initialize_pridataq();")$ $ELSE$ TOPPERS_EMPTY_LABEL(PDQCB, _kernel_pdqcb_table);$NL$ $END$$NL$