source: asp3_wo_tecs/trunk/arch/arm_m_gcc/common/core.tf@ 302

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

TECSレスのASP3の開発のため以下のtrunkからコピー
http://dev.toppers.jp/svn/asp3/branches/WO_TECS-3.C.0

File size: 7.0 KB
Line 
1$ ======================================================================
2$
3$ TOPPERS/ASP Kernel
4$ Toyohashi Open Platform for Embedded Real-Time Systems/
5$ Advanced Standard Profile Kernel
6$
7$ Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
8$ Toyohashi Univ. of Technology, JAPAN
9$ Copyright (C) 2005-2015 by Embedded and Real-Time Systems Laboratory
10$ Graduate School of Information Science, Nagoya Univ., JAPAN
11$
12$ 上記著作権者
13は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
14$ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
15$ 変・再é…
16å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
17$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
18$ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19$ スコード中に含まれていること.
20$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
21$ 用できる形で再é…
22å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
23å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
24$ 者
25マニュアルなど)に,上記の著作権表示,この利用条件および下記
26$ の無保証規定を掲載すること.
27$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28$ 用できない形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
30$ と.
31$ (a) 再é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
33マニュアルなど)に,上記の著
34$ 作権表示,この利用条件および下記の無保証規定を掲載すること.
35$ (b) 再é…
36å¸ƒã®å½¢æ…
37‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
38$ 報告すること.
39$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
40$ 害からも,上記著作権者
41およびTOPPERSプロジェクトをå…
42è²¬ã™ã‚‹ã“と.
43$ また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
44$ 由に基づく請求からも,上記著作権者
45およびTOPPERSプロジェクトを
46$ å…
47è²¬ã™ã‚‹ã“と.
48$
49$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者
50お
51$ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
52$ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
53$ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
54$ の責任を負わない.
55$
56$ @(#) $Id: core.tf 322 2015-04-30 13:23:48Z ertl-ishikawa $
57$
58$ =====================================================================
59
60$
61$ パス2のアーキテクチャ依存テンプレート(ARM-M用)
62$
63
64$
65$ 有効な割込み番号,割込みハンドラ番号
66$
67$INTNO_VALID = RANGE(15, TMAX_INTNO)$
68$INHNO_VALID = INTNO_VALID$
69
70$
71$ 有効なCPU例外番号
72$ 7,8はエミュレートされた例外
73$
74$EXCNO_VALID = { 2,3,4,5,6,7,8,11,12,14 }$
75
76$
77$ CRE_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
78$
79$INTNO_CREISR_VALID = INTNO_VALID$
80$INHNO_CREISR_VALID = INHNO_VALID$
81
82$
83$ DEF_INT/DEF_EXCで使用できる割込みハンドラ番号/CPU例外ハンドラ番号
84$
85$INHNO_DEFINH_VALID = INHNO_VALID$
86$EXCNO_DEFEXC_VALID = EXCNO_VALID$
87
88$
89$ CFG_INTで使用できる割込み番号と割込み優å…
90ˆåº¦
91$ 最大優å…
92ˆåº¦ã¯BASEPRIレジスタでマスクできない優å…
93ˆåº¦ï¼ˆå†…
94部優å…
95ˆåº¦'0')
96$ そのため,カーネル管理外の割込みでのみ指定可能.
97$INTNO_CFGINT_VALID = INTNO_VALID$
98$INTPRI_CFGINT_VALID = RANGE(-(1 << TBITW_IPRI),-2)$
99
100$
101$ kernel/kernel.tf のターゲット依存部
102$
103
104$
105$ TSKINICTXBの初期化情
106報を生成
107$
108$FUNCTION GENERATE_TSKINICTXB$
109 $SPC${
110 $SPC$$TSK.TINIB_STKSZ[ARGV[1]]$,
111 $SPC$((void *)((char *)($TSK.TINIB_STK[ARGV[1]]$)
112 $SPC$+ ($TSK.TINIB_STKSZ[ARGV[1]]$))),
113 $SPC$},
114$END$
115
116$
117$ 標準テンプレートファイルのインクルード
118$
119$INCLUDE "kernel/kernel.tf"$
120
121$FILE "kernel_cfg.c"$
122
123/*$NL$
124$SPC$* Target-dependent Definitions (ARM-M)$NL$
125$SPC$*/$NL$
126$NL$
127
128$
129$ ベクターテーブル
130$
131$NL$
132__attribute__ ((section(".vector"))) $NL$
133const FP _kernel_vector_table[] = $NL$
134{ $NL$
135 $TAB$(FP)(TOPPERS_ISTKPT(TOPPERS_ISTK, TOPPERS_ISTKSZ)), // 0 The initial stack pointer $NL$
136 $TAB$(FP)_start, // 1 The reset handler $NL$
137
138$FOREACH excno {2,3,...,14}$
139 $IF excno == 11$
140 $TAB$(FP)(_exit_and_dispatch), /* 11 SVCall handler */
141 $ELIF excno == 14$
142 $TAB$(FP)(_dispatch), /* 14 PendSV handler */
143 $ELSE$
144 $TAB$(FP)(_kernel_core_exc_entry),
145 $END$
146 $SPC$$FORMAT("/* %d */", +excno)$$NL$
147$END$
148
149$FOREACH inhno INTNO_VALID$
150 $IF LENGTH(INH.INHNO[inhno]) && ((INH.INHATR[inhno] & TA_NONKERNEL) != 0)$
151 $TAB$(FP)($INH.INTHDR[inhno]$),
152 $ELSE$
153 $TAB$(FP)(_kernel_core_int_entry),
154 $END$
155 $SPC$$FORMAT("/* %d */", +inhno)$$NL$
156$END$
157
158
159$NL$};$NL$
160$NL$
161
162$NL$
163const FP _kernel_exc_tbl[] = $NL$
164{$NL$
165$FOREACH excno {0,1,...,14}$
166 $IF LENGTH(EXC.EXCNO[excno])$
167 $TAB$(FP)($EXC.EXCHDR[excno]$),
168 $ELSE$
169 $TAB$(FP)(_kernel_default_exc_handler),
170 $END$
171 $SPC$$FORMAT("/* %d */", +excno)$$NL$
172$END$
173
174
175$FOREACH inhno INTNO_VALID$
176 $IF LENGTH(INH.INHNO[inhno])$
177 $TAB$(FP)($INH.INTHDR[inhno]$),
178 $ELSE$
179 $TAB$(FP)(_kernel_default_int_handler),
180 $END$
181 $SPC$$FORMAT("/* %d */", +inhno)$$NL$
182$END$
183
184
185$NL$};$NL$
186$NL$
187
188$
189$ _kernel_bitpat_cfgintの生成
190$
191
192$bitpat_cfgint_num = 0$
193$bitpat_cfgint = 0$
194
195
196const uint32_t _kernel_bitpat_cfgint[
197$IF (TMAX_INTNO & 0x0f) == 0x00 $
198 $bitpat_cfgint_num = (TMAX_INTNO >> 4)$
199$ELSE$
200 $bitpat_cfgint_num = (TMAX_INTNO >> 4) + 1$
201$END$
202 $bitpat_cfgint_num$
203] = {$NL$
204$FOREACH num RANGE(0,(bitpat_cfgint_num-1))$
205$ //boost のバージョンによって挙動が変わるための対策
206$ //http://www.toppers.jp/TOPPERS-USERS/201004/msg00034.html
207 $bitpat_cfgint = 1-1$
208 $FOREACH inhno RANGE(num*32, (num*32)+31)$
209 $IF LENGTH(INH.INHNO[inhno])$
210 $bitpat_cfgint = bitpat_cfgint | (1 << (inhno & 0x01f))$
211 $END$
212 $END$
213 $TAB$UINT32_C($FORMAT("0x%08x", bitpat_cfgint)$), $NL$
214$END$
215
216$NL$};$NL$
217$NL$
218
219
220$
221$ 割込み優å…
222ˆåº¦ãƒ†ãƒ¼ãƒ–ル(内
223部表現)
224$
225const uint32_t _kernel_int_iipm_tbl[] = {$NL$
226$FOREACH excno {0,1,...,14}$
227 $TAB$$FORMAT("UINT32_C(0x%08x), /* 0x%03x */", 0, +excno)$$NL$
228$END$
229
230$FOREACH intno INTNO_VALID$
231 $IF LENGTH(INT.INTNO[intno])$
232 $intpri = (((1 << TBITW_IPRI) + INT.INTPRI[intno]) << (8 - TBITW_IPRI))$
233 $ELSE$
234$ // LSBを1にしているのは,割込み属性が設定されていないことを判
235$ // 別するためである.
236 $intpri = 0 $
237 $END$
238 $TAB$$FORMAT("UINT32_C(0x%08x), /* 0x%03x */", intpri, +intno)$$NL$
239$END$
240$NL$};$NL$
241$NL$
242
Note: See TracBrowser for help on using the repository browser.