source: atk2-sc3_fl850f1l/kernel/kernel_common.tf@ 165

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

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

File size: 10.4 KB
Line 
1$
2$ TOPPERS ATK2
3$ Toyohashi Open Platform for Embedded Real-Time Systems
4$ Automotive Kernel Version 2
5$
6$ Copyright (C) 2011-2015 by Center for Embedded Computing Systems
7$ Graduate School of Information Science, Nagoya Univ., JAPAN
8$ Copyright (C) 2011-2015 by FUJI SOFT INCORPORATED, JAPAN
9$ Copyright (C) 2011-2013 by Spansion LLC, USA
10$ Copyright (C) 2011-2015 by NEC Communication Systems, Ltd., JAPAN
11$ Copyright (C) 2011-2015 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
12$ Copyright (C) 2011-2014 by Renesas Electronics Corporation, JAPAN
13$ Copyright (C) 2011-2015 by Sunny Giken Inc., JAPAN
14$ Copyright (C) 2011-2015 by TOSHIBA CORPORATION, JAPAN
15$ Copyright (C) 2011-2015 by Witz Corporation
16$ Copyright (C) 2014-2015 by AISIN COMCRUISE Co., Ltd., JAPAN
17$ Copyright (C) 2014-2015 by eSOL Co.,Ltd., JAPAN
18$ Copyright (C) 2014-2015 by SCSK Corporation, JAPAN
19$
20$ 上記著作権者は,以下の(1)(4)の条件を満たす場合に限り,本ソフトウェ
21$ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
22$ 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
23$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
24$ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
25$ スコード中に含まれていること.
26$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
27$ 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
28$ 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
29$ の無保証規定を掲載すること.
30$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
31$ 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
32$ と.
33$ (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
34$ 作権表示,この利用条件および下記の無保証規定を掲載すること.
35$ (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
36$ 報告すること.
37$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
38$ 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
39$ また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
40$ 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
41$ 免責すること.
42$
43$ 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
44$ 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
45$ はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
46$ 用する者に対して,AUTOSARパートナーになることを求めている.
47$
48$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
49$ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
50$ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
51$ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
52$ の責任を負わない.
53$
54$ $Id: kernel_common.tf 187 2015-06-25 03:39:04Z t_ishikawa $
55$
56
57$ =====================================================================
58$ TSK.STKとTSK.SSTKを整形
59$ =====================================================================
60
61$FOREACH tskid TSK.ID_LIST$
62$ // 省略された場合はNULLにする
63 $IF !LENGTH(TSK.STK[tskid])$
64 $TSK.STK[tskid] = "NULL"$
65 $END$
66
67$ // 省略された場合はNULLにする
68 $IF !LENGTH(TSK.SSTK[tskid])$
69 $TSK.SSTK[tskid] = "NULL"$
70 $END$
71$END$
72
73$ =====================================================================
74$ メモリオブジェクトの先頭と末尾のアドレスの取り出し
75$ =====================================================================
76
77$IF !ISFUNCTION("START_SYMBOL")$
78$FUNCTION START_SYMBOL$
79 $RESULT = SYMBOL(CONCAT("__start_", ARGV[1]))$
80$END$
81$END$
82
83$IF !ISFUNCTION("LIMIT_SYMBOL")$
84$FUNCTION LIMIT_SYMBOL$
85 $RESULT = SYMBOL(CONCAT("__limit_", ARGV[1]))$
86$END$
87$END$
88
89$ =====================================================================
90$ データセクションのLMAからVMAへのコピー
91$ =====================================================================
92
93$FUNCTION COPY_LMA$
94 $FOREACH lma LMA.ORDER_LIST$
95 $start_data = SYMBOL(LMA.START_DATA[lma])$
96 $end_data = SYMBOL(LMA.END_DATA[lma])$
97 $start_idata = SYMBOL(LMA.START_IDATA[lma])$
98 $IF !LENGTH(start_data)$
99 $ERROR$
100 $FORMAT(_("symbol '%1%' not found"), LMA.START_DATA[lma])$
101 $END$
102 $ELIF !LENGTH(end_data)$
103 $ERROR$
104 $FORMAT(_("symbol '%1%' not found"), LMA.END_DATA[lma])$
105 $END$
106 $ELIF !LENGTH(start_idata)$
107 $ERROR$
108 $FORMAT(_("symbol '%1%' not found"), LMA.START_IDATA[lma])$
109 $END$
110 $ELSE$
111 $BCOPY(start_idata, start_data, end_data - start_data)$
112 $END$
113 $END$
114$END$
115
116$
117$ タスクのスタックをextern宣言する
118$
119$FUNCTION GENERATE_EXPORT_TSK_STK$
120 $FOREACH tskid TSK.ID_LIST$
121 $IF OSAP.TRUSTED[TSK.OSAPID[tskid]]$
122 $extern_sstk = EQ(TSK.STK[tskid], "NULL") && !LENGTH(TSK.SHARED_SSTK_ID[tskid])$
123 $extern_ustk = 0$
124 $ELSE$
125 $extern_sstk = EQ(TSK.SSTK[tskid], "NULL") && !LENGTH(TSK.SHARED_SSTK_ID[tskid])$
126 $extern_ustk = EQ(TSK.STK[tskid], "NULL") && !LENGTH(TSK.SHARED_USTK_ID[tskid])$
127 $END$
128
129 $IF extern_sstk$
130 extern StackType _kernel_sstack_$tskid$[COUNT_STK_T($TSK.TINIB_SSTKSZ[tskid]$)];$NL$
131 $END$
132 $IF extern_ustk$
133 extern StackType _kernel_ustack_$tskid$[COUNT_STK_T($TSK.TINIB_USTKSZ[tskid]$)];$NL$
134 $END$
135 $END$
136 $FOREACH tskpri RANGE(TMIN_TPRI, TMAX_TPRI)$
137 $IF LENGTH(shared_ustack_size[tskpri])$
138 extern StackType _kernel_shared_ustack_$tskpri$[COUNT_STK_T(ROUND_STK_T($shared_ustack_size[tskpri]$))];$NL$
139 $END$
140 $IF LENGTH(shared_sstack_size[tskpri])$
141 extern StackType _kernel_shared_sstack_$tskpri$[COUNT_STK_T(ROUND_STK_T($shared_sstack_size[tskpri]$))];$NL$
142 $END$
143 $END$
144 $NL$
145$END$
146
147$
148$ タスクのextern宣言
149$
150$FUNCTION EXTERN_TSK$
151$ //タスクのextern宣言
152 $FOREACH tskid TSK.ID_LIST$
153 extern TASK($tskid$);$NL$
154 $END$
155 $NL$
156$END$
157
158$
159$ タスク初期化ブロックの出力
160$
161$FUNCTION GENERATE_TINIB_TABLE$
162 /* Task Initialization Block */$NL$
163 $IF LENGTH(TSK.ID_LIST)$
164 const TINIB tinib_table[TNUM_TASK] = {$NL$
165 $JOINEACH tskid TSK.ID_LIST ",\n"$
166 $TAB${$NL$
167 $TAB$$TAB$&TASKNAME($tskid$),$NL$
168
169$ // タスク初期化コンテキストブロック,スタック領域
170 $IF USE_TSKINICTXB$
171 $GENERATE_TSKINICTXB(tskid)$
172 $ELSE$
173 $TAB$$TAB$$TSK.TINIB_SSTKSZ[tskid]$,$NL$
174 $TAB$$TAB$(void *) $TSK.TINIB_SSTK[tskid]$,$NL$
175 $TAB$$TAB$$TSK.TINIB_USTKSZ[tskid]$,$NL$
176 $TAB$$TAB$(void *) $TSK.TINIB_USTK[tskid]$,$NL$
177 $END$
178
179 $TAB$$TAB$&(osapcb_table[$TSK.OSAPID[tskid]$]),$NL$
180 $TAB$$TAB$$FORMAT("0x%08xU", +TSK.ACSBTMP[tskid])$,$NL$
181 $TAB$$TAB$$TMAX_TPRI - TSK.PRIORITY[tskid]$,$NL$
182 $IF EQ(TSK.SCHEDULE[tskid], "NON") $
183 $TAB$$TAB$$+TPRI_MAXTASK$,$NL$
184 $ELSE$
185 $IF LENGTH(TSK.INRESPRI[tskid])$
186 $TAB$$TAB$$TMAX_TPRI - TSK.INRESPRI[tskid]$,$NL$
187 $ELSE$
188 $TAB$$TAB$$TMAX_TPRI - TSK.PRIORITY[tskid]$,$NL$
189 $END$
190 $END$
191
192 $TAB$$TAB$($TSK.ACTIVATION[tskid]$) - 1U,$NL$
193 $IF !OMIT_STKMPUINFOB$
194 $TAB$$TAB$$FORMAT("0x%08xU", +TSK.ASTPTN[tskid])$,$NL$
195 $GENERATE_STKMPUINFOB(tskid)$
196 $ELSE$
197 $TAB$$TAB$$FORMAT("0x%08xU", +TSK.ASTPTN[tskid])$$NL$
198 $END$
199 $TAB$}
200 $END$
201 $NL$
202 };$NL$
203 $ELSE$
204 TOPPERS_EMPTY_LABEL(const TINIB, tinib_table);$NL$
205 $END$
206 $NL$
207$END$
208
209$
210$ OSアプリケーション初期化ブロックの出力
211$
212$FUNCTION GENERATE_OSAPINIB_TABLE$
213 $IF LENGTH(OSAP.ID_LIST)$
214 const OSAPINIB osapinib_table[TNUM_OSAP] = {$NL$
215 $JOINEACH osapid OSAP.ID_LIST ",\n"$
216 $TAB${$NL$
217 $IF OSAP.STARTUPHOOK[osapid]$
218 $TAB$$TAB$&StartupHook_$osapid$,$NL$
219 $ELSE$
220 $TAB$$TAB$NULL,$NL$
221 $END$
222 $IF OSAP.ERRORHOOK[osapid]$
223 $TAB$$TAB$&ErrorHook_$osapid$,$NL$
224 $ELSE$
225 $TAB$$TAB$NULL,$NL$
226 $END$
227 $IF OSAP.SHUTDOWNHOOK[osapid]$
228 $TAB$$TAB$&ShutdownHook_$osapid$,$NL$
229 $ELSE$
230 $TAB$$TAB$NULL,$NL$
231 $END$
232 $IF EQ(OSAP.RESTARTTASK[osapid], "NO_RESTART_TASK")$
233 $TAB$$TAB$NULL,$NL$
234 $ELSE$
235 $TAB$$TAB$&tcb_table[$OSAP.RESTARTTASK[osapid]$],$NL$
236 $END$
237 $IF OSAP.TRUSTED[osapid]$
238 $TAB$$TAB$TA_TRUSTED,$NL$
239 $ELSE$
240 $TAB$$TAB$TA_NONTRUSTED,$NL$
241 $END$
242
243 $IF !OMIT_OSAPMPUINFOB$
244 $TAB$$TAB$$FORMAT("0x%08xU", +OSAP.BTMP[osapid])$,$NL$
245 $GENERATE_OSAPINIB_MPUINFOB(osapid)$
246 $ELSE$
247 $TAB$$TAB$$FORMAT("0x%08xU", +OSAP.BTMP[osapid])$$NL$
248 $END$
249
250 $TAB$}
251 $END$
252 $NL$
253 };$NL$
254 $NL$
255 $ELSE$
256 TOPPERS_EMPTY_LABEL(const OSAPINIB, osapinib_table);$NL$
257 $END$
258$END$
259
260$
261$ メモリオブジェクトのベースアドレス順のリストから
262$ 非信頼OSAPからアクセスできない領域を除いたリスト
263$ をMO_MEMTOP_ORDER_MEMINIBに入れる
264$
265$FUNCTION SET_MEMTOP_ORDER$
266 $prev = 0$
267 $FOREACH moid SORT(MO_SECTION_LIST, "MO.BASEADDR")$
268
269 $IF (MO.ACPTN_R[moid] != TACP_KERNEL || MO.ACPTN_W[moid] != TACP_KERNEL || MO.ACPTN_X[moid] != TACP_KERNEL)$
270 $IF !prev || (MO.LIMITADDR[prev] <= MO.BASEADDR[moid] && MO.LIMITADDR[prev] != 0)$
271 $MO_MEMTOP_ORDER_MEMINIB = APPEND(MO_MEMTOP_ORDER_MEMINIB, moid)$
272 $prev = moid$
273 $ELSE$
274$ // 同じOSAPに所属するユーザスタックの領域合併
275 $IF MO.TYPE[moid] == TOPPERS_USTACK &&
276 MO.TYPE[prev] == TOPPERS_USTACK &&
277 MO.OSAPID[prev] == MO.OSAPID[moid]$
278$ // ユーザスタック領域の併合処理
279 $MO.TSKID[prev] = 0$
280 $MO.TSKID[moid] = 0$
281 $MO.BASE[moid] = MO.BASE[prev]$
282 $MO.BASEADDR[moid] = MO.BASEADDR[prev]$
283 $IF MO.LIMITADDR[prev] < MO.LIMITADDR[moid]
284 && MO.LIMITADDR[prev] != 0$
285 $MO.SIZE[prev] = MO.LIMITADDR[moid] - MO.BASEADDR[prev]$
286 $MO.LIMITADDR[prev] = MO.LIMITADDR[moid]$
287 $ELSE$
288 $MO.SIZE[moid] = MO.SIZE[prev]$
289 $MO.LIMITADDR[moid] = MO.LIMITADDR[prev]$
290 $END$
291 $END$
292 $END$
293 $END$
294 $END$
295$END$
296
297$
298$ 隣接するメモリオブジェクトのメモリ保護属性が等しい場合は統合する
299$
300$FUNCTION MERGE_MEMINIB$
301 $merged_moid = 0$
302 $FOREACH moid MO_MEMTOP_ORDER_MEMINIB$
303 $IF merged_moid &&
304 (CFG_PASS4 ||
305 MO.LINKER[merged_moid] && MO.LINKER[moid] &&
306 MO.MEMREG[merged_moid] == MO.MEMREG[moid]) &&
307 ((MO.MERGED_LIMITADDR[merged_moid] == MO.BASEADDR[moid] &&
308 MO.ACPTN_R[merged_moid] == MO.ACPTN_R[moid] &&
309 MO.ACPTN_W[merged_moid] == MO.ACPTN_W[moid] &&
310 MO.ACPTN_X[merged_moid] == MO.ACPTN_X[moid]) ||
311 MO.LIMITADDR[moid] == MO.BASEADDR[moid])$
312
313 $MO.MERGED_LIMITADDR[merged_moid] = MO.LIMITADDR[moid]$
314 $MO.MERGED_LIMIT[merged_moid] = MO.LIMIT[moid]$
315 $ELSE$
316 $merged_moid = moid$
317 $new_list = APPEND(new_list, merged_moid)$
318 $MO.MERGED_LIMITADDR[moid] = MO.LIMITADDR[moid]$
319 $MO.MERGED_LIMIT[moid] = MO.LIMIT[moid]$
320 $END$
321 $END$
322 $MO_MEMTOP_ORDER_MEMINIB = new_list$
323$END$
324
325$
326$ OSAPCB外部参照宣言生成
327$
328$FUNCTION EXTERN_OSAPCB$
329$ //OSAPCBのextern宣言
330 extern OSAPCB osapcb_table[];$NL$
331 $NL$
332$END$
333
334$
335$ TCB外部参照宣言生成
336$
337$FUNCTION EXTERN_TCB$
338$ //TCBのextern宣言
339 extern TCB tcb_table[];$NL$
340 $NL$
341$END$
Note: See TracBrowser for help on using the repository browser.