3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005-2011 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
11 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
40 * $Id: task_except.c 2023 2011-01-02 08:59:06Z ertl-hiro $
47 #include "kernel_impl.h"
54 #ifndef LOG_RAS_TEX_ENTER
55 #define LOG_RAS_TEX_ENTER(tskid, rasptn)
56 #endif /* LOG_RAS_TEX_ENTER */
58 #ifndef LOG_RAS_TEX_LEAVE
59 #define LOG_RAS_TEX_LEAVE(ercd)
60 #endif /* LOG_RAS_TEX_LEAVE */
62 #ifndef LOG_IRAS_TEX_ENTER
63 #define LOG_IRAS_TEX_ENTER(tskid, rasptn)
64 #endif /* LOG_IRAS_TEX_ENTER */
66 #ifndef LOG_IRAS_TEX_LEAVE
67 #define LOG_IRAS_TEX_LEAVE(ercd)
68 #endif /* LOG_IRAS_TEX_LEAVE */
70 #ifndef LOG_DIS_TEX_ENTER
71 #define LOG_DIS_TEX_ENTER()
72 #endif /* LOG_DIS_TEX_ENTER */
74 #ifndef LOG_DIS_TEX_LEAVE
75 #define LOG_DIS_TEX_LEAVE(ercd)
76 #endif /* LOG_DIS_TEX_LEAVE */
78 #ifndef LOG_ENA_TEX_ENTER
79 #define LOG_ENA_TEX_ENTER()
80 #endif /* LOG_ENA_TEX_ENTER */
82 #ifndef LOG_ENA_TEX_LEAVE
83 #define LOG_ENA_TEX_LEAVE(ercd)
84 #endif /* LOG_ENA_TEX_LEAVE */
86 #ifndef LOG_SNS_TEX_ENTER
87 #define LOG_SNS_TEX_ENTER()
88 #endif /* LOG_SNS_TEX_ENTER */
90 #ifndef LOG_SNS_TEX_LEAVE
91 #define LOG_SNS_TEX_LEAVE(state)
92 #endif /* LOG_SNS_TEX_LEAVE */
94 #ifndef LOG_REF_TEX_ENTER
95 #define LOG_REF_TEX_ENTER(tskid, pk_rtex)
96 #endif /* LOG_REF_TEX_ENTER */
98 #ifndef LOG_REF_TEX_LEAVE
99 #define LOG_REF_TEX_LEAVE(ercd, pk_rtex)
100 #endif /* LOG_REF_TEX_LEAVE */
105 #ifdef TOPPERS_ras_tex
108 ras_tex(ID tskid, TEXPTN rasptn)
113 LOG_RAS_TEX_ENTER(tskid, rasptn);
115 CHECK_TSKID_SELF(tskid);
116 CHECK_PAR(rasptn != 0U);
117 p_tcb = get_tcb_self(tskid);
120 if (TSTAT_DORMANT(p_tcb->tstat) || p_tcb->p_tinib->texrtn == NULL) {
124 p_tcb->texptn |= rasptn;
125 if (p_tcb == p_runtsk && p_runtsk->enatex && ipmflg) {
133 LOG_RAS_TEX_LEAVE(ercd);
137 #endif /* TOPPERS_ras_tex */
140 * タスク例外処理の要求(非タスクコンテキスト用)
142 #ifdef TOPPERS_iras_tex
145 iras_tex(ID tskid, TEXPTN rasptn)
150 LOG_IRAS_TEX_ENTER(tskid, rasptn);
153 CHECK_PAR(rasptn != 0U);
154 p_tcb = get_tcb(tskid);
157 if (TSTAT_DORMANT(p_tcb->tstat) || p_tcb->p_tinib->texrtn == NULL) {
161 p_tcb->texptn |= rasptn;
162 if (p_tcb == p_runtsk && p_runtsk->enatex && ipmflg) {
170 LOG_IRAS_TEX_LEAVE(ercd);
174 #endif /* TOPPERS_iras_tex */
179 #ifdef TOPPERS_dis_tex
190 if (p_runtsk->p_tinib->texrtn == NULL) {
194 p_runtsk->enatex = false;
200 LOG_DIS_TEX_LEAVE(ercd);
204 #endif /* TOPPERS_dis_tex */
209 #ifdef TOPPERS_ena_tex
220 if (p_runtsk->p_tinib->texrtn == NULL) {
224 p_runtsk->enatex = true;
225 if (p_runtsk->texptn != 0U && ipmflg) {
233 LOG_ENA_TEX_LEAVE(ercd);
237 #endif /* TOPPERS_ena_tex */
242 #ifdef TOPPERS_sns_tex
250 state = (p_runtsk != NULL && p_runtsk->enatex) ? false : true;
251 LOG_SNS_TEX_LEAVE(state);
255 #endif /* TOPPERS_sns_tex */
260 #ifdef TOPPERS_ref_tex
263 ref_tex(ID tskid, T_RTEX *pk_rtex)
268 LOG_REF_TEX_ENTER(tskid, pk_rtex);
270 CHECK_TSKID_SELF(tskid);
271 p_tcb = get_tcb_self(tskid);
274 if (TSTAT_DORMANT(p_tcb->tstat) || p_tcb->p_tinib->texrtn == NULL) {
278 pk_rtex->texstat = (p_tcb->enatex) ? TTEX_ENA : TTEX_DIS;
279 pk_rtex->pndptn = p_tcb->texptn;
285 LOG_REF_TEX_LEAVE(ercd, pk_rtex);
289 #endif /* TOPPERS_ref_tex */