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

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

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

  • Property svn:executable set to *
File size: 26.2 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
327 /*
328 * タスク起動ログ出力
329 */
330 syslog(LOG_INFO, "%s ACTIVATE", task_name_tbl[task_no]);
331
332 /*
333 * コマンド実行ループ
334 */
335 while (1) {
336
337 /*
338 * コマンド取得
339 */
340 while (command_tbl[task_no] == '\0') {
341 }
342 command = command_tbl[task_no];
343 command_tbl[task_no] = 0U;
344
345 /*
346 * コマンド判定
347 */
348 switch (command) {
349 case 'A':
350 PutTermTsk(task_no);
351 break;
352 case '!':
353 case '"':
354 case '#':
355 case '$':
356 case '%':
357 PutChainTsk(task_no, (command - '!'));
358 break;
359 case 'z':
360 PutTaskID();
361 break;
362 case 'k':
363 PutGetTskRes();
364 break;
365 case 'K':
366 PutRelTskRes();
367 break;
368 case 'i':
369 PutGetCntRes();
370 break;
371 case 'w':
372 if (task_no < 5U) {
373 PutClrEvt(task_no);
374 }
375 break;
376 case 'W':
377 if (task_no < 5U) {
378 PutWaitEvt(task_no);
379 }
380 break;
381 default:
382 /* 上記のコマンド以外の場合,処理は行わない */
383 break;
384 }
385 }
386} /* TaskProk */
387
388/*
389 * コマンド受信処理
390 */
391uint8
392GetCommand(void)
393{
394 uint8 command; /* コマンド受信バッファ */
395
396 /*
397 * コマンドを受信するまでループ
398 */
399 command = '\0';
400 do {
401 WaitEvent(MainEvt); /* 10msウェイト */
402 ClearEvent(MainEvt);
403 RecvPolSerialChar(&command); /* 受信バッファポーリング */
404 if (command == '\n') {
405 command = '\0';
406 }
407 } while (command == '\0');
408
409
410 return(command);
411} /* GetCommand */
412
413/*
414 * ActivateTask 実行・ログ出力処理
415 */
416void
417PutActTsk(uint8 task_no)
418{
419 struct parameter_struct local;
420
421 syslog(LOG_INFO, "Call ActivateTask(%s)", task_name_tbl[task_no]);
422
423 if (task_no < 5U) {
424 error_log(ActivateTask(task_id_tbl[task_no]));
425 }
426 else {
427 local.task_no = task_id_tbl[task_no];
428 CallTrustedFunction(tfnt4, &local); /* ActivateTask(task_name_tbl[task_no]) */
429 }
430
431} /* PutActTsk */
432
433/*
434 * ActivateTask 実行(NonPriTask)・ログ出力処理
435 */
436void
437PutActNonPriTsk(void)
438{
439 struct parameter_struct local;
440
441 syslog(LOG_INFO, "Call ActivateTask(NonPriTask)");
442
443 local.task_no = NonPriTask;
444 CallTrustedFunction(tfnt4, &local); /* ActivateTask(NonPriTask) */
445
446} /* PutActNonPriTsk */
447
448/*
449 * TerminateTask 実行・ログ出力処理
450 */
451void
452PutTermTsk(uint8 task_no)
453{
454 StatusType ercd; /* エラーコード */
455
456 syslog(LOG_INFO, "%s TERMINATE", task_name_tbl[task_no]);
457
458 ercd = TerminateTask();
459 ShutdownOS(ercd);
460}
461
462/*
463 * ChainTask 実行・ログ出力処理
464 */
465void
466PutChainTsk(uint8 from_task_no, uint8 to_task_no)
467{
468 StatusType ercd; /* エラーコード */
469
470 syslog(LOG_INFO, "Call ChainTask(%s)", task_name_tbl[to_task_no]);
471 syslog(LOG_INFO, "%s TERMINATE", task_name_tbl[from_task_no]);
472
473 ercd = ChainTask(task_id_tbl[to_task_no]);
474 if (ercd == E_OS_LIMIT) {
475 syslog(LOG_INFO, "Call TerminateTask()");
476 syslog(LOG_INFO, "Because of ChainTask E_OS_LIMIT return");
477 ercd = TerminateTask();
478 }
479 ShutdownOS(ercd);
480} /* PutChainTsk */
481
482/*
483 * Schedule 実行・ログ出力処理
484 */
485void
486PutSchedule(void)
487{
488 syslog(LOG_INFO, "Call ActivateTask(HighPriorityTask)");
489
490 error_log(ActivateTask(HighPriorityTask));
491 syslog(LOG_INFO, "Call Schedule()");
492
493 error_log(Schedule());
494 syslog(LOG_INFO, "Retrun Schedule()");
495} /* PutSchedule */
496
497/*
498 * GetTaskID 実行・ログ出力処理
499 */
500void
501PutTaskID(void)
502{
503 TaskType task_id; /* タスクID取得バッファ */
504
505 error_log(GetTaskID(&task_id));
506
507 syslog(LOG_INFO, "TaskID:%d", task_id);
508} /* PutTaskID */
509
510/*
511 * GetTaskState 実行・ログ出力処理
512 * Task1〜Task5,Task7取得時エラーとならない
513 * Task6取得時エラーとなる
514 */
515void
516PutTaskState(uint8 task_no)
517{
518 TaskStateType state; /* タスクID取得バッファ */
519
520 error_log(GetTaskState(task_id_tbl[task_no], &state));
521
522 syslog(LOG_INFO, task_name_tbl[task_no]);
523 syslog(LOG_INFO, " State:%s", task_state_tbl[state]);
524} /* PutTaskState */
525
526/*
527 * DisableAllInterrupts/EnableAllInterrupts 実行・ログ出力処理
528 */
529void
530PutDisAllInt(void)
531{
532 syslog(LOG_INFO, "Call DisableAllInterrupts");
533
534 DisableAllInterrupts();
535
536 PutHwCnt3();
537 syslog(LOG_INFO, "Call EnableAllInterrupts");
538
539 EnableAllInterrupts();
540} /* PutDisAllInt */
541
542/*
543 * SuspendAllInterrupts/ResumeAllInterrupts 実行・ログ出力処理
544 */
545void
546PutSusAllInt(void)
547{
548 syslog(LOG_INFO, "Call SuspendAllInterrupts");
549
550 SuspendAllInterrupts();
551
552 PutHwCnt3();
553 syslog(LOG_INFO, "Call SuspendAllInterrupts");
554
555 SuspendAllInterrupts();
556
557 PutHwCnt3();
558 syslog(LOG_INFO, "Call ResumeAllInterrupts");
559
560 ResumeAllInterrupts();
561
562 PutHwCnt3();
563 syslog(LOG_INFO, "Call ResumeAllInterrupts");
564
565 ResumeAllInterrupts();
566} /* PutSusAllInt */
567
568/*
569 * SuspendOSInterrupts/ResumeOSInterrupts 実行・ログ出力処理
570 */
571void
572PutSusOSInt(void)
573{
574 syslog(LOG_INFO, "Call SuspendOSInterrupts");
575
576 SuspendOSInterrupts();
577
578 PutHwCnt3();
579 syslog(LOG_INFO, "Call SuspendOSInterrupts");
580
581 SuspendOSInterrupts();
582
583 PutHwCnt3();
584 syslog(LOG_INFO, "Call SuspendAllInterrupts");
585
586 SuspendAllInterrupts();
587
588 PutHwCnt3();
589 syslog(LOG_INFO, "Call ResumeAllInterrupts");
590
591 ResumeAllInterrupts();
592
593 PutHwCnt3();
594 syslog(LOG_INFO, "Call ResumeOSInterrupts");
595
596 ResumeOSInterrupts();
597
598 PutHwCnt3();
599 syslog(LOG_INFO, "Call ResumeOSInterrupts");
600
601 ResumeOSInterrupts();
602} /* PutSusOSInt */
603
604/*
605 * 割込み動作テスト用HWカウンタ値のログ出力処理
606 */
607void
608PutHwCnt3(void)
609{
610 uint32 isr1_cnt = 0U; /* C1ISR カウント値取得バッファ */
611 uint32 isr2_cnt = 0U; /* C2ISR カウント値取得バッファ */
612 uint8 cnt; /* 出力回数カウンタ */
613
614 for (cnt = 0U; cnt < 3U; cnt++) {
615 GetHwCnt(&isr1_cnt, &isr2_cnt);
616 syslog(LOG_INFO, "C1ISR Cnt:%d, C2ISR Cnt:%d",
617 isr1_cnt, isr2_cnt);
618 }
619} /* PutHwCnt3 */
620
621/*
622 * GetResource/ReleaseResource 実行(割込みレベル)・ログ出力処理
623 */
624void
625PutGetCntRes(void)
626{
627 syslog(LOG_INFO, "Call GetResource(CntRes)");
628 error_log(GetResource(CntRes));
629
630 PutHwCnt3();
631 syslog(LOG_INFO, "Call ReleaseResource(CntRes)");
632
633 error_log(ReleaseResource(CntRes));
634} /* PutGetCntRes */
635
636/*
637 * GetResource 実行(タスクレベル)・ログ出力処理
638 */
639void
640PutGetTskRes(void)
641{
642 syslog(LOG_INFO, "Call GetResource(TskLevelRes)");
643
644 error_log(GetResource(TskLevelRes));
645} /* PutGetTskRes */
646
647/*
648 * ReleaseResource 実行(タスクレベル)・ログ出力処理
649 */
650void
651PutRelTskRes(void)
652{
653 syslog(LOG_INFO, "Call ReleaseResource(TskLevelRes)");
654
655 error_log(ReleaseResource(TskLevelRes));
656}
657
658/*
659 * SetEvent 実行・ログ出力処理
660 */
661void
662PutSetEvt(uint8 task_no)
663{
664 syslog(LOG_INFO, "Call SetEvent(%s, %s)",
665 task_name_tbl[task_no], event_name_tbl[task_no]);
666
667 error_log(SetEvent(task_id_tbl[task_no], event_mask_tbl[task_no]));
668} /* PutSetEvt */
669
670/*
671 * ClearEvent 実行・ログ出力処理
672 */
673void
674PutClrEvt(uint8 task_no)
675{
676 syslog(LOG_INFO, "Call ClearEvent(%s)", event_name_tbl[task_no]);
677
678 error_log(ClearEvent(event_mask_tbl[task_no]));
679} /* PutClrEvt */
680
681/*
682 * GetEvent 実行・ログ出力処理
683 */
684void
685PutGetEvt(uint8 task_no)
686{
687 EventMaskType mask; /* イベントマスク取得バッファ */
688
689 error_log(GetEvent(task_id_tbl[task_no], &mask));
690
691 syslog(LOG_INFO, "%s Event Mask:0x%x", task_name_tbl[task_no], mask);
692} /* PutGetEvt */
693
694/*
695 * WaitEvent 実行・ログ出力処理
696 */
697void
698PutWaitEvt(uint8 task_no)
699{
700 syslog(LOG_INFO, "Call WaitEvent(%s)", event_name_tbl[task_no]);
701
702 error_log(WaitEvent(event_mask_tbl[task_no]));
703 syslog(LOG_INFO, "Return WaitEvent(%s)", event_name_tbl[task_no]);
704} /* PutWaitEvt */
705
706/*
707 * GetAlarmBase 実行・ログ出力処理
708 */
709void
710PutArmBase(void)
711{
712 AlarmBaseType info; /* アラームベース情
713報取得バッファ */
714
715 error_log(GetAlarmBase(MainCycArm, &info));
716
717 syslog(LOG_INFO, "MainCycArm Base:");
718 syslog(LOG_INFO, "\tMAXALLOWEDVALUE=%d", info.maxallowedvalue);
719 syslog(LOG_INFO, "\tTICKSPERBASE=%d", info.ticksperbase);
720 syslog(LOG_INFO, "\tMINCYCLE=%d", info.mincycle);
721} /* PutArmBase */
722
723/*
724 * PutArmTick 実行・ログ出力処理
725 */
726void
727PutArmTick(void)
728{
729 TickType tick; /* 残りティック取得バッファ */
730
731 error_log(GetAlarm(MainCycArm, &tick));
732
733 syslog(LOG_INFO, "MainCycArm Tick:%d", tick);
734} /* PutArmTick */
735
736/*
737 * SetRelAlarm 実行・ログ出力処理
738 */
739void
740PutSetRel(uint8 alarm_no, uint8 tick_no, uint8 cycle_no)
741{
742 syslog(LOG_INFO, "Call SetRelAlarm(%s, %d, %d)",
743 alarm_name_tbl[alarm_no], tick_tbl[tick_no], cycle_tbl[cycle_no]);
744
745 error_log(SetRelAlarm(alarm_id_tbl[alarm_no],
746 tick_tbl[tick_no], cycle_tbl[cycle_no]));
747} /* PutSetRel */
748
749/*
750 * CancelAlarm 実行・ログ出力処理
751 */
752void
753PutCanArm(void)
754{
755 syslog(LOG_INFO, "Call CancelAlarm(ActTskArm)");
756
757 error_log(CancelAlarm(ActTskArm));
758} /* PutCanArm */
759
760/*
761 * GetActiveApplicationMode 実行・ログ出力処理
762 */
763void
764PutAppMode(void)
765{
766 switch (GetActiveApplicationMode()) {
767 case AppMode1:
768 syslog(LOG_INFO, "ActiveApplicationMode:AppMode1");
769 break;
770 case AppMode2:
771 syslog(LOG_INFO, "ActiveApplicationMode:AppMode2");
772 break;
773 case AppMode3:
774 syslog(LOG_INFO, "ActiveApplicationMode:AppMode3");
775 break;
776 default:
777 syslog(LOG_INFO, "ActiveApplicationMode:Non");
778 break;
779 }
780} /* PutAppMode */
781
782/*
783 * スケジュールテーブルテスト用メインループ
784 *
785 * ユーザコマンドの受信と,コマンドごとの処理実行
786 */
787void
788schedule_table_sample_routine(void)
789{
790 uint8 command; /* コマンドバッファ */
791 ScheduleTableType scheduletable_id; /* コマンド引数バッファ */
792 ScheduleTableStatusType status; /* スケジュール状æ…
793‹å¼•æ•° */
794 TickType val; /* カウンタの現在値 */
795 uint8 flag = FALSE; /* リターンするか判定するためのフラグ */
796
797 syslog(LOG_INFO, "\t[ schedule table sample routine IN, press 't' OUT ]");
798 syslog(LOG_INFO, "");
799
800 scheduletable_id = scheduletable1;
801 /*
802 * コマンド実行ループ
803 */
804 while (1) {
805
806 WaitEvent(MainEvt); /* 10msの作業時間待
807ち */
808 ClearEvent(MainEvt);
809
810 /*
811 * å…
812¥åŠ›ã‚³ãƒžãƒ³ãƒ‰å–å¾—
813 */
814 syslog(LOG_INFO, "Input Command:");
815 command = GetCommand();
816 syslog(LOG_INFO, "%c", command);
817
818 /*
819 * コマンド判定
820 */
821 switch (command) {
822 case '1':
823 scheduletable_id = scheduletable1;
824 break;
825 case '2':
826 scheduletable_id = scheduletable2;
827 break;
828 case 'i':
829 IncrementCounter(SchtblSampleCnt);
830 val = 0U;
831 GetCounterValue(SchtblSampleCnt, &val);
832 if ((val % 5U) == 0U) {
833 syslog(LOG_INFO, "\tGetCounterValue(SchtblSampleCnt ) = %d", val);
834 }
835 break;
836 case 's':
837 syslog(LOG_INFO, "\tStartScheduleTableRel(scheduletable%d, 5)", scheduletable_id + 1U);
838 error_log(StartScheduleTableRel(scheduletable_id, 5U));
839 break;
840 case 'S':
841 syslog(LOG_INFO, "\tStartScheduleTableAbs(scheduletable%d, 5)", scheduletable_id + 1U);
842 error_log(StartScheduleTableAbs(scheduletable_id, 5U));
843 break;
844 case 'f':
845 syslog(LOG_INFO, "\tStopScheduleTable(scheduletable%d)", scheduletable_id + 1U);
846 error_log(StopScheduleTable(scheduletable_id));
847 break;
848 case 'n':
849 syslog(LOG_INFO, "\tNextScheduleTable(scheduletable%d, scheduletable%d)", scheduletable_id + 1U, scheduletable2 + 1U);
850 error_log(NextScheduleTable(scheduletable_id, scheduletable2));
851 break;
852 case 'N':
853 syslog(LOG_INFO, "\tNextScheduleTable(scheduletable%d, scheduletable%d)", scheduletable_id + 1U, scheduletable1 + 1U);
854 error_log(NextScheduleTable(scheduletable_id, scheduletable1));
855 break;
856 case 'g':
857 status = 0U;
858 syslog(LOG_INFO, "\tGetScheduleTableStatus(scheduletable%d, status)", scheduletable_id + 1U);
859 error_log(GetScheduleTableStatus(scheduletable_id, &status));
860 syslog(LOG_INFO, "\tstatus = %d", status);
861 break;
862 case 't':
863 syslog(LOG_INFO, "\t[ schedule table sample routine OUT, press 't' IN ]");
864 flag = TRUE;
865 break;
866 default:
867 /* コマンドが上記のケース以外なら処理は行わない */
868 break;
869 }
870 /* フラグが立っていた場合,リターンする */
871 if (flag == TRUE) {
872 return;
873 }
874 }
875} /* schedule_table_sample_routine */
876
877/*
878 * スケジュールテーブル確認用タスク6
879 */
880TASK(Task10)
881{
882 /*
883 * タスク起動ログ出力
884 */
885 syslog(LOG_INFO, "Task10 ACTIVATE");
886 WaitEvent(T10Evt);
887 syslog(LOG_INFO, "Task10 FINISH");
888 TerminateTask();
889} /* TASK( Task10 ) */
890
891
892/*
893 * スケジュールテーブル確認用タスク7
894 */
895TASK(Task11)
896{
897 /*
898 * タスク起動ログ出力
899 */
900 syslog(LOG_INFO, "Task11 ACTIVATE");
901 WaitEvent(T11Evt);
902 syslog(LOG_INFO, "Task11 FINISH");
903 TerminateTask();
904} /* TASK( Task11 ) */
905
906
907/*
908 * スケジュールテーブル確認用タスク8
909 */
910TASK(Task12)
911{
912 /*
913 * タスク起動ログ出力
914 */
915 syslog(LOG_INFO, "Task12 ACTIVATE");
916 WaitEvent(T12Evt);
917 syslog(LOG_INFO, "Task12 FINISH");
918 TerminateTask();
919} /* TASK( Task12 ) */
920
921/*
922 * 信頼関数動作確認用タスク11
923 */
924TASK(Task13)
925{
926 struct parameter_struct local;
927 sint32 pp = 10;
928
929 local.name1 = (sint32 *) &pp;
930 local.name2 = 2;
931
932 CallTrustedFunction(tfnt1, &local); /* 10*2 + 2 = 22 */
933 syslog(LOG_NOTICE, "Task13 tfnt1 ret = %d", local.return_value);
934
935 TerminateTask();
936} /* TASK( Task13 ) */
937
938/*
939 * 信頼関数動作確認用タスク12
940 */
941TASK(Task14)
942{
943 struct parameter_struct local;
944 sint32 pp = 20;
945
946 local.name1 = (sint32 *) &pp;
947 local.name2 = 4;
948
949 CallTrustedFunction(tfnt2, &local); /* 20*4 + 4 = 84 */
950 syslog(LOG_NOTICE, "Task14 tfnt2 ret = %d", local.return_value);
951
952} /* TASK( Task14 ) */
953
954/*
955 * 非信頼OSアプリケーション間アクセス権確認用タスク
956 */
957TASK(Task8)
958{
959 TaskStateType state;
960 /*
961 * タスク起動ログ出力
962 */
963 syslog(LOG_INFO, "Task8 ACTIVATE");
964 if (E_OK == GetTaskState(Task1, &state)) {
965 syslog(LOG_INFO, "GetTaskState(Task1, &state), state = %s", task_state_tbl[state]);
966 }
967 syslog(LOG_INFO, "Task8 FINISH");
968 TerminateTask();
969} /* TASK( Task8 ) */
970
971/*
972 * 非信頼OSアプリケーション間アクセス権確認用タスク
973 */
974TASK(Task9)
975{
976 TaskStateType state;
977 /*
978 * タスク起動ログ出力
979 */
980 syslog(LOG_INFO, "Task9 ACTIVATE");
981 if (E_OK == GetTaskState(Task2, &state)) {
982 syslog(LOG_INFO, "GetTaskState(Task2, &state), state = %s", task_state_tbl[state]);
983 }
984 syslog(LOG_INFO, "Task9 FINISH");
985 TerminateTask();
986} /* TASK( Task8 ) */
987
988/*
989 * IOC確認用タスク1
990 */
991TASK(IocTask1)
992{
993 syslog(LOG_INFO, "IocTask1 ACTIVATE");
994
995 IocProk1();
996
997 syslog(LOG_INFO, "IocTask1 TERMINATE");
998
999 TerminateTask();
1000} /* TASK( IocTask1 ) */
1001
1002/*
1003 * IOC確認用タスク2
1004 */
1005TASK(IocTask2)
1006{
1007 syslog(LOG_INFO, "IocTask2 ACTIVATE");
1008
1009 IocProk1();
1010
1011 syslog(LOG_INFO, "IocTask2 TERMINATE");
1012
1013 TerminateTask();
1014} /* TASK( IocTask2 ) */
1015
1016/*
1017 * IOC確認用タスク内
1018部処理
1019 *
1020 */
1021static void
1022IocProk1(void)
1023{
1024 uint8 api; /* コマンド受信バッファ(API) */
1025 uint8 data[3]; /* 通信バッファ */
1026
1027 volatile sint32 i;
1028 Std_ReturnType ercd;
1029
1030 syslog(LOG_INFO, "Select IOC API:");
1031 api = GetCommandNoWait2();
1032#ifndef OMIT_ECHO
1033 syslog(LOG_INFO, "%c", api);
1034#endif /* OMIT_ECHO */
1035
1036 switch (api) {
1037 case '1':
1038 syslog(LOG_INFO, "Input send data:");
1039 data[0] = GetCommandNoWait2();
1040#ifndef OMIT_ECHO
1041 syslog(LOG_INFO, "%c", data[0]);
1042#endif /* OMIT_ECHO */
1043 syslog(LOG_INFO, "Call IocSend_IOC_QUE_0");
1044 error_log_ioc(IocSend_IOC_QUE_0(data[0]));
1045 break;
1046 case '2':
1047 syslog(LOG_INFO, "Input send data:");
1048 data[0] = GetCommandNoWait2();
1049#ifndef OMIT_ECHO
1050 syslog(LOG_INFO, "%c", data[0]);
1051#endif /* OMIT_ECHO */
1052
1053 syslog(LOG_INFO, "Call IocSend_IOC_QUE_1");
1054 error_log_ioc(IocSend_IOC_QUE_1(data[0]));
1055 break;
1056 case '3':
1057 for (i = 0; i < 3U; i++) {
1058 syslog(LOG_INFO, "Input send data%d:", i);
1059 data[i] = GetCommandNoWait2();
1060#ifndef OMIT_ECHO
1061 syslog(LOG_INFO, "%c", data[i]);
1062#endif /* OMIT_ECHO */
1063 }
1064 syslog(LOG_INFO, "Call IocWriteGroup_IOC_DEQUE");
1065 error_log_ioc(IocWriteGroup_IOC_DEQUE(data[0], data[1], data[2]));
1066 break;
1067 case '4':
1068 syslog(LOG_INFO, "Call IocReceive_IOC_QUE");
1069 ercd = IocReceive_IOC_QUE(&data[0]);
1070#if !defined(CFG_USE_ERRORHOOK)
1071 if (ercd != E_OK) {
1072 syslog(LOG_INFO, "Error:%d", atk2_ioc_strerror(ercd));
1073 }
1074#endif /* !defined( CFG_USE_ERRORHOOK ) */
1075 if ((ercd == IOC_E_OK) || (ercd == IOC_E_LOST_DATA)) {
1076 syslog(LOG_INFO, "recv data:%c", data[0]);
1077 }
1078 break;
1079 case '5':
1080 syslog(LOG_INFO, "Call IocReadGroup_IOC_DEQUE");
1081 error_log_ioc(IocReadGroup_IOC_DEQUE(&data[0], &data[1], &data[2]));
1082 for (i = 0; i < 3U; i++) {
1083 syslog(LOG_INFO, "recv data%d:%c", i, data[i]);
1084 }
1085 break;
1086 case '6':
1087 syslog(LOG_INFO, "Call IocEmptyQueue_IOC_QUE");
1088 error_log_ioc(IocEmptyQueue_IOC_QUE());
1089 break;
1090 default:
1091 syslog(LOG_INFO, "undefined command");
1092 break;
1093 }
1094} /* IocProk1 */
1095
1096/*
1097 * コマンド受信処理(ウェイト無し)
1098 */
1099uint8
1100GetCommandNoWait2(void)
1101{
1102 uint8 command; /* コマンド受信バッファ */
1103
1104 /*
1105 * コマンドを受信するまでループ
1106 */
1107 command = '\0';
1108 do {
1109 RecvPolSerialChar(&command); /* 受信バッファポーリング */
1110 if (command == '\n') {
1111 command = '\0';
1112 }
1113 } while (command == '\0');
1114
1115
1116 return(command);
1117} /* GetCommandNoWait2 */
1118
1119
1120/*
1121 * ActivateTask(IOC用) 実行・ログ出力処理
1122 */
1123void
1124PutActIocTsk(void)
1125{
1126 uint8 command; /* コマンド受信バッファ */
1127
1128 syslog(LOG_INFO, "Select IocTask:");
1129 command = GetCommand();
1130#ifndef OMIT_ECHO
1131 syslog(LOG_INFO, "%c", command);
1132#endif /* OMIT_ECHO */
1133
1134 switch (command) {
1135 case '1':
1136 error_log(ActivateTask(IocTask1));
1137 break;
1138 case '2':
1139 error_log(ActivateTask(IocTask2));
1140 break;
1141 case '3':
1142 error_log(CallTrustedFunction(actioctask3, NULL));
1143 break;
1144 case '4':
1145 error_log(CallTrustedFunction(actioctask4, NULL));
1146 break;
1147 default:
1148 syslog(LOG_INFO, "undefined command");
1149 break;
1150 }
1151} /* PutActIocTsk */
1152
1153TRUSTEDFUNCTION(TRUSTED_actioctask3, FunctionIndex, FunctionParams)
1154{
1155 error_log(ActivateTask(IocTask3));
1156
1157 return(E_OK);
1158}
1159
1160TRUSTEDFUNCTION(TRUSTED_actioctask4, FunctionIndex, FunctionParams)
1161{
1162 error_log(ActivateTask(IocTask4));
1163
1164 return(E_OK);
1165}
Note: See TracBrowser for help on using the repository browser.