source: autosar_os_training/trunk/program/event_task/toppers_atk2.c@ 124

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

AUTOSAR OS教材用のファイルをコミット.

File size: 5.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-2013 by Center for Embedded Computing Systems
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 * Copyright (C) 2011-2013 by FUJISOFT INCORPORATED, JAPAN
11 * Copyright (C) 2011-2013 by FUJITSU VLSI LIMITED, JAPAN
12 * Copyright (C) 2011-2013 by NEC Communication Systems, Ltd., JAPAN
13 * Copyright (C) 2011-2013 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
14 * Copyright (C) 2011-2013 by Renesas Electronics Corporation, JAPAN
15 * Copyright (C) 2011-2013 by Sunny Giken Inc., JAPAN
16 * Copyright (C) 2011-2013 by TOSHIBA CORPORATION, JAPAN
17 * Copyright (C) 2004-2013 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 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
43 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
44 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
45 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
46 * の責任を負わない.
47 *
48 * $Id: toppers_atk2.c 919 2014-01-09 11:19:14Z fsi-asanoto $
49 */
50
51#include "Os.h"
52#include "t_syslog.h"
53#include "t_stdlib.h"
54#include "sysmod/serial.h"
55#include "sysmod/syslog.h"
56#include "toppers_atk2.h"
57
58#include "sysmod/banner.h"
59#include "target_sysmod.h"
60#include "target_serial.h"
61
62#include "device.h"
63
64/*
65 * 内部関数プロトタイプ宣言
66 */
67sint32 main(void);
68
69TASK(dip_task);
70TASK(led_task);
71
72
73/*
74 * ユーザメイン関数
75 *
76 * アプリケーションモードの判断と,カーネル起動
77 */
78sint32
79main(void){
80 /*
81 * カーネル起動
82 */
83 StartOS(AppMode1);
84
85 while(1){
86 }
87} /* main */
88
89
90/*
91 * スタートアップフックルーチン
92 */
93#ifdef CFG_USE_STARTUPHOOK
94void
95StartupHook(void){
96 /* システムログ機能の初期化 */
97 syslog_initialize();
98
99 /* 出力するログ情報の重要度設定 */
100 syslog_msk_log(LOG_UPTO(LOG_INFO));
101
102 /* シリアルIOモジュール初期化処理 */
103 InitSerial();
104
105 /* カーネル起動メッセージの出力 */
106 print_banner();
107
108 /* PSW初期化 */
109 switch_push_init();
110
111 /* DSW初期化 */
112 switch_dip_init();
113} /* StartupHook */
114#endif /* CFG_USE_STARTUPHOOK */
115
116
117/*
118 * dip_task
119 */
120TASK(dip_task){
121 uint8 dsw_state;
122 uint8 pre_dsw_state = 0;
123
124 syslog(LOG_INFO, "dip_task Start!");
125
126 for(;;) {
127 /* DSW状態取得 */
128 dsw_state = switch_dip_sense();
129
130 /* DSW状態判定 */
131 if(dsw_state != pre_dsw_state){
132 if(((dsw_state & DSW1) == DSW1) && ((pre_dsw_state & DSW1) != DSW1)){
133 syslog(LOG_INFO, "DSW1 ON");
134 SetEvent(led_task, DSW1_ON);
135 }
136
137 if(((dsw_state & DSW1) != DSW1) && ((pre_dsw_state & DSW1) == DSW1)){
138 syslog(LOG_INFO, "DSW1 OFF");
139 SetEvent(led_task, DSW1_OFF);
140 }
141
142 if(((dsw_state & DSW2) == DSW2) && ((pre_dsw_state & DSW2) != DSW2)){
143 syslog(LOG_INFO, "DSW2 ON");
144 SetEvent(led_task, DSW2_ON);
145 }
146
147 if(((dsw_state & DSW2) != DSW2) && ((pre_dsw_state & DSW2) == DSW2)){
148 syslog(LOG_INFO, "DSW2 OFF");
149 SetEvent(led_task, DSW2_OFF);
150 }
151
152 if(((dsw_state & DSW3) == DSW3) && ((pre_dsw_state & DSW3) != DSW3)){
153 syslog(LOG_INFO, "DSW3 ON");
154 SetEvent(led_task, DSW3_ON);
155 }
156
157 if(((dsw_state & DSW3) != DSW3) && ((pre_dsw_state & DSW3) == DSW3)){
158 syslog(LOG_INFO, "DSW3 OFF");
159 SetEvent(led_task, DSW3_OFF);
160 }
161
162 if(((dsw_state & DSW4) == DSW4) && ((pre_dsw_state & DSW4) != DSW4)){
163 syslog(LOG_INFO, "DSW4 ON");
164 SetEvent(led_task, DSW4_ON);
165 }
166
167 if(((dsw_state & DSW4) != DSW4) && ((pre_dsw_state & DSW4) == DSW4)){
168 syslog(LOG_INFO, "DSW4 OFF");
169 SetEvent(led_task, DSW4_OFF);
170 }
171
172 pre_dsw_state = dsw_state;
173
174 Schedule();
175 }
176 }
177} /* TASK( dip_task ) */
178
179
180/*
181 * led_task
182 */
183TASK(led_task){
184 uint8 led_state;
185 EventMaskType mask;
186
187 syslog(LOG_INFO, "led_task Start!");
188
189 for(;;){
190 WaitEvent(DSW1_ON|DSW1_OFF|DSW2_ON|DSW2_OFF|DSW3_ON|DSW3_OFF|DSW4_ON|DSW4_OFF);
191 GetEvent(led_task, &mask);
192 ClearEvent(mask);
193
194 led_state = 0;
195
196 /* 状態判定 */
197 if((mask & DSW1_ON) == DSW1_ON){
198 led_state |= LED1;
199 }
200
201 if((mask & DSW2_ON) == DSW2_ON){
202 led_state |= LED2;
203 }
204
205 if((mask & DSW3_ON) == DSW3_ON){
206 led_state |= LED3;
207 }
208
209 if((mask & DSW4_ON) == DSW4_ON){
210 led_state |= LED4;
211 }
212
213 /* LED書込み */
214 led_out(led_state);
215 }
216} /* TASK( led_task ) */
217
Note: See TracBrowser for help on using the repository browser.