source: atk2-sc3-1.4.0-ntisr/obj/sample2.c

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

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

File size: 27.6 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: sample2.c 425 2015-12-07 08:06:19Z witz-itoyo $
74 */
75
76/*
77 * 非信頼OSアプリケーション所属サンプルプログラムの本体
78 *
79 * サンプルプログラムの動作はsample1.cのコメント参ç…
80§
81 * 本ファイルは非信頼OSアプリケーションに所属している
82 * オブジェクトを記述している
83 */
84
85#include "sample.h"
86#include "sample2.h"
87#include "Ioc.h"
88
89#define GetHwCnt(x, y)
90
91/*
92 * 内
93部関数プロトタイプ宣言
94 */
95uint8 GetCommand(void);
96void PutActTsk(uint8 task_no);
97void PutActNonPriTsk(void);
98void PutTermTsk(uint8 task_no);
99void PutChainTsk(uint8 from_task_no, uint8 to_task_no);
100void PutSchedule(void);
101void PutTaskID(void);
102void PutTaskState(uint8 task_no);
103void PutDisAllInt(void);
104void PutSusAllInt(void);
105void PutSusOSInt(void);
106void PutHwCnt3(void);
107void PutGetCntRes(void);
108void PutGetTskRes(void);
109void PutRelTskRes(void);
110void PutSetEvt(uint8 task_no);
111void PutClrEvt(uint8 task_no);
112void PutGetEvt(uint8 task_no);
113void PutWaitEvt(uint8 task_no);
114void PutArmBase(void);
115void PutArmTick(void);
116void PutSetRel(uint8 alarm_no, uint8 tick_no, uint8 cycle_no);
117void PutCanArm(void);
118void PutAppMode(void);
119void schedule_table_sample_routine(void);
120
121TASK(IocTask1);
122TASK(IocTask2);
123static void IocProk1(void);
124static uint8 GetCommandNoWait2(void);
125
126/*
127 * APIエラーログマクロ
128 *
129 * ErrorHookが有効の場合はErrorHookから
130 * エラーログを出力し, ErrorHookが無効の場合は
131 * 以下のマクロよりエラーログ出力を行う
132 */
133#if defined(CFG_USE_ERRORHOOK)
134#define error_log(api) (api)
135#define error_log_ioc(api) (api)
136#else /* !defined( CFG_USE_ERRORHOOK ) */
137#define error_log(api) \
138 { \
139 StatusType ercd; \
140 ercd = api; /* 各API実行 */ \
141 if (ercd != E_OK) { \
142 syslog(LOG_INFO, "Error:%d", atk2_strerror(ercd)); \
143 } \
144 }
145
146#define error_log_ioc(api) \
147 { \
148 StatusType ercd; \
149 ercd = api; /* 各API実行 */ \
150 if (ercd != E_OK) { \
151 syslog(LOG_INFO, "Error:%d", atk2_ioc_strerror(ercd)); \
152 } \
153 }
154#endif /* defined( CFG_USE_ERRORHOOK ) */
155
156/*
157 * 内
158部データバッファ
159 */
160volatile uint8 command_tbl[14]; /* コマンド引渡しテーブル */
161
162/*
163 * 内
164部定数データテーブル
165 */
166/* 無効イベントマスク値 */
167#define invalid_mask (EventMaskType) (0)
168
169/* イベントマスクテーブル */
170static const EventMaskType event_mask_tbl[5] = {
171 invalid_mask,
172 T2Evt,
173 T3Evt,
174 invalid_mask,
175 invalid_mask
176};
177
178/* タスクIDテーブル */
179static const TaskType task_id_tbl[14] = {
180 Task1,
181 Task2,
182 Task3,
183 Task4,
184 Task5,
185 Task6,
186 Task7,
187 Task8,
188 Task9,
189 Task10,
190 Task11,
191 Task12,
192 Task13,
193 Task14
194};
195
196/* アラームIDテーブル */
197static const AlarmType alarm_id_tbl[2] = {
198 ActTskArm,
199 SetEvtArm
200};
201
202/* ティック値テーブル */
203static const TickType tick_tbl[2] = {
204 (TickType) 500,
205 (TickType) 900
206};
207
208/* サイクル値テーブル */
209static const TickType cycle_tbl[2] = {
210 (TickType) 0,
211 (TickType) COUNTER_MIN_CYCLE
212};
213
214/* イベントマスク名文字列テーブル */
215static const char8 *event_name_tbl[5] = {
216 "Invalid",
217 "T2Evt",
218 "T3Evt",
219 "Invalid",
220 "Invalid"
221};
222
223/* タスク名文字列テーブル */
224static const char8 *task_name_tbl[14] = {
225 "Task1",
226 "Task2",
227 "Task3",
228 "Task4",
229 "Task5",
230 "Task6",
231 "Task7",
232 "Task8",
233 "Task9",
234 "Task10",
235 "Task11",
236 "Task12"
237 "Task13"
238 "Task14"
239};
240
241/* タスク状æ…
242‹æ–‡å­—列テーブル */
243static const char8 *task_state_tbl[4] = {
244 "SUSPENDED",
245 "RUNNING",
246 "READY",
247 "WAITING"
248};
249
250/* アラーム名文字列テーブル */
251static const char8 *alarm_name_tbl[2] = {
252 "ActTskArm",
253 "SetEvtArm"
254};
255
256DEFINE_VAR_USTACK(StackType, stack_1[COUNT_STK_T(0x200)], ".stack_section");
257DEFINE_VAR_SSTACK(StackType, stack_2[COUNT_STK_T(0x200)]);
258
259/*
260 * 最高優å…
261ˆåº¦ã‚¿ã‚¹ã‚¯
262 *
263 * 各タスクのプリエンプト確認用
264 */
265TASK(HighPriorityTask)
266{
267 syslog(LOG_INFO, "HighPriorityTask ACTIVATE");
268 error_log(TerminateTask());
269} /* TASK( HighPriorityTask ) */
270
271/*
272 * 並列実行タスク1
273 */
274TASK(Task1)
275{
276 TaskProk(0U);
277} /* TASK( Task1 ) */
278
279
280/*
281 * 並列実行タスク2
282 */
283TASK(Task2)
284{
285 TaskProk(1U);
286} /* TASK( Task2 ) */
287
288
289/*
290 * 並列実行タスク3
291 */
292TASK(Task3)
293{
294 TaskProk(2U);
295} /* TASK( Task3 ) */
296
297
298/*
299 * 並列実行タスク4
300 */
301TASK(Task4)
302{
303 TaskProk(3U);
304} /* TASK( Task4 ) */
305
306
307/*
308 * 並列実行タスク5
309 */
310TASK(Task5)
311{
312 TaskProk(4U);
313} /* TASK( Task5 ) */
314
315
316/*
317 * 並列実行タスク内
318部処理
319 *
320 * メインタスクから通知されたコマンドごとの処理実行
321 */
322void
323TaskProk(uint8 task_no)
324{
325 uint8 command; /* コマンド退避バッファ */
326 InterruptNumberType intno;
327
328 /*
329 * タスク起動ログ出力
330 */
331 syslog(LOG_INFO, "%s ACTIVATE", task_name_tbl[task_no]);
332 intno = 52U;
333 CallTrustedFunction(tfnt5, (TrustedFunctionParameterRefType)&intno);
334
335 /*
336 * コマンド実行ループ
337 */
338 while (1) {
339
340 /*
341 * コマンド取得
342 */
343 while (command_tbl[task_no] == '\0') {
344 }
345 command = command_tbl[task_no];
346 command_tbl[task_no] = 0U;
347
348 /*
349 * コマンド判定
350 */
351 switch (command) {
352 case 'A':
353 PutTermTsk(task_no);
354 break;
355 case '!':
356 case '"':
357 case '#':
358 case '$':
359 case '%':
360 PutChainTsk(task_no, (command - '!'));
361 break;
362 case 'z':
363 PutTaskID();
364 break;
365 case 'k':
366 PutGetTskRes();
367 break;
368 case 'K':
369 PutRelTskRes();
370 break;
371 case 'i':
372 PutGetCntRes();
373 break;
374 case 'w':
375 if (task_no < 5U) {
376 PutClrEvt(task_no);
377 }
378 break;
379 case 'W':
380 if (task_no < 5U) {
381 PutWaitEvt(task_no);
382 }
383 break;
384 default:
385 /* 上記のコマンド以外の場合,処理は行わない */
386 break;
387 }
388 }
389} /* TaskProk */
390
391/*
392 * コマンド受信処理
393 */
394uint8
395GetCommand(void)
396{
397 uint8 command; /* コマンド受信バッファ */
398
399 /*
400 * コマンドを受信するまでループ
401 */
402 command = '\0';
403 do {
404 WaitEvent(MainEvt); /* 10msウェイト */
405 ClearEvent(MainEvt);
406 RecvPolSerialChar(&command); /* 受信バッファポーリング */
407 if (command == '\n') {
408 command = '\0';
409 }
410 } while (command == '\0');
411
412
413 return(command);
414} /* GetCommand */
415
416/*
417 * ActivateTask 実行・ログ出力処理
418 */
419void
420PutActTsk(uint8 task_no)
421{
422 struct parameter_struct local;
423
424 syslog(LOG_INFO, "Call ActivateTask(%s)", task_name_tbl[task_no]);
425
426 if (task_no < 5U) {
427 error_log(ActivateTask(task_id_tbl[task_no]));
428 }
429 else {
430 local.task_no = task_id_tbl[task_no];
431 CallTrustedFunction(tfnt4, &local); /* ActivateTask(task_name_tbl[task_no]) */
432 }
433
434} /* PutActTsk */
435
436/*
437 * ActivateTask 実行(NonPriTask)・ログ出力処理
438 */
439void
440PutActNonPriTsk(void)
441{
442 struct parameter_struct local;
443
444 syslog(LOG_INFO, "Call ActivateTask(NonPriTask)");
445
446 local.task_no = NonPriTask;
447 CallTrustedFunction(tfnt4, &local); /* ActivateTask(NonPriTask) */
448
449} /* PutActNonPriTsk */
450
451/*
452 * TerminateTask 実行・ログ出力処理
453 */
454void
455PutTermTsk(uint8 task_no)
456{
457 StatusType ercd; /* エラーコード */
458
459 syslog(LOG_INFO, "%s TERMINATE", task_name_tbl[task_no]);
460
461 ercd = TerminateTask();
462 ShutdownOS(ercd);
463}
464
465/*
466 * ChainTask 実行・ログ出力処理
467 */
468void
469PutChainTsk(uint8 from_task_no, uint8 to_task_no)
470{
471 StatusType ercd; /* エラーコード */
472
473 syslog(LOG_INFO, "Call ChainTask(%s)", task_name_tbl[to_task_no]);
474 syslog(LOG_INFO, "%s TERMINATE", task_name_tbl[from_task_no]);
475
476 ercd = ChainTask(task_id_tbl[to_task_no]);
477 if (ercd == E_OS_LIMIT) {
478 syslog(LOG_INFO, "Call TerminateTask()");
479 syslog(LOG_INFO, "Because of ChainTask E_OS_LIMIT return");
480 ercd = TerminateTask();
481 }
482 ShutdownOS(ercd);
483} /* PutChainTsk */
484
485/*
486 * Schedule 実行・ログ出力処理
487 */
488void
489PutSchedule(void)
490{
491 syslog(LOG_INFO, "Call ActivateTask(HighPriorityTask)");
492
493 error_log(ActivateTask(HighPriorityTask));
494 syslog(LOG_INFO, "Call Schedule()");
495
496 error_log(Schedule());
497 syslog(LOG_INFO, "Retrun Schedule()");
498} /* PutSchedule */
499
500/*
501 * GetTaskID 実行・ログ出力処理
502 */
503void
504PutTaskID(void)
505{
506 TaskType task_id; /* タスクID取得バッファ */
507
508 error_log(GetTaskID(&task_id));
509
510 syslog(LOG_INFO, "TaskID:%d", task_id);
511} /* PutTaskID */
512
513/*
514 * GetTaskState 実行・ログ出力処理
515 * Task1〜Task5,Task7取得時エラーとならない
516 * Task6取得時エラーとなる
517 */
518void
519PutTaskState(uint8 task_no)
520{
521 TaskStateType state; /* タスクID取得バッファ */
522
523 error_log(GetTaskState(task_id_tbl[task_no], &state));
524
525 syslog(LOG_INFO, task_name_tbl[task_no]);
526 syslog(LOG_INFO, " State:%s", task_state_tbl[state]);
527} /* PutTaskState */
528
529/*
530 * DisableAllInterrupts/EnableAllInterrupts 実行・ログ出力処理
531 */
532void
533PutDisAllInt(void)
534{
535 syslog(LOG_INFO, "Call DisableAllInterrupts");
536
537 DisableAllInterrupts();
538
539 PutHwCnt3();
540 syslog(LOG_INFO, "Call EnableAllInterrupts");
541
542 EnableAllInterrupts();
543} /* PutDisAllInt */
544
545/*
546 * SuspendAllInterrupts/ResumeAllInterrupts 実行・ログ出力処理
547 */
548void
549PutSusAllInt(void)
550{
551 syslog(LOG_INFO, "Call SuspendAllInterrupts");
552
553 SuspendAllInterrupts();
554
555 PutHwCnt3();
556 syslog(LOG_INFO, "Call SuspendAllInterrupts");
557
558 SuspendAllInterrupts();
559
560 PutHwCnt3();
561 syslog(LOG_INFO, "Call ResumeAllInterrupts");
562
563 ResumeAllInterrupts();
564
565 PutHwCnt3();
566 syslog(LOG_INFO, "Call ResumeAllInterrupts");
567
568 ResumeAllInterrupts();
569} /* PutSusAllInt */
570
571/*
572 * SuspendOSInterrupts/ResumeOSInterrupts 実行・ログ出力処理
573 */
574void
575PutSusOSInt(void)
576{
577 syslog(LOG_INFO, "Call SuspendOSInterrupts");
578
579 SuspendOSInterrupts();
580
581 PutHwCnt3();
582 syslog(LOG_INFO, "Call SuspendOSInterrupts");
583
584 SuspendOSInterrupts();
585
586 PutHwCnt3();
587 syslog(LOG_INFO, "Call SuspendAllInterrupts");
588
589 SuspendAllInterrupts();
590
591 PutHwCnt3();
592 syslog(LOG_INFO, "Call ResumeAllInterrupts");
593
594 ResumeAllInterrupts();
595
596 PutHwCnt3();
597 syslog(LOG_INFO, "Call ResumeOSInterrupts");
598
599 ResumeOSInterrupts();
600
601 PutHwCnt3();
602 syslog(LOG_INFO, "Call ResumeOSInterrupts");
603
604 ResumeOSInterrupts();
605} /* PutSusOSInt */
606
607/*
608 * 割込み動作テスト用HWカウンタ値のログ出力処理
609 */
610void
611PutHwCnt3(void)
612{
613 uint32 isr1_cnt = 0U; /* C1ISR カウント値取得バッファ */
614 uint32 isr2_cnt = 0U; /* C2ISR カウント値取得バッファ */
615 uint8 cnt; /* 出力回数カウンタ */
616
617 for (cnt = 0U; cnt < 3U; cnt++) {
618 GetHwCnt(&isr1_cnt, &isr2_cnt);
619 syslog(LOG_INFO, "C1ISR Cnt:%d, C2ISR Cnt:%d",
620 isr1_cnt, isr2_cnt);
621 }
622} /* PutHwCnt3 */
623
624/*
625 * GetResource/ReleaseResource 実行(割込みレベル)・ログ出力処理
626 */
627void
628PutGetCntRes(void)
629{
630 syslog(LOG_INFO, "Call GetResource(CntRes)");
631 error_log(GetResource(CntRes));
632
633 PutHwCnt3();
634 syslog(LOG_INFO, "Call ReleaseResource(CntRes)");
635
636 error_log(ReleaseResource(CntRes));
637} /* PutGetCntRes */
638
639/*
640 * GetResource 実行(タスクレベル)・ログ出力処理
641 */
642void
643PutGetTskRes(void)
644{
645 syslog(LOG_INFO, "Call GetResource(TskLevelRes)");
646
647 error_log(GetResource(TskLevelRes));
648} /* PutGetTskRes */
649
650/*
651 * ReleaseResource 実行(タスクレベル)・ログ出力処理
652 */
653void
654PutRelTskRes(void)
655{
656 syslog(LOG_INFO, "Call ReleaseResource(TskLevelRes)");
657
658 error_log(ReleaseResource(TskLevelRes));
659}
660
661/*
662 * SetEvent 実行・ログ出力処理
663 */
664void
665PutSetEvt(uint8 task_no)
666{
667 syslog(LOG_INFO, "Call SetEvent(%s, %s)",
668 task_name_tbl[task_no], event_name_tbl[task_no]);
669
670 error_log(SetEvent(task_id_tbl[task_no], event_mask_tbl[task_no]));
671} /* PutSetEvt */
672
673/*
674 * ClearEvent 実行・ログ出力処理
675 */
676void
677PutClrEvt(uint8 task_no)
678{
679 syslog(LOG_INFO, "Call ClearEvent(%s)", event_name_tbl[task_no]);
680
681 error_log(ClearEvent(event_mask_tbl[task_no]));
682} /* PutClrEvt */
683
684/*
685 * GetEvent 実行・ログ出力処理
686 */
687void
688PutGetEvt(uint8 task_no)
689{
690 EventMaskType mask; /* イベントマスク取得バッファ */
691
692 error_log(GetEvent(task_id_tbl[task_no], &mask));
693
694 syslog(LOG_INFO, "%s Event Mask:0x%x", task_name_tbl[task_no], mask);
695} /* PutGetEvt */
696
697/*
698 * WaitEvent 実行・ログ出力処理
699 */
700void
701PutWaitEvt(uint8 task_no)
702{
703 syslog(LOG_INFO, "Call WaitEvent(%s)", event_name_tbl[task_no]);
704
705 error_log(WaitEvent(event_mask_tbl[task_no]));
706 syslog(LOG_INFO, "Return WaitEvent(%s)", event_name_tbl[task_no]);
707} /* PutWaitEvt */
708
709/*
710 * GetAlarmBase 実行・ログ出力処理
711 */
712void
713PutArmBase(void)
714{
715 AlarmBaseType info; /* アラームベース情
716報取得バッファ */
717
718 error_log(GetAlarmBase(MainCycArm, &info));
719
720 syslog(LOG_INFO, "MainCycArm Base:");
721 syslog(LOG_INFO, "\tMAXALLOWEDVALUE=%d", info.maxallowedvalue);
722 syslog(LOG_INFO, "\tTICKSPERBASE=%d", info.ticksperbase);
723 syslog(LOG_INFO, "\tMINCYCLE=%d", info.mincycle);
724} /* PutArmBase */
725
726/*
727 * PutArmTick 実行・ログ出力処理
728 */
729void
730PutArmTick(void)
731{
732 TickType tick; /* 残りティック取得バッファ */
733
734 error_log(GetAlarm(MainCycArm, &tick));
735
736 syslog(LOG_INFO, "MainCycArm Tick:%d", tick);
737} /* PutArmTick */
738
739/*
740 * SetRelAlarm 実行・ログ出力処理
741 */
742void
743PutSetRel(uint8 alarm_no, uint8 tick_no, uint8 cycle_no)
744{
745 syslog(LOG_INFO, "Call SetRelAlarm(%s, %d, %d)",
746 alarm_name_tbl[alarm_no], tick_tbl[tick_no], cycle_tbl[cycle_no]);
747
748 error_log(SetRelAlarm(alarm_id_tbl[alarm_no],
749 tick_tbl[tick_no], cycle_tbl[cycle_no]));
750} /* PutSetRel */
751
752/*
753 * CancelAlarm 実行・ログ出力処理
754 */
755void
756PutCanArm(void)
757{
758 syslog(LOG_INFO, "Call CancelAlarm(ActTskArm)");
759
760 error_log(CancelAlarm(ActTskArm));
761} /* PutCanArm */
762
763/*
764 * GetActiveApplicationMode 実行・ログ出力処理
765 */
766void
767PutAppMode(void)
768{
769 switch (GetActiveApplicationMode()) {
770 case AppMode1:
771 syslog(LOG_INFO, "ActiveApplicationMode:AppMode1");
772 break;
773 case AppMode2:
774 syslog(LOG_INFO, "ActiveApplicationMode:AppMode2");
775 break;
776 case AppMode3:
777 syslog(LOG_INFO, "ActiveApplicationMode:AppMode3");
778 break;
779 default:
780 syslog(LOG_INFO, "ActiveApplicationMode:Non");
781 break;
782 }
783} /* PutAppMode */
784
785/*
786 * スケジュールテーブルテスト用メインループ
787 *
788 * ユーザコマンドの受信と,コマンドごとの処理実行
789 */
790void
791schedule_table_sample_routine(void)
792{
793 uint8 command; /* コマンドバッファ */
794 ScheduleTableType scheduletable_id; /* コマンド引数バッファ */
795 ScheduleTableStatusType status; /* スケジュール状æ…
796‹å¼•æ•° */
797 TickType val; /* カウンタの現在値 */
798 uint8 flag = FALSE; /* リターンするか判定するためのフラグ */
799
800 syslog(LOG_INFO, "\t[ schedule table sample routine IN, press 't' OUT ]");
801 syslog(LOG_INFO, "");
802
803 scheduletable_id = scheduletable1;
804 /*
805 * コマンド実行ループ
806 */
807 while (1) {
808
809 WaitEvent(MainEvt); /* 10msの作業時間待
810ち */
811 ClearEvent(MainEvt);
812
813 /*
814 * å…
815¥åŠ›ã‚³ãƒžãƒ³ãƒ‰å–å¾—
816 */
817 syslog(LOG_INFO, "Input Command:");
818 command = GetCommand();
819 syslog(LOG_INFO, "%c", command);
820
821 /*
822 * コマンド判定
823 */
824 switch (command) {
825 case '1':
826 scheduletable_id = scheduletable1;
827 break;
828 case '2':
829 scheduletable_id = scheduletable2;
830 break;
831 case 'i':
832 IncrementCounter(SchtblSampleCnt);
833 val = 0U;
834 GetCounterValue(SchtblSampleCnt, &val);
835 if ((val % 5U) == 0U) {
836 syslog(LOG_INFO, "\tGetCounterValue(SchtblSampleCnt ) = %d", val);
837 }
838 break;
839 case 's':
840 syslog(LOG_INFO, "\tStartScheduleTableRel(scheduletable%d, 5)", scheduletable_id + 1U);
841 error_log(StartScheduleTableRel(scheduletable_id, 5U));
842 break;
843 case 'S':
844 syslog(LOG_INFO, "\tStartScheduleTableAbs(scheduletable%d, 5)", scheduletable_id + 1U);
845 error_log(StartScheduleTableAbs(scheduletable_id, 5U));
846 break;
847 case 'f':
848 syslog(LOG_INFO, "\tStopScheduleTable(scheduletable%d)", scheduletable_id + 1U);
849 error_log(StopScheduleTable(scheduletable_id));
850 break;
851 case 'n':
852 syslog(LOG_INFO, "\tNextScheduleTable(scheduletable%d, scheduletable%d)", scheduletable_id + 1U, scheduletable2 + 1U);
853 error_log(NextScheduleTable(scheduletable_id, scheduletable2));
854 break;
855 case 'N':
856 syslog(LOG_INFO, "\tNextScheduleTable(scheduletable%d, scheduletable%d)", scheduletable_id + 1U, scheduletable1 + 1U);
857 error_log(NextScheduleTable(scheduletable_id, scheduletable1));
858 break;
859 case 'g':
860 status = 0U;
861 syslog(LOG_INFO, "\tGetScheduleTableStatus(scheduletable%d, status)", scheduletable_id + 1U);
862 error_log(GetScheduleTableStatus(scheduletable_id, &status));
863 syslog(LOG_INFO, "\tstatus = %d", status);
864 break;
865 case 't':
866 syslog(LOG_INFO, "\t[ schedule table sample routine OUT, press 't' IN ]");
867 flag = TRUE;
868 break;
869 default:
870 /* コマンドが上記のケース以外なら処理は行わない */
871 break;
872 }
873 /* フラグが立っていた場合,リターンする */
874 if (flag == TRUE) {
875 return;
876 }
877 }
878} /* schedule_table_sample_routine */
879
880/*
881 * スケジュールテーブル確認用タスク6
882 */
883TASK(Task10)
884{
885 /*
886 * タスク起動ログ出力
887 */
888 syslog(LOG_INFO, "Task10 ACTIVATE");
889 WaitEvent(T10Evt);
890 syslog(LOG_INFO, "Task10 FINISH");
891 TerminateTask();
892} /* TASK( Task10 ) */
893
894
895/*
896 * スケジュールテーブル確認用タスク7
897 */
898TASK(Task11)
899{
900 /*
901 * タスク起動ログ出力
902 */
903 syslog(LOG_INFO, "Task11 ACTIVATE");
904 WaitEvent(T11Evt);
905 syslog(LOG_INFO, "Task11 FINISH");
906 TerminateTask();
907} /* TASK( Task11 ) */
908
909
910/*
911 * スケジュールテーブル確認用タスク8
912 */
913TASK(Task12)
914{
915 /*
916 * タスク起動ログ出力
917 */
918 syslog(LOG_INFO, "Task12 ACTIVATE");
919 WaitEvent(T12Evt);
920 syslog(LOG_INFO, "Task12 FINISH");
921 TerminateTask();
922} /* TASK( Task12 ) */
923
924/*
925 * 信頼関数動作確認用タスク11
926 */
927TASK(Task13)
928{
929 struct parameter_struct local;
930 sint32 pp = 10;
931
932 local.name1 = (sint32 *) &pp;
933 local.name2 = 2;
934
935 CallTrustedFunction(tfnt1, &local); /* 10*2 + 2 = 22 */
936 syslog(LOG_NOTICE, "Task13 tfnt1 ret = %d", local.return_value);
937
938 TerminateTask();
939} /* TASK( Task13 ) */
940
941/*
942 * 信頼関数動作確認用タスク12
943 */
944TASK(Task14)
945{
946 struct parameter_struct local;
947 sint32 pp = 20;
948
949 local.name1 = (sint32 *) &pp;
950 local.name2 = 4;
951
952 CallTrustedFunction(tfnt2, &local); /* 20*4 + 4 = 84 */
953 syslog(LOG_NOTICE, "Task14 tfnt2 ret = %d", local.return_value);
954
955} /* TASK( Task14 ) */
956
957/*
958 * 非信頼OSアプリケーション間アクセス権確認用タスク
959 */
960TASK(Task8)
961{
962 TaskStateType state;
963 /*
964 * タスク起動ログ出力
965 */
966 syslog(LOG_INFO, "Task8 ACTIVATE");
967 /*fatal_line_num++;*/
968 if (E_OK == GetTaskState(Task1, &state)) {
969 syslog(LOG_INFO, "GetTaskState(Task1, &state), state = %s", task_state_tbl[state]);
970 }
971 EnableInterruptSource(C2ISR_for_52);
972 EnableInterruptSource(C2ISR_for_53);
973 AllowAccess();
974 syslog(LOG_INFO, "Task8 FINISH");
975 TerminateTask();
976} /* TASK( Task8 ) */
977
978/*
979 * 非信頼OSアプリケーション間アクセス権確認用タスク
980 */
981TASK(Task9)
982{
983 TaskStateType state;
984 /*
985 * タスク起動ログ出力
986 */
987 syslog(LOG_INFO, "Task9 ACTIVATE");
988 if (E_OK == GetTaskState(Task2, &state)) {
989 syslog(LOG_INFO, "GetTaskState(Task2, &state), state = %s", task_state_tbl[state]);
990 }
991 syslog(LOG_INFO, "Task9 FINISH");
992 TerminateTask();
993} /* TASK( Task8 ) */
994
995/*
996 * IOC確認用タスク1
997 */
998TASK(IocTask1)
999{
1000 syslog(LOG_INFO, "IocTask1 ACTIVATE");
1001
1002 IocProk1();
1003
1004 syslog(LOG_INFO, "IocTask1 TERMINATE");
1005
1006 TerminateTask();
1007} /* TASK( IocTask1 ) */
1008
1009/*
1010 * IOC確認用タスク2
1011 */
1012TASK(IocTask2)
1013{
1014 syslog(LOG_INFO, "IocTask2 ACTIVATE");
1015
1016 IocProk1();
1017
1018 syslog(LOG_INFO, "IocTask2 TERMINATE");
1019
1020 TerminateTask();
1021} /* TASK( IocTask2 ) */
1022
1023/*
1024 * IOC確認用タスク内
1025部処理
1026 *
1027 */
1028static void
1029IocProk1(void)
1030{
1031 uint8 api; /* コマンド受信バッファ(API) */
1032 uint8 data[3]; /* 通信バッファ */
1033
1034 volatile sint32 i;
1035 Std_ReturnType ercd;
1036
1037 syslog(LOG_INFO, "Select IOC API:");
1038 api = GetCommandNoWait2();
1039#ifndef OMIT_ECHO
1040 syslog(LOG_INFO, "%c", api);
1041#endif /* OMIT_ECHO */
1042
1043 switch (api) {
1044 case '1':
1045 syslog(LOG_INFO, "Input send data:");
1046 data[0] = GetCommandNoWait2();
1047#ifndef OMIT_ECHO
1048 syslog(LOG_INFO, "%c", data[0]);
1049#endif /* OMIT_ECHO */
1050 syslog(LOG_INFO, "Call IocSend_IOC_QUE_0");
1051 error_log_ioc(IocSend_IOC_QUE_0(data[0]));
1052 break;
1053 case '2':
1054 syslog(LOG_INFO, "Input send data:");
1055 data[0] = GetCommandNoWait2();
1056#ifndef OMIT_ECHO
1057 syslog(LOG_INFO, "%c", data[0]);
1058#endif /* OMIT_ECHO */
1059
1060 syslog(LOG_INFO, "Call IocSend_IOC_QUE_1");
1061 error_log_ioc(IocSend_IOC_QUE_1(data[0]));
1062 break;
1063 case '3':
1064 for (i = 0; i < 3U; i++) {
1065 syslog(LOG_INFO, "Input send data%d:", i);
1066 data[i] = GetCommandNoWait2();
1067#ifndef OMIT_ECHO
1068 syslog(LOG_INFO, "%c", data[i]);
1069#endif /* OMIT_ECHO */
1070 }
1071 syslog(LOG_INFO, "Call IocWriteGroup_IOC_DEQUE");
1072 error_log_ioc(IocWriteGroup_IOC_DEQUE(data[0], data[1], data[2]));
1073 break;
1074 case '4':
1075 syslog(LOG_INFO, "Call IocReceive_IOC_QUE");
1076 ercd = IocReceive_IOC_QUE(&data[0]);
1077#if !defined(CFG_USE_ERRORHOOK)
1078 if (ercd != E_OK) {
1079 syslog(LOG_INFO, "Error:%d", atk2_ioc_strerror(ercd));
1080 }
1081#endif /* !defined( CFG_USE_ERRORHOOK ) */
1082 if ((ercd == IOC_E_OK) || (ercd == IOC_E_LOST_DATA)) {
1083 syslog(LOG_INFO, "recv data:%c", data[0]);
1084 }
1085 break;
1086 case '5':
1087 syslog(LOG_INFO, "Call IocReadGroup_IOC_DEQUE");
1088 error_log_ioc(IocReadGroup_IOC_DEQUE(&data[0], &data[1], &data[2]));
1089 for (i = 0; i < 3U; i++) {
1090 syslog(LOG_INFO, "recv data%d:%c", i, data[i]);
1091 }
1092 break;
1093 case '6':
1094 syslog(LOG_INFO, "Call IocEmptyQueue_IOC_QUE");
1095 error_log_ioc(IocEmptyQueue_IOC_QUE());
1096 break;
1097 default:
1098 syslog(LOG_INFO, "undefined command");
1099 break;
1100 }
1101} /* IocProk1 */
1102
1103/*
1104 * コマンド受信処理(ウェイト無し)
1105 */
1106uint8
1107GetCommandNoWait2(void)
1108{
1109 uint8 command; /* コマンド受信バッファ */
1110
1111 /*
1112 * コマンドを受信するまでループ
1113 */
1114 command = '\0';
1115 do {
1116 RecvPolSerialChar(&command); /* 受信バッファポーリング */
1117 if (command == '\n') {
1118 command = '\0';
1119 }
1120 } while (command == '\0');
1121
1122
1123 return(command);
1124} /* GetCommandNoWait2 */
1125
1126
1127/*
1128 * ActivateTask(IOC用) 実行・ログ出力処理
1129 */
1130void
1131PutActIocTsk(void)
1132{
1133 uint8 command; /* コマンド受信バッファ */
1134
1135 syslog(LOG_INFO, "Select IocTask:");
1136 command = GetCommand();
1137#ifndef OMIT_ECHO
1138 syslog(LOG_INFO, "%c", command);
1139#endif /* OMIT_ECHO */
1140
1141 switch (command) {
1142 case '1':
1143 error_log(ActivateTask(IocTask1));
1144 break;
1145 case '2':
1146 error_log(ActivateTask(IocTask2));
1147 break;
1148 case '3':
1149 error_log(CallTrustedFunction(actioctask3, NULL));
1150 break;
1151 case '4':
1152 error_log(CallTrustedFunction(actioctask4, NULL));
1153 break;
1154 default:
1155 syslog(LOG_INFO, "undefined command");
1156 break;
1157 }
1158} /* PutActIocTsk */
1159
1160TRUSTEDFUNCTION(TRUSTED_actioctask3, FunctionIndex, FunctionParams)
1161{
1162 error_log(ActivateTask(IocTask3));
1163
1164 return(E_OK);
1165}
1166
1167TRUSTEDFUNCTION(TRUSTED_actioctask4, FunctionIndex, FunctionParams)
1168{
1169 error_log(ActivateTask(IocTask4));
1170
1171 return(E_OK);
1172}
1173
1174extern void *p_runosap;
1175ISR(C2ISR_for_52)
1176{
1177 InterruptNumberType intno;
1178
1179 syslog(LOG_NOTICE, "ISR 52 activated");
1180 intno = 52U;
1181 CallTrustedFunction(tfnt6, (TrustedFunctionParameterRefType)&intno);
1182 /*Sample1ClearIntRequest(170U);*/
1183 intno = 53U;
1184 CallTrustedFunction(tfnt5, (TrustedFunctionParameterRefType)&intno);
1185 /*Sample1RaiseInterrupt(171U);*/
1186#if 0
1187 p_runosap = 0xffffffff;
1188#endif
1189 syslog(LOG_NOTICE, "ISR 52 terminated");
1190}
1191ISR(C2ISR_for_53)
1192{
1193 InterruptNumberType intno;
1194
1195 syslog(LOG_NOTICE, "ISR 53 activated");
1196 intno = 53U;
1197 CallTrustedFunction(tfnt6, (TrustedFunctionParameterRefType)&intno);
1198#if 0
1199 p_runosap = 0xffffffff;
1200#endif
1201#if 0
1202 TerminateApplication(NT_osap2, NO_RESTART);
1203#endif
1204#if 1
1205 TerminateApplication(NT_osap2, RESTART);
1206#endif
1207 /*Sample1ClearIntRequest(171U);*/
1208 syslog(LOG_NOTICE, "ISR 53 terminated");
1209}
1210
1211TRUSTEDFUNCTION(TRUSTED_ClearInt, FunctionIndex, FunctionParams)
1212{
1213 Sample1ClearIntRequest(*((InterruptNumberType *)FunctionParams));
1214
1215 return(E_OK);
1216}
1217
1218TRUSTEDFUNCTION(TRUSTED_RaiseInt, FunctionIndex, FunctionParams)
1219{
1220 Sample1RaiseInterrupt(*((InterruptNumberType *)FunctionParams));
1221
1222 return(E_OK);
1223}
1224
1225
Note: See TracBrowser for help on using the repository browser.