source: atk2-sc3-1.4.0-ntisr/obj/sample1.c@ 172

Last change on this file since 172 was 172, checked in by ertl-ishikawa, 8 years ago

ATK2-SC3 1.4.0 RH850依存部 非信頼C2ISR対応を追加

File size: 47.8 KB
Line 
1/*
2 * TOPPERS ATK2
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 * Automotive Kernel Version 2
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2004-2015 by Center for Embedded Computing Systems
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 * Copyright (C) 2011-2015 by FUJI SOFT INCORPORATED, JAPAN
11 * Copyright (C) 2011-2013 by Spansion LLC, USA
12 * Copyright (C) 2011-2015 by NEC Communication Systems, Ltd., JAPAN
13 * Copyright (C) 2011-2015 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
14 * Copyright (C) 2011-2014 by Renesas Electronics Corporation, JAPAN
15 * Copyright (C) 2011-2015 by Sunny Giken Inc., JAPAN
16 * Copyright (C) 2011-2015 by TOSHIBA CORPORATION, JAPAN
17 * Copyright (C) 2004-2015 by Witz Corporation
18 * Copyright (C) 2014-2015 by AISIN COMCRUISE Co., Ltd., JAPAN
19 * Copyright (C) 2014-2015 by eSOL Co.,Ltd., JAPAN
20 * Copyright (C) 2014-2015 by SCSK Corporation, JAPAN
21 * Copyright (C) 2015 by SUZUKI MOTOR CORPORATION
22 *
23 * 上記著作権者
24は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
25 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
26 * 変・再é…
27å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
28 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
29 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
30 * スコード中に含まれていること.
31 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
32 * 用できる形で再é…
33å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
34å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
35 * 者
36マニュアルなど)に,上記の著作権表示,この利用条件および下記
37 * の無保証規定を掲載すること.
38 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
39 * 用できない形で再é…
40å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
41 * と.
42 * (a) 再é…
43å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
44マニュアルなど)に,上記の著
45 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
46 * (b) 再é…
47å¸ƒã®å½¢æ…
48‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
49 * 報告すること.
50 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
51 * 害からも,上記著作権者
52およびTOPPERSプロジェクトをå…
53è²¬ã™ã‚‹ã“と.
54 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
55 * 由に基づく請求からも,上記著作権者
56およびTOPPERSプロジェクトを
57 * å…
58è²¬ã™ã‚‹ã“と.
59 *
60 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
61 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
62 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
63 * 用する者
64に対して,AUTOSARパートナーになることを求めている.
65 *
66 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
67お
68 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
69 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
70 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
71 * の責任を負わない.
72 *
73 * $Id: sample1.c 485 2015-12-17 08:21:50Z witz-itoyo $
74 */
75
76/*
77 * 信頼OSアプリケーション所属サンプルプログラムの本体
78 *
79 * ATK2-SC3の基本的な動作を確認するためのサンプルプログラム.
80 *
81 * プログラムの概要:PCとボード間でシリアル通信を行い,ユーザå…
82¥åŠ›
83 * コマンドに応じた動作とログ出力を行なう.
84 *
85 * <コマンド一覧>
86 * ・タスク指定
87 * '1' : 以降のコマンドを Task1 に対して行う
88 * '2' : 以降のコマンドを Task2 に対して行う
89 * '3' : 以降のコマンドを Task3 に対して行う
90 * '4' : 以降のコマンドを Task4 に対して行う
91 * '5' : 以降のコマンドを Task5 に対して行う
92 * '6' : 以降のコマンドを Task6 に対して行う
93 * '7' : 以降のコマンドを Task7 に対して行う
94 * '8' : 以降のコマンドを Task8 に対して行う(一部タスク管理コマンド使用できない)
95 * '9' : 以降のコマンドを Task9 に対して行う(一部タスク管理コマンド使用できない)
96 * ・タスク管理機能
97 * 'a' : ActivateTask にてタスクを起動する.
98 * 'A' : TerminateTask にてタスクを終了する.
99 * '!'(Shift+1) : ChainTask にてタスクを終了し,Task1 を起動する
100 * '"'(Shift+2) : ChainTask にてタスクを終了し,Task2 を起動する
101 * '#'(Shift+3) : ChainTask にてタスクを終了し,Task3 を起動する
102 * '$'(Shift+4) : ChainTask にてタスクを終了し,Task4 を起動する
103 * '%'(Shift+5) : ChainTask にてタスクを終了し,Task5 を起動する
104 * 's' : ノンプリエンプティブ属性であるタスク MainTask にて最高
105 * 優å…
106ˆåº¦ã‚¿ã‚¹ã‚¯ HighPriorityTask を起動し,Schedule にて
107 * 再スケジューリングを行う.
108 * 'S' : ノンプリエンプティブタスク NonPriTask を起動する
109 * ノンプリエンプティブタスク NonPriTask にて最高優å…
110ˆåº¦
111 * タスク HighPriorityTask を起動し,タスク終了する
112 * 'y' : タスク11(スタックå…
113±æœ‰)を呼び出し,信頼関数で処理を行う
114 * 'Y' : タスク12(スタックå…
115±æœ‰)を呼び出し,信頼関数で処理を行う
116 * タスク不正終了により,エラーコードはE_OS_MISSINGENDで
117 * エラーフックが呼ばれる
118 * 'z' : 実行中のタスクから GetTaskID を実行して,実行状æ…
119‹ã® TaskID を取得する
120 * 'Z' : メインタスクから GetTaskState を実行して,対象タスクの状æ…
121‹ã‚’取得する
122 * 'x' : div命令を実行して,未定義命令例外を発生させる
123 * ・割込み管理機能
124 * 'd' : DisableAllInterrupts を実行後,割込みタイマ値を3回表
125 * 示し, EnableAllInterrupts を実行する
126 * 'D' : SuspendAllInterrupts を実行後,割込みタイマ値を3回表
127 * 示し,さらに SuspendAllInterrupts を実行後,割込みタイ
128 * マー値を3回表示し,ResumeAllInterrupts を実行後,割込み
129 * タイマ値を3回表示し,ResumeAllInterrupts を実行する
130 * 'f' : SuspendOSInterrupts を実行後,割込みタイマ値を3回表
131 * 示し,さらに SuspendOSInterrupts を実行後,割込みタイ
132 * マー値を3回表示し,さらに SuspendAllInterruptsを実行
133 * 後,割込みタイマ値を3回表示し, ResumeAllInterrupts
134 * を実行後,割込みタイマ値を3回表示し,
135 * ResumeOSInterrupts を実行後割込みタイマ値を3回表示し,
136 * ResumeOSInterrupts を実行する
137 * 'T' : 割込みタイマ値を3回表示する
138 * ・リソース管理機能
139 * 'k' : GetResource にてリソース TskLevelRes を取得する.なお,
140 * Task3 は,このリソースより優å…
141ˆåº¦ãŒé«˜ã„ためエラーとなる
142 * 'K' : ReleaseResource にてリソース TskLevelRes を解放する
143 * 'i' : GetResource にてリソース CntRes を取得後,割込み
144 * タイマ値を3回表示し,ReleaseResource にてリソース
145 * CntRes を解放する
146 * ・イベント制御機能
147 * 'e' : SetEvent にてイベントを設定する.Task2 と Task3 以外は
148 * 割り当てがないためエラーとなる
149 * 'w' : ClearEvent にて自タスクのイベントをクリアする.Task2 と
150 * Task3 以外は割り当てがないためエラーとなる
151 * 'E' : GetEvent にてイベント状æ…
152‹ã‚’取得する.Task2 と Task3
153 * 以外は割り当てがないためエラーとなる
154 * 'W' : WaitEvent にて自タスクのイベントを待
155つ.Task3 と Task4
156 * 以外はエラーとなる
157 * ・アラーム機能
158 * 'b' : GetAlarmBase にてアラーム MainCycArm のアラームベース
159 * 情
160報を取得する
161 * 'B' : GetAlarm にてアラーム MainCycArm の残りカウント値を2回
162 * 連続で取得する
163 * 'v' : SetRelAlarm にてアラーム ActTskArm を起動し,500ms 後に
164 * タスク Task1 を起動する
165 * 'V' : SetRelAlarm にてアラーム SetEvtArm を起動し,500ms 後に
166 * イベント T3Evt を設定する
167 * 'h' : CancelAlarm にてアラーム ActTskArm をキャンセルする
168 * ・カウンタ操作機能
169 * 'c' : タスクにて IncrementCounter を実行し,カウンタ SampleCnt
170 * にシグナル通知する
171 * 1 シグナルでアラーム SampleArm が満了し,コールバックを
172 * 実行する
173 * 'C' : タスクにて IncrementCounter を実行し,カウンタ SampleCnt2
174 * にシグナル通知する
175 * 1 シグナルでアラーム SampleArm1 が満了し,SampleCnt3 を
176 * インクリメントする. SampleCnt3 は 1 シグナルで SampleAlm2
177 * が満了しコールバックを実行する
178 * 'j' : タスクにて GetCounterValue を実行する
179 * 取得した値は保存する
180 * 'J' : タスクにて GetEalsedCounterValue を実行する
181 * å…
182ƒã®å€¤ã¯å‰å›žã®GetCounterValue または GetEalsedCounterValue にて取得
183 * した値とする.初回,または,GetCounterValueを実行していない場合は0
184 * とする
185 *
186 * 'r' : タスクにて GetISRIDを実行する
187 * タスクコンテキストからはGetISRIDを呼出した場合はエラーとして
188 * INVALID_ISRが返却される
189 *
190 * 割込みコンテキストからのGetISRID発行は,SystemTimerCntのコールバック
191 * ルーチン('n' コマンドで実行)にて行う
192 *
193 * タスクコンテキストからのGetISRID発行は,SampleCnt2のコールバック
194 * ルーチン('C' または 'c' コマンドで実行)にて行う
195 *
196 * ・スケジュールテーブル制御機能
197 * 't' : スケジュールテーブル動作制御ON/OFF
198 *
199 * 'i' : SchtblSampleCntカウンタをインクリメントする
200 * SchtblSampleCntカウンタはスケジュールテーブルの駆動カウンタ
201 * '1' : 以降のコマンドを scheduletable1 に対して行う(デフォルト値)
202 * '2' : 以降のコマンドを scheduletable2 に対して行う
203 * '3' : 以降のコマンドを scheduletable3(存在しないID) に対して行う
204 * コマンドのエラー確認にも使用する
205 * 's' : StartScheduleTableRelを実行し,相対値(5)でスケジュールテーブルを開始する
206 * 'S' : StartScheduleTableAbsを実行し,絶対値(5)でスケジュールテーブルを開始する
207 * 'f' : StopScheduleTableを実行し,スケジュールテーブルを停止する
208 * 'n' : NextScheduleTableを実行し,scheduletable2に切替える
209 * 'N' : NextScheduleTableを実行し,scheduletable1に切替える
210 * 'g' : GetScheduleTableStatusを実行し,スケジュールテーブル状æ…
211‹ã‚’取得する
212 * 'q' : ShutdownOS( E_OK ) OS実行制御機能の'q'と同等機能
213 * 'Q' : ShutdownOS( E_OS_STATE ) OS実行制御機能の'Q'と同等機能
214 *
215 * ・OS実行制御機能
216 * 'p' : GetActiveApplicationMode にてアプリケーションモードを
217 * 取得する
218 * 'q' : ShutdownOS をコード E_OK で実行し,サンプルプログラムを
219 * 終了する
220 * 'Q' : ShutdownOS をコード E_OS_STATE で実行し,サンプルプログラム
221 * を終了する
222 *
223 * ・IOC送受信機能
224 * 'I' : IOC送受信モード
225 *
226 * IOC APIを使用するタスク(IocTaskX)を選択
227 * '1' : IocTask1(NT_osap1に所属)
228 * '2' : IocTask2(NT_osap2に所属)
229 * '3' : IocTask3(KT_osap1に所属)
230 * '4' : IocTask4(KT_osap2に所属)
231 *
232 * IOC APIを選択
233 * '1' : IocSend_IOC_QUE_0(uint8 in1)
234 * '2' : IocSend_IOC_QUE_1(uint8 in1)
235 * '3' : IocWriteGroup_IOC_DEQUE(uint8 in1, uint8 in2, uint8 in3)
236 * '4' : IocReceive_IOC_QUE(uint8 *out1)
237 * '5' : IocReadGroup_IOC_DEQUE(uint8 *out1, uint8 *out2, uint8 *out3)
238 * '6' : IocEmptyQueue_IOC_QUE(void)
239 *
240 * 送信API選択時,送信データをå…
241¥åŠ›ã™ã‚‹
242 *
243 * <オブジェクト一覧>
244 * ・OS
245 * スタートアップフック:使用
246 * シャットダウンフック:使用
247 * エラーフック:使用
248 * プレタスクフック:未使用
249 * ポストタスクフック:未使用
250 * ・タスク
251 * メインタスク
252 * タスクID:MainTask
253 * 優å…
254ˆåº¦ï¼š14
255 * 多重起動数:1
256 * スケジュール:ノンプリエンプティブ
257 * 自動起動:AppMode1, AppMode2, AppMode3
258 * 概要:ユーザインタフェース(シリアルIOよりコマンドを受信し,
259 * それに対応した動作を行なう)
260 * 周期アラーム MainCycArm により,10msごとに待
261ち解除し
262 * コマンドの受信有無をポーリングする
263 * イベント(ID:MainEvt)を関連付けている
264 * 最高優å…
265ˆåº¦ã‚¿ã‚¹ã‚¯
266 * タスクID:HighPriorityTask
267 * 優å…
268ˆåº¦ï¼š15
269 * 多重起動数:1
270 * スケジュール:フルプリエンプティブ
271 * 自動起動:なし
272 * 概要:起動ログを出力して終了する.ノンプリエンプティブタスク
273 * から起動され,プリエンプトしているかどうかの確認用
274 * ノンプリエンプティブタスク
275 * タスクID:NonPriTask
276 * 優å…
277ˆåº¦ï¼š1
278 * 多重起動数:8
279 * スケジュール:ノンプリエンプティブ
280 * 自動起動:なし
281 * 信頼OSアプリケーションに所属
282 * 概要:起動ログを出力し,最高優å…
283ˆåº¦ã‚¿ã‚¹ã‚¯ HighPriorityTask を
284 * 起動後,終了ログを出力してタスクを終了する
285 * タスク1
286 * タスクID:Task1
287 * 優å…
288ˆåº¦ï¼š4
289 * スケジュール:フルプリエンプティブ
290 * 自動起動:AppMode2
291 * 多重起動数:8
292 * 概要:並列処理タスク(メインタスクからの指令により動作)
293 * 起動されすると無限ループにå…
294¥ã‚Šï¼Œã‚³ãƒžãƒ³ãƒ‰å‡¦ç†ã‚’実行する
295 * リソース TskLevelRes を関連付けている
296 * リソース CntRes を関連付けている
297 * タスク2
298 * タスクID:Task2
299 * 優å…
300ˆåº¦ï¼š7
301 * 多重起動数:1
302 * スケジュール:フルプリエンプティブ
303 * 自動起動:なし
304 * 概要:並列処理タスク(メインタスクからの指令により動作)
305 * 起動されすると無限ループにå…
306¥ã‚Šï¼Œã‚³ãƒžãƒ³ãƒ‰å‡¦ç†ã‚’実行する
307 * リソース TskLevelRes を関連付けている
308 * リソース CntRes を関連付けている
309 * イベント T2Evt を関連付けている
310 * タスク3
311 * タスクID:Task3
312 * 優å…
313ˆåº¦ï¼š12
314 * 多重起動数:1
315 * スケジュール:フルプリエンプティブ
316 * 自動起動:AppMode3
317 * 概要:並列処理タスク(メインタスクからの指令により動作)
318 * 起動されすると無限ループにå…
319¥ã‚Šï¼Œã‚³ãƒžãƒ³ãƒ‰å‡¦ç†ã‚’実行する
320 * イベント待
321ちすることが可能である
322 * リソース CntRes を関連付けている
323 * イベント T3Evt を関連付けている
324 * タスク4
325 * タスクID:Task4
326 * 優å…
327ˆåº¦ï¼š6
328 * 多重起動数:5
329 * スケジュール:フルプリエンプティブ
330 * 自動起動:なし
331 * 概要:並列処理タスク(メインタスクからの指令により動作)
332 * 起動されすると無限ループにå…
333¥ã‚Šï¼Œã‚³ãƒžãƒ³ãƒ‰å‡¦ç†ã‚’実行する
334 * リソース TskLevelRes を関連付けている
335 * リソース CntRes を関連付けている
336 * 内
337部リソース GroupRes を関連付けている
338 * タスク5
339 * タスクID:Task5
340 * 優å…
341ˆåº¦ï¼š9
342 * 多重起動数:5
343 * スケジュール:フルプリエンプティブ
344 * 自動起動:なし
345 * 概要:並列処理タスク(メインタスクからの指令により動作)
346 * 起動されすると無限ループにå…
347¥ã‚Šï¼Œã‚³ãƒžãƒ³ãƒ‰å‡¦ç†ã‚’実行する
348 * リソース TskLevelRes を関連付けている
349 * リソース CntRes を関連付けている
350 * 内
351部リソース GroupRes を関連付けている
352 * タスク6
353 * タスクID:Task6
354 * 優å…
355ˆåº¦ï¼š9
356 * 多重起動数:-
357 * スケジュール:フルプリエンプティブ
358 * 自動起動:なし
359 * 信頼OSアプリケーションに所属
360 * 概要:並列処理タスク(メインタスクからの指令により動作)
361 * SC3ではシステムタスクとして起動
362 * 起動されすると即時関数を終了する
363 * この場合でも正しくTerminateTaskが実行されるかを確認
364 * 何度起動してもOKとなる
365 * Task7とスタックをå…
366±æœ‰
367 * タスク7
368 * タスクID:Task7
369 * 優å…
370ˆåº¦ï¼š8
371 * 多重起動数:-
372 * スケジュール:フルプリエンプティブ
373 * 自動起動:なし
374 * 信頼OSアプリケーションに所属
375 * 概要:並列処理タスク(メインタスクからの指令により動作)
376 * SC3ではユーザタスクとして起動
377 * 起動されすると即時関数を終了する
378 * この場合でも正しくTerminateTaskが実行されるかを確認
379 * 何度起動してもOKとなる
380 * Task6とスタックをå…
381±æœ‰
382 * タスク8
383 * タスクID:Task8
384 * 優å…
385ˆåº¦ï¼š8
386 * 多重起動数:1
387 * スケジュール:フルプリエンプティブ
388 * 自動起動:なし
389 * 概要:起動メッセージ出力し ,アクセス権限のないTask1に対して
390 * GetTaskState()を発行して,エラーフックが上がる
391 * タスク9
392 * タスクID:Task9
393 * 優å…
394ˆåº¦ï¼š8
395 * 多重起動数:1
396 * スケジュール:フルプリエンプティブ
397 * 自動起動:なし
398 * 概要:起動メッセージ出力し,アクセス権限のあるTask2に対して
399 * GetTaskState()を発行して,Task2のステータスを出力する
400 * タスク10
401 * タスクID:Task10
402 * 優å…
403ˆåº¦ï¼š14
404 * 多重起動数:1
405 * スケジュール:フルプリエンプティブ
406 * 自動起動:なし
407 * 概要:起動メッセージ出力し,イベント(T10Evt)を待
408ち
409 * タスク11
410 * タスクID:Task11
411 * 優å…
412ˆåº¦ï¼š14
413 * 多重起動数:1
414 * スケジュール:フルプリエンプティブ
415 * 自動起動:なし
416 * 概要:起動メッセージ出力し,イベント(T11Evt)を待
417ち
418 * タスク12
419 * タスクID:Task12
420 * 優å…
421ˆåº¦ï¼š14
422 * 多重起動数:1
423 * スケジュール:フルプリエンプティブ
424 * 自動起動:なし
425 * 概要:起動メッセージ出力し,イベント(T12Evt)を待
426ち
427 * タスク13
428 * タスクID:Task13
429 * 優å…
430ˆåº¦ï¼š9
431 * 多重起動数:1
432 * スケジュール:フルプリエンプティブ
433 * 自動起動:なし
434 * 概要:信頼関数動作確認用(メインタスクからの指令により動作)
435 * 非信頼OSアプリケーションに所属
436 * 起動されする信頼関数実行後TerminateTaskで終了する
437 * Task12とスタックをå…
438±æœ‰
439 * タスク14
440 * タスクID:Task14
441 * 優å…
442ˆåº¦ï¼š8
443 * 多重起動数:1
444 * スケジュール:フルプリエンプティブ
445 * 自動起動:なし
446 * 概要:信頼関数動作確認用(メインタスクからの指令により動作)
447 * 非信頼OSアプリケーションに所属
448 * 起動されする信頼関数実行後関数を終了する
449 * この場合でも正しくTerminateTaskが実行されるかを確認
450 * Task11とスタックをå…
451±æœ‰
452 * IocTask1
453 * タスクID:IocTask1
454 * 優å…
455ˆåº¦ï¼š9
456 * 多重起動数:1
457 * スケジュール:フルプリエンプティブ
458 * 自動起動:なし
459 * 概要:IOC通信処理(IOC APIの選択,送信データ設定,実行)を行う
460 * 非信頼OSアプリケーションに所属
461 * IocTask2
462 * タスクID:IocTask2
463 * 優å…
464ˆåº¦ï¼š9
465 * 多重起動数:1
466 * スケジュール:フルプリエンプティブ
467 * 自動起動:なし
468 * 概要:IOC通信処理(IOC APIの選択,送信データ設定,実行)を行う
469 * 非信頼OSアプリケーションに所属
470 * IocTask3
471 * タスクID:IocTask3
472 * 優å…
473ˆåº¦ï¼š9
474 * 多重起動数:1
475 * スケジュール:フルプリエンプティブ
476 * 自動起動:なし
477 * 概要:IOC通信処理(IOC APIの選択,送信データ設定,実行)を行う
478 * 信頼OSアプリケーションに所属
479 * IocTask4
480 * タスクID:IocTask4
481 * 優å…
482ˆåº¦ï¼š9
483 * 多重起動数:1
484 * スケジュール:フルプリエンプティブ
485 * 自動起動:なし
486 * 概要:IOC通信処理(IOC APIの選択,送信データ設定,実行)を行う
487 * 非信頼OSアプリケーションに所属
488 *
489 * ・割込みサービスルーチン
490 * シリアルIO受信割込み
491 * ISRID:RxHwSerialInt
492 * 優å…
493ˆåº¦ï¼š2
494 * カテゴリ:2
495 * 概要:コマンドを受信する
496 * ・リソース
497 * タスクレベルリソース
498 * リソースID:TskLevelRes
499 * プロパティ:標準
500 * タスク用カウンタリソース
501 * リソースID:CntRes
502 * プロパティ:標準
503 * タスクグループリソース
504 * リソースID:GroupRes
505 * プロパティ:内
506部
507 * ・イベント
508 * メインタスクイベント
509 * イベントID:MainEvt
510 * タスク2イベント
511 * イベントID:T2Evt
512 * タスク3イベント
513 * イベントID:T3Evt
514 * ・カウンタ
515 * システムタイマカウンタ
516 * カウンタID:MAIN_HW_COUNTER
517 * カウント値:0〜999
518 * 加算値:1
519 * サンプルカウンタ
520 * カウンタID:SampleCnt
521 * カウント値:0〜99
522 * 加算値:10
523 * ・アラーム
524 * メイン周期アラーム
525 * アラームID:MainCycArm
526 * ベースカウンタID:MAIN_HW_COUNTER
527 * アクション:イベント設定 MainEvt
528 * 自動起動:なし
529 * タスク起動アラーム
530 * アラームID:ActTskArm
531 * ベースカウンタID:MAIN_HW_COUNTER
532 * アクション:タスク起動 Task1
533 * 自動起動:なし
534 * イベント設定アラーム
535 * アラームID:SetEvtArm
536 * ベースカウンタID:MAIN_HW_COUNTER
537 * アクション:イベント設定 T3Evt
538 * 自動起動:なし
539 * IncrementCounter確認用アラーム
540 * アラームID:SampleArm
541 * ベースカウンタID:SampleCnt
542 * アクション:コールバック関数実行
543 * 自動起動:なし
544 * 他OSAP所属タスク起動アラーム
545 * アラームID:ActOtherOSAPTskArm
546 * ベースカウンタID:SchtblSampleCnt
547 * アクション:タスク起動 Task4
548 * 自動起動:AppMode1, AppMode2, AppMode3
549 * 設定:カウンタ5,周期0(単発)
550 * ・アプリケーションモード
551 * 自動起動なしモード(MainTaskのみ自動起動)
552 * アプリケーションモードID:AppMode1
553 * Task1自動起動モード
554 * アプリケーションモードID:AppMode2
555 * Task3自動起動モード
556 * アプリケーションモードID:AppMode3
557 * ・信頼関数
558 * 信頼関数tfnt1
559 * 非信頼OSアプリケーションから渡された
560 * ポインタ引数の読書き操作して,計算結果を
561 * 非信頼OSアプリケーションに返す
562 * 信頼関数tfnt2
563 * 非信頼OSアプリケーションから渡された
564 * ポインタ引数の読書き操作して,計算結果を
565 * 非信頼OSアプリケーションに返す
566 * 信頼関数tfnt3
567 * 非信頼OSアプリケーションからのShutdownOSを
568 * 受け付ける
569 * 信頼関数tfnt4
570 * 非信頼OSアプリケーションから信頼OSアプリ
571 * ケーションに所属するタスクを起動する
572 *
573 * 本ファイルは信頼OSアプリケーションに
574 * 所属しているオブジェクト,sample2.cでは
575 * 非信頼OSアプリケーションに所属している
576 * オブジェクトを記述している
577 */
578
579#define TOPPERS_SVC_FUNCCALL
580
581#include "sample.h"
582#include "sample1.h"
583#include "Ioc.h"
584#include "target_hw_counter.h"
585
586#define GetAppModeInfo() (0)
587
588/*
589 * プロテクション発生時の処理レベル
590 */
591#ifdef CFG_USE_PROTECTIONHOOK
592static const char8 *faulty_context_tbl[5] = {
593 "FC_INVALID",
594 "FC_TASK",
595 "FC_C2ISR",
596 "FC_SYSTEM_HOOK",
597 "FC_TRUSTED_FUNC"
598};
599#endif /* CFG_USE_PROTECTIONHOOK */
600
601/*
602 * ファイル名,行番号の参ç…
603§ç”¨ã®å¤‰æ•°
604 */
605extern const char8 *fatal_file_name; /* ファイル名 */
606extern sint32 fatal_line_num; /* 行番号 */
607
608/*
609 * 内
610部関数プロトタイプ宣言
611 */
612sint32 main(void);
613
614DEFINE_VAR_SSTACK(StackType, stack_00[COUNT_STK_T(0x200)]);
615
616extern uint8 GetCommand(void);
617extern void PutActTsk(uint8 task_no);
618extern void PutActNonPriTsk(void);
619extern void PutTermTsk(uint8 task_no);
620extern void PutChainTsk(uint8 from_task_no, uint8 to_task_no);
621extern void PutSchedule(void);
622extern void PutTaskID(void);
623extern void PutTaskState(uint8 task_no);
624extern void PutDisAllInt(void);
625extern void PutSusAllInt(void);
626extern void PutSusOSInt(void);
627extern void PutHwCnt3(void);
628extern void PutGetCntRes(void);
629extern void PutGetTskRes(void);
630extern void PutRelTskRes(void);
631extern void PutSetEvt(uint8 task_no);
632extern void PutClrEvt(uint8 task_no);
633extern void PutGetEvt(uint8 task_no);
634extern void PutWaitEvt(uint8 task_no);
635extern void PutArmBase(void);
636extern void PutArmTick(void);
637extern void PutSetRel(uint8 alarm_no, uint8 tick_no, uint8 cycle_no);
638extern void PutCanArm(void);
639extern void PutAppMode(void);
640extern void PutActIocTsk(void);
641extern void schedule_table_sample_routine(void);
642
643TASK(IocTask3);
644TASK(IocTask4);
645static void IocProk2(void);
646static uint8 GetCommandNoWait1(void);
647
648/*
649 * 内
650部データバッファ
651 */
652extern volatile uint8 command_tbl[14]; /* コマンド引渡しテーブル */
653
654/*
655 * APIエラーログマクロ
656 *
657 * ErrorHookが有効の場合はErrorHookから
658 * エラーログを出力し, ErrorHookが無効の場合は
659 * 以下のマクロよりエラーログ出力を行う
660 */
661#if defined(CFG_USE_ERRORHOOK)
662#define error_log(api) (api)
663#define error_log_ioc(api) (api)
664#else /* !defined( CFG_USE_ERRORHOOK ) */
665#define error_log(api) \
666 { \
667 StatusType ercd; \
668 ercd = api; /* 各API実行 */ \
669 if (ercd != E_OK) { \
670 syslog(LOG_INFO, "Error:%d", atk2_strerror(ercd)); \
671 } \
672 }
673
674#define error_log_ioc(api) \
675 { \
676 StatusType ercd; \
677 ercd = api; /* 各API実行 */ \
678 if (ercd != E_OK) { \
679 syslog(LOG_INFO, "Error:%d", atk2_ioc_strerror(ercd)); \
680 } \
681 }
682#endif /* defined( CFG_USE_ERRORHOOK ) */
683
684/*
685 * 信頼関数tfnt1
686 * 非信頼OSアプリケーションから渡された
687 * ポインタ引数の読書き操作して,計算結果を
688 * 非信頼OSアプリケーションに返す
689 */
690TRUSTEDFUNCTION(TRUSTED_tfnt1, FunctionIndex, FunctionParams)
691{
692 struct parameter_struct *local = FunctionParams;
693
694 sint32 *p1;
695 sint32 p2;
696
697 p1 = local->name1;
698 p2 = local->name2;
699
700 local->return_value = (StatusType) ((*p1 * 2) + p2);
701 return(E_OK);
702}
703
704/*
705 * 信頼関数tfnt2
706 * 非信頼OSアプリケーションから渡された
707 * ポインタ引数の読書き操作して,計算結果を
708 * 非信頼OSアプリケーションに返す
709 */
710TRUSTEDFUNCTION(TRUSTED_tfnt2, FunctionIndex, FunctionParams)
711{
712 struct parameter_struct *local = FunctionParams;
713
714 sint32 *p1;
715 sint32 p2;
716
717 p1 = local->name1;
718 p2 = local->name2;
719
720 local->return_value = (StatusType) ((*p1 * 4) + p2);
721 return(E_OK);
722}
723
724/*
725 * 信頼関数tfnt3
726 * 非信頼OSアプリケーションからのShutdownOSを
727 * 受け付ける
728 */
729TRUSTEDFUNCTION(TRUSTED_tfnt3, FunctionIndex, FunctionParams)
730{
731 struct parameter_struct *local = FunctionParams;
732
733 StatusType ercd;
734
735 ercd = local->ercd;
736 ShutdownOS(ercd);
737
738 return(E_OK);
739}
740
741/*
742 * 信頼関数tfnt4
743 * 非信頼OSアプリケーションから信頼OSアプリ
744 * ケーションに所属するタスクを起動する
745 */
746TRUSTEDFUNCTION(TRUSTED_tfnt4, FunctionIndex, FunctionParams)
747{
748 struct parameter_struct *local = FunctionParams;
749
750 TaskType task_no;
751
752 task_no = local->task_no;
753
754 error_log(ActivateTask(task_no));
755
756 return(E_OK);
757}
758
759/*
760 * メインタスク
761 *
762 * ユーザコマンドの受信と,コマンドごとの処理実行
763 */
764TASK(MainTask)
765{
766 uint8 command;
767 uint8 task_no;
768 uint32 i;
769 struct parameter_struct local;
770
771 TickType val = 0U;
772 TickType eval = 0U;
773
774 /*
775 * タスク番号・コマンドバッファ初期化
776 */
777 task_no = (uint8) (0);
778 for (i = 0U; i < (sizeof(command_tbl) / sizeof(command_tbl[0])); i++) {
779 command_tbl[i] = 0U;
780 }
781
782 Asm("FETRAP 0xf");
783
784 /*
785 * MainCycArmを周期アラームとして設定
786 */
787 SetRelAlarm(MainCycArm, TICK_FOR_10MS, TICK_FOR_10MS);
788
789 /*
790 * コマンド実行ループ
791 */
792 while (1) {
793 WaitEvent(MainEvt); /* 10msの作業時間待
794ち */
795 ClearEvent(MainEvt);
796
797 /*
798 * å…
799¥åŠ›ã‚³ãƒžãƒ³ãƒ‰å–å¾—
800 */
801 syslog(LOG_INFO, "Input Command:");
802 command = GetCommand();
803
804 /*
805 * å…
806¥åŠ›ã‚³ãƒžãƒ³ãƒ‰ãƒã‚§ãƒƒã‚¯
807 */
808 if ((command <= (uint8) (0x1fU)) || (command >= (uint8) (0x80U))) {
809 syslog(LOG_INFO, "Not ASCII character");
810 }
811 else {
812#ifndef OMIT_ECHO
813 syslog(LOG_INFO, "%c", command);
814#endif /* OMIT_ECHO */
815
816 /*
817 * コマンド判別
818 */
819 switch (command) {
820 case '1':
821 case '2':
822 case '3':
823 case '4':
824 case '5':
825 case '6':
826 case '7':
827 case '8':
828 case '9':
829 /*
830 * 処理対象タスクの変更
831 */
832 task_no = (uint8) (command - '1');
833 break;
834 case 'A':
835 case '!':
836 case '"':
837 case '#':
838 case '$':
839 case '%':
840 case 'z':
841 case 'k':
842 case 'K':
843 case 'l':
844 case 'i':
845 case 'w':
846 case 'W':
847 /*
848 * タスクへのコマンド通知
849 */
850 command_tbl[task_no] = command;
851 break;
852 /*
853 * 以降はメインタスクでコマンド処理
854 */
855 case 'a':
856 PutActTsk(task_no);
857 break;
858 case 's':
859 PutSchedule();
860 break;
861 case 'S':
862 PutActNonPriTsk();
863 break;
864 case 'Z':
865 PutTaskState(task_no);
866 break;
867 case 'x':
868 syslog(LOG_INFO, "call RAISE_CPU_EXCEPTION");
869 RAISE_CPU_EXCEPTION;
870 break;
871 case 'd':
872 PutDisAllInt();
873 break;
874 case 'D':
875 PutSusAllInt();
876 break;
877 case 'f':
878 PutSusOSInt();
879 break;
880 case 'T':
881 PutHwCnt3();
882 break;
883 case 'e':
884 PutSetEvt(task_no);
885 break;
886 case 'E':
887 PutGetEvt(task_no);
888 break;
889 case 'b':
890 PutArmBase();
891 break;
892 case 'B':
893 PutArmTick();
894 PutArmTick();
895 break;
896 case 'v':
897 /* SetRelAlarm(ActTskArm, 500, 0)を実行 */
898 PutSetRel(0U, 0U, 0U);
899 break;
900 case 'V':
901 /* SetRelAlarm(SetEvtArm, 500, 0)を実行 */
902 PutSetRel(1U, 0U, 0U);
903 break;
904 case 'h':
905 /* CancelAlarm(CallBackArm)を実行 */
906 PutCanArm();
907 break;
908 case 'c':
909 syslog(LOG_INFO, "Call IncrementCounter(SampleCnt)");
910 IncrementCounter(SampleCnt);
911 break;
912 case 'C':
913 syslog(LOG_INFO, "Call IncrementCounter(SampleCnt2)");
914 IncrementCounter(SampleCnt2);
915 break;
916 case 'j':
917 syslog(LOG_INFO, "GetCounterValue(MAIN_HW_COUNTER, val)");
918 GetCounterValue(MAIN_HW_COUNTER, &val);
919 syslog(LOG_INFO, " val = %d", val);
920 break;
921 case 'J':
922 syslog(LOG_INFO, "Pre val = %d", val);
923 syslog(LOG_INFO, "GetElapsedValue(MAIN_HW_COUNTER, val ,eval)");
924 GetElapsedValue(MAIN_HW_COUNTER, &val, &eval);
925 syslog(LOG_INFO, " val = %d", val);
926 syslog(LOG_INFO, " eval = %d", eval);
927 break;
928 case 'r':
929 syslog(LOG_INFO, "GetISRID() Call from Task Context");
930 syslog(LOG_INFO, "GetISRID() = %d", GetISRID());
931 break;
932 case 'p':
933 PutAppMode();
934 break;
935 case 't':
936 schedule_table_sample_routine();
937 break;
938 case 'q':
939 local.ercd = E_OK;
940 CallTrustedFunction(tfnt3, &local); /* ShutdownOS( E_OK ) */
941 break;
942 case 'Q':
943 local.ercd = E_OS_STATE;
944 CallTrustedFunction(tfnt3, &local); /* ShutdownOS( E_OS_STATE ) */
945 break;
946 case 'y':
947 PutActTsk(10U);
948 break;
949 case 'Y':
950 PutActTsk(11U);
951 break;
952 case 'I':
953 PutActIocTsk();
954 break;
955 default:
956 /* 上記のコマンド以外の場合,処理を行わない */
957 break;
958 }
959 }
960 }
961
962 /*
963 * ここにはこない
964 */
965 syslog(LOG_INFO, "MainTask TERMINATE");
966 error_log(TerminateTask());
967} /* TASK( MainTask ) */
968
969/*
970 * ノンプリエンプティブタスク
971 *
972 * 実行中はプリエンプトしないことの確認用
973 */
974TASK(NonPriTask)
975{
976 syslog(LOG_INFO, "NonPriTask ACTIVATE");
977 syslog(LOG_INFO, "Call ActivateTask(HighPriorityTask)");
978 error_log(ActivateTask(HighPriorityTask));
979 syslog(LOG_INFO, "NonPriTask TERMINATE");
980
981 error_log(TerminateTask());
982} /* TASK( NonPriTask ) */
983
984/*
985 * 並列実行タスク6
986 */
987TASK(Task6)
988{
989 TaskProk(5U);
990} /* TASK( Task6 ) */
991
992/*
993 * 並列実行タスク7
994 */
995TASK(Task7)
996{
997 TaskProk(6U);
998} /* TASK( Task7 ) */
999
1000/*
1001 * IOC確認用タスク3
1002 */
1003TASK(IocTask3)
1004{
1005 syslog(LOG_INFO, "IocTask3 ACTIVATE");
1006
1007 IocProk2();
1008
1009 syslog(LOG_INFO, "IocTask3 TERMINATE");
1010 TerminateTask();
1011} /* TASK( IocTask3 ) */
1012
1013/*
1014 * IOC確認用タスク4
1015 */
1016TASK(IocTask4)
1017{
1018 syslog(LOG_INFO, "IocTask4 ACTIVATE");
1019
1020 IocProk2();
1021
1022 syslog(LOG_INFO, "IocTask4 TERMINATE");
1023 TerminateTask();
1024} /* TASK( IocTask4 ) */
1025
1026/*
1027 * IOC確認用タスク内
1028部処理
1029 *
1030 */
1031static void
1032IocProk2(void)
1033{
1034 uint8 api; /* コマンド受信バッファ(API) */
1035 uint8 data[3]; /* 通信バッファ */
1036
1037 volatile sint32 i;
1038 Std_ReturnType ercd;
1039
1040 syslog(LOG_INFO, "Select IOC API:");
1041 api = GetCommandNoWait1();
1042#ifndef OMIT_ECHO
1043 syslog(LOG_INFO, "%c", api);
1044#endif /* OMIT_ECHO */
1045
1046 switch (api) {
1047 case '1':
1048 syslog(LOG_INFO, "Input send data:");
1049 data[0] = GetCommandNoWait1();
1050#ifndef OMIT_ECHO
1051 syslog(LOG_INFO, "%c", data[0]);
1052#endif /* OMIT_ECHO */
1053 syslog(LOG_INFO, "Call IocSend_IOC_QUE_0");
1054 error_log_ioc(IocSend_IOC_QUE_0(data[0]));
1055 break;
1056 case '2':
1057 syslog(LOG_INFO, "Input send data:");
1058 data[0] = GetCommandNoWait1();
1059#ifndef OMIT_ECHO
1060 syslog(LOG_INFO, "%c", data[0]);
1061#endif /* OMIT_ECHO */
1062
1063 syslog(LOG_INFO, "Call IocSend_IOC_QUE_1");
1064 error_log_ioc(IocSend_IOC_QUE_1(data[0]));
1065 break;
1066 case '3':
1067 for (i = 0; i < 3U; i++) {
1068 syslog(LOG_INFO, "Input send data%d:", i);
1069 data[i] = GetCommandNoWait1();
1070#ifndef OMIT_ECHO
1071 syslog(LOG_INFO, "%c", data[i]);
1072#endif /* OMIT_ECHO */
1073 }
1074 syslog(LOG_INFO, "Call IocWriteGroup_IOC_DEQUE");
1075 error_log_ioc(IocWriteGroup_IOC_DEQUE(data[0], data[1], data[2]));
1076 break;
1077 case '4':
1078 syslog(LOG_INFO, "Call IocReceive_IOC_QUE");
1079 ercd = IocReceive_IOC_QUE(&data[0]);
1080#if !defined(CFG_USE_ERRORHOOK)
1081 if (ercd != E_OK) {
1082 syslog(LOG_INFO, "Error:%d", atk2_ioc_strerror(ercd));
1083 }
1084#endif /* !defined( CFG_USE_ERRORHOOK ) */
1085 if ((ercd == IOC_E_OK) || (ercd == IOC_E_LOST_DATA)) {
1086 syslog(LOG_INFO, "recv data:%c", data[0]);
1087 }
1088 break;
1089 case '5':
1090 syslog(LOG_INFO, "Call IocReadGroup_IOC_DEQUE");
1091 error_log_ioc(IocReadGroup_IOC_DEQUE(&data[0], &data[1], &data[2]));
1092 for (i = 0; i < 3U; i++) {
1093 syslog(LOG_INFO, "recv data%d:%c", i, data[i]);
1094 }
1095 break;
1096 case '6':
1097 syslog(LOG_INFO, "Call IocEmptyQueue_IOC_QUE");
1098 error_log_ioc(IocEmptyQueue_IOC_QUE());
1099 break;
1100 default:
1101 syslog(LOG_INFO, "undefined command");
1102 break;
1103 }
1104} /* IocProk2 */
1105
1106/*
1107 * コマンド受信処理(ウェイト無し)
1108 */
1109uint8
1110GetCommandNoWait1(void)
1111{
1112 uint8 command; /* コマンド受信バッファ */
1113
1114 /*
1115 * コマンドを受信するまでループ
1116 */
1117 command = '\0';
1118 do {
1119 RecvPolSerialChar(&command); /* 受信バッファポーリング */
1120 if (command == '\n') {
1121 command = '\0';
1122 }
1123 } while (command == '\0');
1124
1125
1126 return(command);
1127} /* GetCommandNoWait1 */
1128
1129/*
1130 * ユーザメイン関数
1131 *
1132 * アプリケーションモードの判断と,カーネル起動
1133 */
1134sint32
1135main(void)
1136{
1137 AppModeType crt_app_mode;
1138
1139 /*
1140 * アプリケーションモードの判断
1141 */
1142 switch (GetAppModeInfo()) {
1143 case 0:
1144 crt_app_mode = AppMode1;
1145 break;
1146 case 1:
1147 crt_app_mode = AppMode2;
1148 break;
1149 default:
1150 crt_app_mode = AppMode3;
1151 break;
1152 }
1153
1154 /*
1155 * カーネル起動
1156 */
1157 StartOS(crt_app_mode);
1158
1159 while (1) {
1160 }
1161} /* main */
1162
1163/*
1164 * エラーフックルーチン
1165 */
1166#ifdef CFG_USE_ERRORHOOK
1167void
1168ErrorHook(StatusType Error)
1169{
1170
1171 /*
1172 * エラー要因ごとのパラメータログ出力
1173 */
1174 switch (OSErrorGetServiceId()) {
1175 case OSServiceId_ActivateTask:
1176 syslog(LOG_INFO, "Error:%s=ActivateTask(%d)", atk2_strerror(Error), OSError_ActivateTask_TaskID());
1177 break;
1178 case OSServiceId_TerminateTask:
1179 syslog(LOG_INFO, "Error:%s=TerminateTask()", atk2_strerror(Error));
1180 break;
1181 case OSServiceId_ChainTask:
1182 syslog(LOG_INFO, "Error:%s=ChainTask(%d)", atk2_strerror(Error), OSError_ChainTask_TaskID());
1183 break;
1184 case OSServiceId_Schedule:
1185 syslog(LOG_INFO, "Error:%s=Schedule()", atk2_strerror(Error));
1186 break;
1187 case OSServiceId_GetTaskID:
1188 syslog(LOG_INFO, "Error:%s=GetTaskID(0x%p)", atk2_strerror(Error), OSError_GetTaskID_TaskID());
1189 break;
1190 case OSServiceId_GetTaskState:
1191 syslog(LOG_INFO, "Error:%s=GetTaskState(%d, 0x%p)", atk2_strerror(Error),
1192 OSError_GetTaskState_TaskID(), OSError_GetTaskState_State());
1193 break;
1194 case OSServiceId_EnableAllInterrupts:
1195 syslog(LOG_INFO, "Error:%s=EnableAllInterrupts()", atk2_strerror(Error));
1196 break;
1197 case OSServiceId_DisableAllInterrupts:
1198 syslog(LOG_INFO, "Error:%s=DisableAllInterrupts()", atk2_strerror(Error));
1199 break;
1200 case OSServiceId_ResumeAllInterrupts:
1201 syslog(LOG_INFO, "Error:%s=ResumeAllInterrupts()", atk2_strerror(Error));
1202 break;
1203 case OSServiceId_SuspendAllInterrupts:
1204 syslog(LOG_INFO, "Error:%s=SuspendAllInterrupts()", atk2_strerror(Error));
1205 break;
1206 case OSServiceId_ResumeOSInterrupts:
1207 syslog(LOG_INFO, "Error:%s=ResumeOSInterrupts()", atk2_strerror(Error));
1208 break;
1209 case OSServiceId_SuspendOSInterrupts:
1210 syslog(LOG_INFO, "Error:%s=SuspendOSInterrupts()", atk2_strerror(Error));
1211 break;
1212 case OSServiceId_GetISRID:
1213 syslog(LOG_INFO, "Error:%s=GetISRID()", atk2_strerror(Error));
1214 break;
1215 case OSServiceId_GetResource:
1216 syslog(LOG_INFO, "Error:%s=GetResource(%d)", atk2_strerror(Error), OSError_GetResource_ResID());
1217 break;
1218 case OSServiceId_ReleaseResource:
1219 syslog(LOG_INFO, "Error:%s=ReleaseResource(%d)", atk2_strerror(Error), OSError_ReleaseResource_ResID());
1220 break;
1221 case OSServiceId_SetEvent:
1222 syslog(LOG_INFO, "Error:%s=SetEvent(%d, 0x%x)", atk2_strerror(Error),
1223 OSError_SetEvent_TaskID(), OSError_SetEvent_Mask());
1224 break;
1225 case OSServiceId_ClearEvent:
1226 syslog(LOG_INFO, "Error:%s=ClearEvent(0x%x)", atk2_strerror(Error), OSError_ClearEvent_Mask());
1227 break;
1228 case OSServiceId_GetEvent:
1229 syslog(LOG_INFO, "Error:%s=GetEvent(%d, 0x%p)", atk2_strerror(Error),
1230 OSError_GetEvent_TaskID(), OSError_GetEvent_Event());
1231 break;
1232 case OSServiceId_WaitEvent:
1233 syslog(LOG_INFO, "Error:%s=WaitEvent(0x%x)", atk2_strerror(Error), OSError_WaitEvent_Mask());
1234 break;
1235 case OSServiceId_GetAlarmBase:
1236 syslog(LOG_INFO, "Error:%s=GetAlarmBase(0x%p)", atk2_strerror(Error), OSError_GetAlarmBase_AlarmID());
1237 break;
1238 case OSServiceId_GetAlarm:
1239 syslog(LOG_INFO, "Error:%s=GetAlarm(%d, 0x%p)", atk2_strerror(Error),
1240 OSError_GetAlarm_AlarmID(), OSError_GetAlarm_Tick());
1241 break;
1242 case OSServiceId_SetRelAlarm:
1243 syslog(LOG_INFO, "Error:%s=SetRelAlarm(%d, %d, %d)", atk2_strerror(Error),
1244 OSError_SetRelAlarm_AlarmID(), OSError_SetRelAlarm_increment(), OSError_SetRelAlarm_cycle());
1245 break;
1246 case OSServiceId_SetAbsAlarm:
1247 syslog(LOG_INFO, "Error:%s=SetAbsAlarm(%d, %d, %d)", atk2_strerror(Error),
1248 OSError_SetAbsAlarm_AlarmID(), OSError_SetAbsAlarm_start(), OSError_SetAbsAlarm_cycle());
1249 break;
1250 case OSServiceId_CancelAlarm:
1251 syslog(LOG_INFO, "Error:%s=CancelAlarm(%d)", atk2_strerror(Error), OSError_CancelAlarm_AlarmID());
1252 break;
1253 case OSServiceId_StartScheduleTableRel:
1254 syslog(LOG_INFO, "Error:%s=StartScheduleTableRel(%d, %d)", atk2_strerror(Error),
1255 OSError_StartScheduleTableRel_ScheduleTableID(), OSError_StartScheduleTableRel_Offset());
1256 break;
1257 case OSServiceId_StartScheduleTableAbs:
1258 syslog(LOG_INFO, "Error:%s=StartScheduleTableAbs(%d, %d)", atk2_strerror(Error),
1259 OSError_StartScheduleTableAbs_ScheduleTableID(), OSError_StartScheduleTableAbs_Start());
1260 break;
1261 case OSServiceId_StopScheduleTable:
1262 syslog(LOG_INFO, "Error:%s=StopScheduleTable(%d)", atk2_strerror(Error), OSError_StopScheduleTable_ScheduleTableID());
1263 break;
1264 case OSServiceId_NextScheduleTable:
1265 syslog(LOG_INFO, "Error:%s=NextScheduleTable(%d, %d)", atk2_strerror(Error),
1266 OSError_NextScheduleTable_ScheduleTableID_From(), OSError_NextScheduleTable_ScheduleTableID_To());
1267 break;
1268 case OSServiceId_GetScheduleTableStatus:
1269 syslog(LOG_INFO, "Error:%s=GetScheduleTableStatus(%d, 0x%p)", atk2_strerror(Error),
1270 OSError_GetScheduleTableStatus_ScheduleTableID(), OSError_GetScheduleTableStatus_ScheduleStatus());
1271 break;
1272 case OSServiceId_GetActiveApplicationMode:
1273 syslog(LOG_INFO, "Error:%s=GetActiveApplicationMode()", atk2_strerror(Error));
1274 break;
1275 case OSServiceId_StartOS:
1276 syslog(LOG_INFO, "Error:%s=StartOS()", atk2_strerror(Error));
1277 break;
1278 case OSServiceId_ShutdownOS:
1279 syslog(LOG_INFO, "Error:%s=ShutdownOS()", atk2_strerror(Error));
1280 break;
1281 case OSServiceId_IncrementCounter:
1282 syslog(LOG_INFO, "Error:%s=IncrementCounter(%d)", atk2_strerror(Error), OSError_IncrementCounter_CounterID());
1283 break;
1284 case OSServiceId_TaskMissingEnd:
1285 syslog(LOG_INFO, "Error:%s=MissingEnd()", atk2_strerror(Error));
1286 break;
1287 case IOCServiceId_IOC_Send:
1288 syslog(LOG_INFO, "Error:%s=MissingEnd()", atk2_ioc_strerror(Error));
1289 break;
1290 case IOCServiceId_IOC_Write:
1291 syslog(LOG_INFO, "Error:%s=MissingEnd()", atk2_ioc_strerror(Error));
1292 break;
1293 case IOCServiceId_IOC_SendGroup:
1294 syslog(LOG_INFO, "Error:%s=MissingEnd()", atk2_ioc_strerror(Error));
1295 break;
1296 case IOCServiceId_IOC_WriteGroup:
1297 syslog(LOG_INFO, "Error:%s=MissingEnd()", atk2_ioc_strerror(Error));
1298 break;
1299 case IOCServiceId_IOC_Receive:
1300 syslog(LOG_INFO, "Error:%s=MissingEnd()", atk2_ioc_strerror(Error));
1301 break;
1302 case IOCServiceId_IOC_Read:
1303 syslog(LOG_INFO, "Error:%s=MissingEnd()", atk2_ioc_strerror(Error));
1304 break;
1305 case IOCServiceId_IOC_ReceiveGroup:
1306 syslog(LOG_INFO, "Error:%s=MissingEnd()", atk2_ioc_strerror(Error));
1307 break;
1308 case IOCServiceId_IOC_ReadGroup:
1309 syslog(LOG_INFO, "Error:%s=MissingEnd()", atk2_ioc_strerror(Error));
1310 break;
1311 case IOCServiceId_IOC_EmptyQueue:
1312 syslog(LOG_INFO, "Error:%s=MissingEnd()", atk2_ioc_strerror(Error));
1313 break;
1314 default:
1315 syslog(LOG_INFO, "Error:%s=UnKnownFunc()", atk2_strerror(Error));
1316 break;
1317 }
1318
1319}
1320#endif /* CFG_USE_ERRORHOOK */
1321
1322/*
1323 * プレタスクフックルーチン
1324 *
1325 * Task13/Task14実行前のプレタスクフックの場合,メッセージを出力
1326 */
1327#ifdef CFG_USE_PRETASKHOOK
1328void
1329PreTaskHook(void)
1330{
1331 TaskType tskid;
1332
1333 GetTaskID(&tskid);
1334 if (tskid == Task13) {
1335 syslog(LOG_INFO, "\nPreTaskHook before Task13!\n");
1336 }
1337 if (tskid == Task14) {
1338 syslog(LOG_INFO, "\nPreTaskHook before Task14!\n");
1339 }
1340}
1341#endif /* CFG_USE_PRETASKHOOK */
1342
1343/*
1344 * ポストタスクフックルーチン
1345 *
1346 * Task13/Task14実行後のポストタスクフックの場合,メッセージを出力
1347 */
1348#ifdef CFG_USE_POSTTASKHOOK
1349void
1350PostTaskHook(void)
1351{
1352 TaskType tskid;
1353
1354 GetTaskID(&tskid);
1355 if (tskid == Task13) {
1356 syslog(LOG_INFO, "\nPostTaskHook after Task13!\n");
1357 }
1358 if (tskid == Task14) {
1359 syslog(LOG_INFO, "\nPostTaskHook after Task14!\n");
1360 }
1361}
1362#endif /* CFG_USE_POSTTASKHOOK */
1363
1364/*
1365 * スタートアップフックルーチン
1366 */
1367#ifdef CFG_USE_STARTUPHOOK
1368#ifdef TOPPERS_ENABLE_SYS_TIMER
1369extern void target_timer_initialize(void);
1370#endif /* TOPPERS_ENABLE_SYS_TIMER */
1371
1372void
1373StartupHook(void)
1374{
1375#ifdef TOPPERS_ENABLE_SYS_TIMER
1376 target_timer_initialize();
1377#endif /* TOPPERS_ENABLE_SYS_TIMER */
1378 syslog_initialize();
1379 syslog_msk_log(LOG_UPTO(LOG_INFO));
1380 InitSerial();
1381 print_banner();
1382}
1383#endif /* CFG_USE_STARTUPHOOK */
1384
1385/*
1386 * シャットダウンフックルーチン
1387 */
1388#ifdef CFG_USE_SHUTDOWNHOOK
1389#ifdef TOPPERS_ENABLE_SYS_TIMER
1390extern void target_timer_terminate(void);
1391#endif /* TOPPERS_ENABLE_SYS_TIMER */
1392
1393void
1394ShutdownHook(StatusType Error)
1395{
1396 /* 終了ログ出力 */
1397 syslog(LOG_INFO, "Sample System ShutDown");
1398 syslog(LOG_INFO, "ShutDownCode:%s", atk2_strerror(Error));
1399 syslog(LOG_INFO, "");
1400
1401 if (Error == E_OS_SYS_ASSERT_FATAL) {
1402 syslog(LOG_INFO, "fatal_file_name:%s", fatal_file_name);
1403 syslog(LOG_INFO, "fatal_line_num:%d", fatal_line_num);
1404 }
1405
1406#ifdef TOPPERS_ENABLE_SYS_TIMER
1407 target_timer_terminate();
1408#endif /* TOPPERS_ENABLE_SYS_TIMER */
1409 TermSerial();
1410
1411}
1412#endif /* CFG_USE_SHUTDOWNHOOK */
1413
1414/*
1415 * プロテクションフックルーチン
1416 */
1417#ifdef CFG_USE_PROTECTIONHOOK
1418ProtectionReturnType
1419ProtectionHook(StatusType FatalError)
1420{
1421 StatusType ercd;
1422 FaultyContextType faulty_context;
1423 TaskType taskid;
1424
1425 syslog(LOG_INFO, "ProtectionHook");
1426
1427 if (FatalError == E_OS_STACKFAULT) {
1428 syslog(LOG_INFO, "E_OS_STACKFAULT");
1429 ercd = PRO_SHUTDOWN;
1430 }
1431 else if (FatalError == E_OS_PROTECTION_EXCEPTION) {
1432 faulty_context = GetFaultyContext();
1433 syslog(LOG_INFO, "E_OS_PROTECTION_EXCEPTION and GetFaultyContext() = %s", faulty_context_tbl[faulty_context]);
1434
1435 switch (faulty_context) {
1436 case FC_TASK:
1437 ercd = GetTaskID(&taskid);
1438 if (taskid == MainTask) {
1439 ercd = PRO_IGNORE;
1440 }
1441 else {
1442 ercd = PRO_TERMINATETASKISR;
1443 }
1444 break;
1445 case FC_C2ISR:
1446 ercd = PRO_TERMINATETASKISR;
1447 break;
1448 case FC_SYSTEM_HOOK:
1449 ercd = PRO_IGNORE;
1450 break;
1451 case FC_TRUSTED_FUNC:
1452 ercd = PRO_IGNORE;
1453 break;
1454 case FC_INVALID:
1455 ercd = PRO_SHUTDOWN;
1456 break;
1457 default:
1458 ercd = PRO_SHUTDOWN;
1459 syslog(LOG_INFO, "unknown error fo GetFaultyContext() = %d", faulty_context);
1460 }
1461 }
1462 else if (FatalError == E_OS_PROTECTION_MEMORY) {
1463 faulty_context = GetFaultyContext();
1464 syslog(LOG_INFO, "E_OS_PROTECTION_MEMORY and GetFaultyContext() = %s", faulty_context_tbl[faulty_context]);
1465#if 0
1466 ercd = PRO_TERMINATEAPPL;
1467#endif
1468#if 1
1469 ercd = PRO_TERMINATEAPPL_RESTART;
1470#endif
1471#if 0
1472 ercd = PRO_TERMINATETASKISR;
1473#endif
1474 }
1475 else {
1476 ercd = PRO_SHUTDOWN;
1477 }
1478
1479 return(ercd);
1480}
1481#endif /* CFG_USE_PROTECTIONHOOK */
Note: See TracBrowser for help on using the repository browser.