source: azure_iot_hub_f767zi/trunk/asp_baseplatform/test/test_sysstat1.c@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 6.9 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2006-2013 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 *
8 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
9 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
10 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
11 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
13 * スコード中に含まれていること.
14 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
16 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
17 * の無保証規定を掲載すること.
18 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
19 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
20 * と.
21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
23 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
24 * 報告すること.
25 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
26 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
27 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
28 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
29 * 免責すること.
30 *
31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
35 * の責任を負わない.
36 *
37 * $Id$
38 */
39
40/*
41 * システム状態に関するテスト(1)
42 *
43 * テストシーケンス:
44 *
45 * == TASK1(優先度:10)==
46 * 1: 初期状態のチェック
47 * 2: loc_cpu() ... システム状態をランダムに変化させる
48 * chg_ipm(TMAX_INTPRI) -> E_CTX
49 * 3: unl_cpu()
50 * 4: chg_ipm(TMAX_INTPRI)
51 * 5: dis_dsp()
52 * 6: ena_tex()
53 * 7: chg_ipm(TIPM_ENAALL)
54 * 8: ena_dsp()
55 * 9: dis_tex()
56 * 10: dis_dsp() ... タスク例外処理ルーチンを呼び出す準備
57 * ena_tex()
58 * 11: ras_tex(TSK_SELF, 0x0001)
59 * == TASK1タスク例外処理ルーチン(1回目)==
60 * 12: 初期状態のチェック
61 * 13: ena_dsp() ... 3つの状態を変化させ,リターンで元にもどるか調べる
62 * chg_ipm(TMIN_INTPRI)
63 * ena_tex()
64 * リターン
65 * == TASK1(続き)==
66 * 14: 戻ってきた状態のチェック
67 * 15: loc_cpu() ... CPUロック状態のままタスクを終了させる
68 * 16: リターン(=タスク終了)
69 * == TASK2(優先度:10) ==
70 * 17: 初期状態のチェック
71 * 18: 終了
72 */
73
74#include <kernel.h>
75#include <test_lib.h>
76#include <t_syslog.h>
77#include "kernel_cfg.h"
78#include "test_sysstat1.h"
79
80void
81tex_task1(TEXPTN texptn, intptr_t exinf)
82{
83 ER ercd;
84
85 switch (texptn) {
86 case 0x0001:
87 check_point(12);
88 check_state(false, false, TIPM_ENAALL, true, true, true);
89
90 /*
91 * ディスパッチ許可,割込み優先度マスク変更,タスク例外処理許可
92 */
93 check_point(13);
94 ercd = ena_dsp();
95 check_ercd(ercd, E_OK);
96 ercd = chg_ipm(TMIN_INTPRI);
97 check_ercd(ercd, E_OK);
98 ercd = ena_tex();
99 check_ercd(ercd, E_OK);
100 check_state(false, false, TMIN_INTPRI, false, true, false);
101 break;
102
103 default:
104 check_point(0);
105 break;
106 }
107}
108
109void
110task1(intptr_t exinf)
111{
112 ER ercd;
113
114 test_start(__FILE__);
115
116 /*
117 * 初期状態のチェック
118 */
119 check_point(1);
120 check_state(false, false, TIPM_ENAALL, false, false, true);
121
122 /*
123 * CPUロック状態のチェック
124 */
125 check_point(2);
126 ercd = loc_cpu();
127 check_ercd(ercd, E_OK);
128 check_state(false, true, TIPM_ENAALL, false, true, true);
129
130 /*
131 * 割込み優先度マスク変更のチェック
132 */
133 ercd = chg_ipm(TMAX_INTPRI);
134 check_ercd(ercd, E_CTX);
135 check_state(false, true, TIPM_ENAALL, false, true, true);
136
137 /*
138 * CPUロック解除のチェック
139 */
140 check_point(3);
141 ercd = unl_cpu();
142 check_ercd(ercd, E_OK);
143 check_state(false, false, TIPM_ENAALL, false, false, true);
144
145 /*
146 * 割込み優先度マスク変更のチェック
147 */
148 check_point(4);
149 ercd = chg_ipm(TMAX_INTPRI);
150 check_ercd(ercd, E_OK);
151 check_state(false, false, TMAX_INTPRI, false, true, true);
152
153 /*
154 * ディスパッチ禁止のチェック
155 */
156 check_point(5);
157 ercd = dis_dsp();
158 check_ercd(ercd, E_OK);
159 check_state(false, false, TMAX_INTPRI, true, true, true);
160
161 /*
162 * タスク例外処理許可のチェック
163 */
164 check_point(6);
165 ercd = ena_tex();
166 check_ercd(ercd, E_OK);
167 check_state(false, false, TMAX_INTPRI, true, true, false);
168
169 /*
170 * 割込み優先度マスク全解除のチェック
171 */
172 check_point(7);
173 ercd = chg_ipm(TIPM_ENAALL);
174 check_ercd(ercd, E_OK);
175 check_state(false, false, TIPM_ENAALL, true, true, false);
176
177 /*
178 * ディスパッチ許可のチェック
179 */
180 check_point(8);
181 ercd = ena_dsp();
182 check_ercd(ercd, E_OK);
183 check_state(false, false, TIPM_ENAALL, false, false, false);
184
185 /*
186 * タスク例外処理禁止のチェック
187 */
188 check_point(9);
189 ercd = dis_tex();
190 check_ercd(ercd, E_OK);
191 check_state(false, false, TIPM_ENAALL, false, false, true);
192
193 /*
194 * ディスパッチ禁止,タスク例外処理許可
195 */
196 check_point(10);
197 ercd = dis_dsp();
198 check_ercd(ercd, E_OK);
199 ercd = ena_tex();
200 check_ercd(ercd, E_OK);
201 check_state(false, false, TIPM_ENAALL, true, true, false);
202
203 /*
204 * タスク例外処理を要求
205 */
206 check_point(11);
207 ercd = ras_tex(TSK_SELF, 0x0001);
208 /* ここでタスク例外処理ルーチンが動作する */
209 check_ercd(ercd, E_OK);
210
211 /*
212 * タスク例外処理からのリターンにより元の状態に戻っていることを
213 * チェック
214 */
215 check_point(14);
216 check_state(false, false, TIPM_ENAALL, true, true, false);
217
218 /*
219 * CPUロック状態に
220 */
221 check_point(15);
222 ercd = loc_cpu();
223 check_ercd(ercd, E_OK);
224
225 /*
226 * そのままタスク終了
227 */
228 check_point(16);
229}
230
231void
232task2(intptr_t exinf)
233{
234 /*
235 * 初期状態のチェック
236 */
237 check_point(17);
238 check_state(false, false, TIPM_ENAALL, false, false, true);
239
240 check_finish(18);
241}
Note: See TracBrowser for help on using the repository browser.