source: asp_wo_cfg/trunk/kernel/kernel_cfg.c@ 72

Last change on this file since 72 was 49, checked in by ertl-hiro, 12 years ago

asp_wo_kernelをコミット。

  • Property svn:keywords set to Id
File size: 7.6 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005-2012 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16 * スコード中に含まれていること.
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
20 * の無保証規定を掲載すること.
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
23 * と.
24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
27 * 報告すること.
28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
32 * 免責すること.
33 *
34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
38 * の責任を負わない.
39 *
40 * $Id: kernel_cfg.c 49 2012-09-06 04:41:53Z ertl-hiro $
41 */
42
43/*
44 * カーネル標準ヘッダファイル
45 */
46#include "kernel_impl.h"
47
48/*
49 * カーネルの各ヘッダファイル
50 */
51#include "task.h"
52#include "semaphore.h"
53#include "eventflag.h"
54#include "dataqueue.h"
55#include "pridataq.h"
56#include "mailbox.h"
57#include "mempfix.h"
58#include "cyclic.h"
59#include "alarm.h"
60#include "interrupt.h"
61#include "exception.h"
62#include "time_event.h"
63
64/*
65 * カーネルコンフィギュレーション記述ヘッダファイル
66 */
67#include "kernel_cfg.h"
68
69/*
70 * 内容が空の配列を生成するためのマクロ
71 */
72#ifndef TOPPERS_EMPTY_LABEL
73#define TOPPERS_EMPTY_LABEL(type, var) type var[0]
74#endif
75
76/*
77 * タスク管理機能
78 */
79
80const ID tmax_tskid = (TMIN_TSKID + TNUM_TSKID - 1);
81
82#if TNUM_TSKID > 0
83
84TINIB tinib_table[TNUM_TSKID];
85TCB tcb_table[TNUM_TSKID];
86
87#else /* TNUM_TSKID > 0 */
88
89#error TNUM_TSKID must not be 0.
90
91#endif /* TNUM_TSKID > 0 */
92
93/*
94 * セマフォ機能
95 */
96
97const ID tmax_semid = (TMIN_SEMID + TNUM_SEMID - 1);
98
99#if TNUM_SEMID > 0
100
101SEMINIB seminib_table[TNUM_SEMID];
102SEMCB semcb_table[TNUM_SEMID];
103
104#else /* TNUM_SEMID > 0 */
105
106TOPPERS_EMPTY_LABEL(SEMINIB, seminib_table);
107TOPPERS_EMPTY_LABEL(SEMCB, semcb_table);
108
109#endif /* TNUM_SEMID > 0 */
110
111/*
112 * イベントフラグ機能
113 */
114
115const ID tmax_flgid = (TMIN_FLGID + TNUM_FLGID - 1);
116
117#if TNUM_FLGID > 0
118
119FLGINIB flginib_table[TNUM_FLGID];
120FLGCB flgcb_table[TNUM_FLGID];
121
122#else /* TNUM_FLGID > 0 */
123
124TOPPERS_EMPTY_LABEL(FLGINIB, flginib_table);
125TOPPERS_EMPTY_LABEL(FLGCB, flgcb_table);
126
127#endif /* TNUM_FLGID > 0 */
128
129/*
130 * データキュー機能
131 */
132
133const ID tmax_dtqid = (TMIN_DTQID + TNUM_DTQID - 1);
134
135#if TNUM_DTQID > 0
136
137DTQINIB dtqinib_table[TNUM_DTQID];
138DTQCB dtqcb_table[TNUM_DTQID];
139
140#else /* TNUM_DTQID > 0 */
141
142TOPPERS_EMPTY_LABEL(DTQINIB, dtqinib_table);
143TOPPERS_EMPTY_LABEL(DTQCB, dtqcb_table);
144
145#endif /* TNUM_DTQID > 0 */
146
147/*
148 * 優先度データキュー機能
149 */
150
151const ID tmax_pdqid = (TMIN_PDQID + TNUM_PDQID - 1);
152
153#if TNUM_PDQID > 0
154
155PDQINIB pdqinib_table[TNUM_PDQID];
156PDQCB pdqcb_table[TNUM_PDQID];
157
158#else /* TNUM_PDQID > 0 */
159
160TOPPERS_EMPTY_LABEL(PDQINIB, pdqinib_table);
161TOPPERS_EMPTY_LABEL(PDQCB, pdqcb_table);
162
163#endif /* TNUM_PDQID > 0 */
164
165/*
166 * メールボックス機能
167 */
168
169const ID tmax_mbxid = (TMIN_MBXID + TNUM_MBXID - 1);
170
171#if TNUM_MBXID > 0
172
173MBXINIB mbxinib_table[TNUM_MBXID];
174MBXCB mbxcb_table[TNUM_MBXID];
175
176#else /* TNUM_MBXID > 0 */
177
178TOPPERS_EMPTY_LABEL(MBXINIB, mbxinib_table);
179TOPPERS_EMPTY_LABEL(MBXCB, mbxcb_table);
180
181#endif /* TNUM_MBXID > 0 */
182
183/*
184 * 固定長メモリプール機能
185 */
186
187const ID tmax_mpfid = (TMIN_MPFID + TNUM_MPFID - 1);
188
189#if TNUM_MPFID > 0
190
191MPFINIB mpfinib_table[TNUM_MPFID];
192MPFCB mpfcb_table[TNUM_MPFID];
193
194#else /* TNUM_MPFID > 0 */
195
196TOPPERS_EMPTY_LABEL(MPFINIB, mpfinib_table);
197TOPPERS_EMPTY_LABEL(MPFCB, mpfcb_table);
198
199#endif /* TNUM_MPFID > 0 */
200
201/*
202 * 周期ハンドラ機能
203 */
204
205const ID tmax_cycid = (TMIN_CYCID + TNUM_CYCID - 1);
206
207#if TNUM_CYCID > 0
208
209CYCINIB cycinib_table[TNUM_CYCID];
210CYCCB cyccb_table[TNUM_CYCID];
211
212#else /* TNUM_CYCID > 0 */
213
214TOPPERS_EMPTY_LABEL(CYCINIB, cycinib_table);
215TOPPERS_EMPTY_LABEL(CYCCB, cyccb_table);
216
217#endif /* TNUM_CYCID > 0 */
218
219/*
220 * アラームハンドラ機能
221 */
222
223const ID tmax_almid = (TMIN_ALMID + TNUM_ALMID - 1);
224
225#if TNUM_ALMID > 0
226
227ALMINIB alminib_table[TNUM_ALMID];
228ALMCB almcb_table[TNUM_ALMID];
229
230#else /* TNUM_ALMID > 0 */
231
232TOPPERS_EMPTY_LABEL(ALMINIB, alminib_table);
233TOPPERS_EMPTY_LABEL(ALMCB, almcb_table);
234
235#endif /* TNUM_ALMID > 0 */
236
237/*
238 * 割込み管理機能
239 */
240
241const ID tmax_isrid = (TMIN_ISRID + TNUM_ISRID - 1);
242
243#if TNUM_ISRID > 0
244
245ISRINIB isrinib_table[TNUM_ISRID];
246ISRCB isrcb_table[TNUM_ISRID];
247
248#else /* TNUM_ISRID > 0 */
249
250TOPPERS_EMPTY_LABEL(ISRINIB, isrinib_table);
251TOPPERS_EMPTY_LABEL(ISRCB, isrcb_table);
252
253#endif /* TNUM_ISRID > 0 */
254
255/*
256 * 非タスクコンテキスト用スタック領域
257 */
258
259#ifdef ISTK
260
261#define TOPPERS_ISTKSZ ISTKSZ
262#define TOPPERS_ISTK ISTK
263
264#else /* ISTK */
265#ifdef ISTKSZ
266
267static STK_T istack[COUNT_STK_T(ISTKSZ)];
268#define TOPPERS_ISTKSZ ROUND_STK_T(ISTKSZ)
269#define TOPPERS_ISTK istack
270
271#else /* ISTKSZ */
272#ifdef DEFAULT_ISTK
273
274#define TOPPERS_ISTKSZ DEFAULT_ISTKSZ
275#define TOPPERS_ISTK DEFAULT_ISTK
276
277#else /* DEAULT_ISTK */
278
279static STK_T istack[COUNT_STK_T(DEFAULT_ISTKSZ)];
280#define TOPPERS_ISTKSZ ROUND_STK_T(DEFAULT_ISTKSZ)
281#define TOPPERS_ISTK istack
282
283#endif /* DEAULT_ISTK */
284#endif /* ISTKSZ */
285#endif /* ISTK */
286
287const SIZE istksz = TOPPERS_ISTKSZ;
288STK_T *const istk = TOPPERS_ISTK;
289
290#ifdef TOPPERS_ISTKPT
291STK_T *const istkpt = TOPPERS_ISTKPT(TOPPERS_ISTK, TOPPERS_ISTKSZ);
292#endif /* TOPPERS_ISTKPT */
293
294/*
295 * Memory Area Allocated by Kernel
296 */
297
298#ifdef KMEM
299
300#define TOPPERS_KMEMSZ KMEMSZ
301#define TOPPERS_KMEM KMEM
302
303#else /* KMEM */
304
305static MB_T memory[TOPPERS_COUNT_SZ(KMM_SIZE, sizeof(MB_T))];
306#define TOPPERS_KMMSZ TOPPERS_ROUND_SZ(KMM_SIZE, sizeof(MB_T))
307#define TOPPERS_KMM memory
308
309#endif /* KMEM */
310
311const SIZE kmmsz = TOPPERS_KMMSZ;
312MB_T *const kmm = TOPPERS_KMM;
313
314/*
315 * タイムイベント管理
316 */
317
318TMEVTN tmevt_heap[TNUM_TSKID + TNUM_CYCID + TNUM_ALMID];
319
320/*
321 * 各モジュールの初期化処理
322 */
323
324void
325initialize_object(void)
326{
327 initialize_task();
328#if TNUM_SEMID > 0
329 initialize_semaphore();
330#endif /* TNUM_SEMID > 0 */
331#if TNUM_FLGID > 0
332 initialize_eventflag();
333#endif /* TNUM_FLGID > 0 */
334#if TNUM_DTQID > 0
335 initialize_dataqueue();
336#endif /* TNUM_DTQID > 0 */
337#if TNUM_PDQID > 0
338 initialize_pridataq();
339#endif /* TNUM_PDQID > 0 */
340#if TNUM_MBXID > 0
341 initialize_mailbox();
342#endif /* TNUM_MBXID > 0 */
343#if TNUM_MPFID > 0
344 initialize_mempfix();
345#endif /* TNUM_MPFID > 0 */
346#if TNUM_CYCID > 0
347 initialize_cyclic();
348#endif /* TNUM_CYCID > 0 */
349#if TNUM_ALMID > 0
350 initialize_alarm();
351#endif /* TNUM_ALMID > 0 */
352 initialize_interrupt();
353#if TNUM_ISRID > 0
354 initialize_isr();
355#endif /* TNUM_ISRID > 0 */
356 initialize_exception();
357}
Note: See TracBrowser for help on using the repository browser.