source: atk2-sc3-1.4.0-ntisr/arch/ccrh/sample/sample2.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対応を追加

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