source: atk2-sc3_fl850f1l/arch/ccrh/sample/sample2.c@ 117

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

ATK2-SC3 1.3.2 FL850F1L(RH850F1L)依存部(GCC/GHS/CCRH)を追加

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