3 * Toyohashi Open Platform for Embedded Real-Time Systems
5 * Copyright (C) 2006-2009 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
9 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
10 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
11 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
14 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
16 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
18 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
19 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
23 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
25 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
26 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
27 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
28 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
37 * @(#) $Id: test_sysstat1.c 1652 2009-10-10 18:01:05Z ertl-hiro $
47 * 2: loc_cpu() ... システム状態をランダムに変化させる
48 * chg_ipm(TMAX_INTPRI) -> E_CTX
50 * 4: chg_ipm(TMAX_INTPRI)
53 * 7: chg_ipm(TIPM_ENAALL)
56 * 10: dis_dsp() ... タスク例外処理ルーチンを呼び出す準備
57 * chg_ipm(TMIN_INTPRI)
59 * 11: ras_tex(TSK_SELF, 0x0001)
60 * == TASK1タスク例外処理ルーチン(1回目)==
62 * 13: ena_dsp() ... 3つの状態を変化させ,リターンで元にもどるか調べる
63 * chg_ipm(TIPM_ENAALL)
68 * 15: loc_cpu() ... CPUロック状態のままタスクを終了させる
78 #include "kernel_cfg.h"
79 #include "test_sysstat1.h"
82 tex_task1(TEXPTN texptn, intptr_t exinf)
89 check_state(false, false, TMIN_INTPRI, true, true, true);
92 * ディスパッチ許可,割込み優先度マスク変更,タスク例外処理許可
96 check_ercd(ercd, E_OK);
97 ercd = chg_ipm(TIPM_ENAALL);
98 check_ercd(ercd, E_OK);
100 check_ercd(ercd, E_OK);
101 check_state(false, false, TIPM_ENAALL, false, false, false);
111 task1(intptr_t exinf)
119 check_state(false, false, TIPM_ENAALL, false, false, true);
126 check_ercd(ercd, E_OK);
127 check_state(false, true, TIPM_ENAALL, false, true, true);
132 ercd = chg_ipm(TMAX_INTPRI);
133 check_ercd(ercd, E_CTX);
134 check_state(false, true, TIPM_ENAALL, false, true, true);
141 check_ercd(ercd, E_OK);
142 check_state(false, false, TIPM_ENAALL, false, false, true);
148 ercd = chg_ipm(TMAX_INTPRI);
149 check_ercd(ercd, E_OK);
150 check_state(false, false, TMAX_INTPRI, false, true, true);
157 check_ercd(ercd, E_OK);
158 check_state(false, false, TMAX_INTPRI, true, true, true);
165 check_ercd(ercd, E_OK);
166 check_state(false, false, TMAX_INTPRI, true, true, false);
172 ercd = chg_ipm(TIPM_ENAALL);
173 check_ercd(ercd, E_OK);
174 check_state(false, false, TIPM_ENAALL, true, true, false);
181 check_ercd(ercd, E_OK);
182 check_state(false, false, TIPM_ENAALL, false, false, false);
189 check_ercd(ercd, E_OK);
190 check_state(false, false, TIPM_ENAALL, false, false, true);
193 * ディスパッチ禁止,割込み優先度マスク変更,タスク例外処理許可
197 check_ercd(ercd, E_OK);
198 ercd = chg_ipm(TMIN_INTPRI);
199 check_ercd(ercd, E_OK);
201 check_ercd(ercd, E_OK);
202 check_state(false, false, TMIN_INTPRI, true, true, false);
208 ercd = ras_tex(TSK_SELF, 0x0001);
209 /* ここでタスク例外処理ルーチンが動作する */
210 check_ercd(ercd, E_OK);
213 * タスク例外処理からのリターンにより元の状態に戻っていることを
217 check_state(false, false, TMIN_INTPRI, true, true, false);
224 check_ercd(ercd, E_OK);
233 task2(intptr_t exinf)
239 check_state(false, false, TIPM_ENAALL, false, false, true);