source: atk1_sh2/trunk/kernel/kernel.tf@ 5

Last change on this file since 5 was 5, checked in by msugi, 14 years ago

新世代カーネル対応コンフィギュレータと必要なファイル追加.

File size: 7.2 KB
Line 
1$
2$ TOPPERS Automotive Kernel
3$ Toyohashi Open Platform for Embedded Real-Time Systems
4$ Automotive Kernel
5$
6$ Copyright (C) 2010 by Meika Sugimoto
7$
8$ 上記著作権者は,以下の (1)(4) の条件か,Free Software Foundation
9$ によって公表されている GNU General Public License Version 2 に記
10$ 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
11$ を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
12$ 利用と呼ぶ)することを無償で許諾する.
13$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14$ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15$ スコード中に含まれていること.
16$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17$ 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
18$ 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
19$ の無保証規定を掲載すること.
20$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
21$ 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
22$ と.
23$ (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
24$ 作権表示,この利用条件および下記の無保証規定を掲載すること.
25$ (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
26$ 報告すること.
27$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
28$ 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
29$
30$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
31$ よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
32$ 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
33$ 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
34$
35
36$FILE "kernel_id.h"$
37
38/*$NL$
39$SPC$*$TAB$kernel_id.h$NL$
40$SPC$*$TAB$Generated time : $+CFG_VERSION$$NL$
41$SPC$*$TAB$CFG Vertion : $CFG_VERSION$$NL$
42$SPC$*/$NL$
43
44$NL$$NL$
45
46#ifndef KERNEL_ID_H$NL$
47#define KERNEL_ID_H$NL$
48
49$NL$
50
51$ OSオブジェクトの設定の出力
52
53/****** Object OS ******/$NL$
54$NL$
55
56$IF EQ(OS.STARTUPHOOK[0] , "TRUE")$
57 #define$SPC$USE_STARTUPHOOK$NL$
58$END$
59
60$IF EQ(OS.SHUTDOWNHOOK[0] , "TRUE")$
61 #define$SPC$USE_SHUTDOWNHOOK$NL$
62$END$
63
64$IF EQ(OS.ERRORHOOK[0] , "TRUE")$
65 #define$SPC$USE_ERRORHOOK$NL$
66$END$
67
68$IF EQ(OS.PRETASKHOOK[0] , "TRUE")$
69 #define$SPC$USE_PRETASKHOOK$NL$
70$END$
71
72$IF EQ(OS.POSTTASKHOOK[0] , "TRUE")$
73 #define$SPC$USE_POSTTASKHOOKK$NL$
74$END$
75
76$NL$
77
78$ これらのオブジェクトは特に出力する内容はない.
79
80/****** Object TASK ******/$NL$
81$NL$
82/****** Object COUNTER ******/$NL$
83$NL$
84/****** Object ALARM ******/$NL$
85$NL$
86/****** Object RESOURCE ******/$NL$
87$NL$
88/****** Object EVENT ******/$NL$
89$NL$
90/****** Object ISR ******/$NL$
91$NL$
92
93/****** Object APPMODE ******/$NL$
94$NL$
95
96
97$
98$ アプリケーションモード
99$
100
101$ 一つもない場合は警告とする(DEFAULT_APPMODEは使用可能O)
102
103$IF LENGTH(APPMODE.ID_LIST) == 0$
104 $WARNING$
105 $FORMAT("No Application Mode defined , you can use OSDEFAULTAPPMODE")$
106 $END$
107$ELSE$
108$IF LENGTH(APPMODE.ID_LIST) >= APPMODE_BITS$
109 $ERROR$
110 $FORMAT("Application Mode defined over %1%." , +APPMODE_BITS)$
111 $END$
112$END$
113$END$
114
115$ アプリケーションモードの値を付加して出力
116
117$FOREACH appmode APPMODE.ORDER_LIST$
118 #define$TAB$$appmode$$TAB$(AppModeType)(1U << $+appmode$)$NL$
119$END$
120
121$NL$
122#endif /* ! KERNEL_ID_H */$NL$
123
124
125$
126$ カウンタ及びアラームのオブジェクト定義
127$
128$FILE "kernel_cfg.c"$
129
130/****** Object COUNTER ******/$NL$
131$NL$
132
133$ カウンタIDの定義
134$FOREACH cntid COUNTER.ID_LIST$
135 const CounterType $cntid$ = $+cntid$;$NL$
136$END$
137
138$NL$
139
140const TickType cntinib_maxval[TNUM_COUNTER] =$NL$
141{$NL$
142$JOINEACH cntid COUNTER.ID_LIST " , \n"$
143 $TAB$$COUNTER.MAXALLOWEDVALUE[cntid]$$TAB$/* $cntid$ */
144$END$
145$NL$
146};
147
148$NL$
149$NL$
150
151const TickType cntinib_maxval2[TNUM_COUNTER] =$NL$
152{$NL$
153$JOINEACH cntid COUNTER.ID_LIST " , \n"$
154 $TAB$(($COUNTER.MAXALLOWEDVALUE[cntid]$ * 2) + 1)$TAB$/* $cntid$ */
155$END$
156$NL$
157};
158
159$NL$
160$NL$
161
162const TickType cntinib_tickbase[TNUM_COUNTER] =$NL$
163{$NL$
164$JOINEACH cntid COUNTER.ID_LIST " , \n"$
165 $TAB$$COUNTER.TICKSPERBASE[cntid]$$TAB$/* $cntid$ */
166$END$
167$NL$
168};
169
170$NL$
171$NL$
172
173const TickType cntinib_mincyc[TNUM_COUNTER] =$NL$
174{$NL$
175$JOINEACH cntid COUNTER.ID_LIST " , \n"$
176 $TAB$$COUNTER.MINCYCLE[cntid]$$TAB$/* $cntid$ */
177$END$
178$NL$
179};
180
181$NL$
182$NL$
183
184AlarmType cntcb_almque[TNUM_COUNTER];$NL$
185TickType cntcb_curval[TNUM_COUNTER];$NL$
186
187$NL$
188$NL$
189
190/****** Object ALARM ******/$NL$
191$NL$
192
193$ アラームIDの定義
194/* アラームIDの定義 */$NL$
195$FOREACH almid ALARM.ID_LIST$
196 const AlarmType $almid$ = $+almid$;$NL$
197$END$
198
199$NL$
200
201$ コールバックルーチンの生成
202$FOREACH almid ALARM.ID_LIST$
203 /* $almid$アラームで実行するコールバック関数の定義 */$NL$
204 $IF EQ(ALARM.ACTION[almid] , "SETEVENT")$
205 DeclareTask($ALARM.ACTION.SETEVENT.TASK[almid]$);$NL$
206 DeclareEvent($ALARM.ACTION.SETEVENT.EVENT[almid]$);$NL$
207 $NL$
208 static void _setevent_alarm_$almid$(void);$NL$
209 static void _setevent_alarm_$almid$(void)$NL$
210 {$NL$
211 $TAB$(void)SetEvent($ALARM.ACTION.SETEVENT.TASK[almid]$ , $ALARM.ACTION.SETEVENT.EVENT[almid]$);$NL$
212 }$NL$
213 $NL$
214 $ELSE$
215 $IF EQ(ALARM.ACTION[almid] , "ACTIVATETASK")$
216 DeclareTask($ALARM.ACTION.ACTIVATETASK.TASK[almid]$);$NL$
217 $NL$
218 static void _activatetak_alarm_$almid$(void);$NL$
219 static void _activatetak_alarm_$almid$(void)$NL$
220 {$NL$
221 $TAB$(void)ActivateTask($ALARM.ACTION.ACTIVATETASK.TASK[almid]$);$NL$
222 }$NL$
223 $NL$
224 $ELSE$
225 $IF EQ(ALARM.ACTION[almid] , "ALARMCALLBACK")$
226 extern void ALARMCALLBACKNAME(
227 $UNESCSTR(ALARM.ACTION.ALARMCALLBACK.ALARMCALLBACKNAME[almid])$)(void);$NL$
228 $NL$
229 $END$
230 $END$
231 $END$
232$END$
233
234$NL$
235
236$ データブロックの定義
237/* データブロックの定義 */$NL$
238const CounterType alminib_cntid[TNUM_ALARM] =$NL$
239{$NL$
240$JOINEACH almid ALARM.ID_LIST " , \n"$
241 $TAB$$+ALARM.COUNTER[almid]$$TAB$/* ( = $ALARM.COUNTER[almid]$) $almid$ */
242$END$
243$NL$
244};
245
246$NL$
247$NL$
248
249const FP alminib_cback[TNUM_ALARM] =$NL$
250{$NL$
251$JOINEACH almid ALARM.ID_LIST " , \n"$
252 $IF EQ(ALARM.ACTION[almid] , "SETEVENT")$
253 $TAB$_setevent_alarm_$almid$$TAB$/* $almid$ */
254 $ELSE$
255 $IF EQ(ALARM.ACTION[almid] , "ACTIVATETASK")$
256 $TAB$_activatetak_alarm_$almid$$TAB$/* $almid$ */
257 $ELSE$
258 $IF EQ(ALARM.ACTION[almid] , "ALARMCALLBACK")$
259 $TAB$ALARMCALLBACKNAME(
260 $UNESCSTR(ALARM.ACTION.ALARMCALLBACK.ALARMCALLBACKNAME[almid])$
261 )$TAB$/* $almid$ */
262 $END$
263 $END$
264 $END$
265$END$
266$NL$
267};
268
269$NL$
270$NL$
271
272const AppModeType alminib_autosta[TNUM_ALARM] =$NL$
273{$NL$
274$JOINEACH almid ALARM.ID_LIST " , \n"$
275 $IF EQ(ALARM.AUTOSTART[almid] , "TRUE")$
276 $TAB$(
277 $JOINEACH alm_appmode ALARM.AUTOSTART.TRUE.APPMODE[almid] " | "$
278 $alm_appmode$
279 $END$
280 )$TAB$/* $almid$ */
281 $ELSE$
282 $TAB$0x00000000$TAB$/* $almid$ */
283 $END$
284$END$
285$NL$
286};
287
288$NL$
289$NL$
290
291const TickType alminib_almval[TNUM_ALARM] =$NL$
292{$NL$
293$JOINEACH almid ALARM.ID_LIST " , \n"$
294 $IF EQ(ALARM.AUTOSTART[almid] , "TRUE")$
295 $TAB$$ALARM.AUTOSTART.TRUE.ALARMTIME[almid]$$TAB$/* $almid$ */
296 $ELSE$
297 $TAB$0$TAB$/* $almid$ */
298 $END$
299$END$
300$NL$
301};
302
303$NL$
304$NL$
305
306const TickType alminib_cycle[TNUM_ALARM] =$NL$
307{$NL$
308$JOINEACH almid ALARM.ID_LIST " , \n"$
309 $IF EQ(ALARM.AUTOSTART[almid] , "TRUE")$
310 $TAB$$ALARM.AUTOSTART.TRUE.CYCLETIME[almid]$$TAB$/* $almid$ */
311 $ELSE$
312 $TAB$0$TAB$/* $almid$ */
313 $END$
314$END$
315$NL$
316};
317
318$NL$
319$NL$
320
321AlarmType almcb_next[TNUM_ALARM];$NL$
322AlarmType almcb_prev[TNUM_ALARM];$NL$
323TickType almcb_almval[TNUM_ALARM];$NL$
324TickType almcb_cycle[TNUM_ALARM];$NL$
325
326$NL$
327$NL$
328
Note: See TracBrowser for help on using the repository browser.