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

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

nucleo_f401re依存部の追加

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$NL$
133extern void start(void);$NL$
134$NL$
135__attribute__ ((section(".vector"))) $NL$
136const FP _kernel_vector_table[] = $NL$
137{ $NL$
138 $TAB$(FP)(TOPPERS_ISTKPT(TOPPERS_ISTK, TOPPERS_ISTKSZ)), // 0 The initial stack pointer $NL$
139 $TAB$(FP)start, // 1 The reset handler $NL$
140
141$FOREACH excno {2,3,...,14}$
142 $IF excno == 11$
143 $TAB$(FP)(_exit_and_dispatch), /* 11 SVCall handler */
144 $ELIF excno == 14$
145 $TAB$(FP)(_dispatch), /* 14 PendSV handler */
146 $ELSE$
147 $TAB$(FP)(_kernel_core_exc_entry),
148 $END$
149 $SPC$$FORMAT("/* %d */", +excno)$$NL$
150$END$
151
152$FOREACH inhno INTNO_VALID$
153 $IF LENGTH(INH.INHNO[inhno]) && ((INH.INHATR[inhno] & TA_NONKERNEL) != 0)$
154 $TAB$(FP)($INH.INTHDR[inhno]$),
155 $ELSE$
156 $TAB$(FP)(_kernel_core_int_entry),
157 $END$
158 $SPC$$FORMAT("/* %d */", +inhno)$$NL$
159$END$
160
161
162$NL$};$NL$
163$NL$
164
165$NL$
166const FP _kernel_exc_tbl[] = $NL$
167{$NL$
168$FOREACH excno {0,1,...,14}$
169 $IF LENGTH(EXC.EXCNO[excno])$
170 $TAB$(FP)($EXC.EXCHDR[excno]$),
171 $ELSE$
172 $TAB$(FP)(_kernel_default_exc_handler),
173 $END$
174 $SPC$$FORMAT("/* %d */", +excno)$$NL$
175$END$
176
177
178$FOREACH inhno INTNO_VALID$
179 $IF LENGTH(INH.INHNO[inhno])$
180 $TAB$(FP)($INH.INTHDR[inhno]$),
181 $ELSE$
182 $TAB$(FP)(_kernel_default_int_handler),
183 $END$
184 $SPC$$FORMAT("/* %d */", +inhno)$$NL$
185$END$
186
187
188$NL$};$NL$
189$NL$
190
191$
192$ _kernel_bitpat_cfgintの生成
193$
194
195$bitpat_cfgint_num = 0$
196$bitpat_cfgint = 0$
197
198
199const uint32_t _kernel_bitpat_cfgint[
200$IF (TMAX_INTNO & 0x0f) == 0x00 $
201 $bitpat_cfgint_num = (TMAX_INTNO >> 4)$
202$ELSE$
203 $bitpat_cfgint_num = (TMAX_INTNO >> 4) + 1$
204$END$
205 $bitpat_cfgint_num$
206] = {$NL$
207$FOREACH num RANGE(0,(bitpat_cfgint_num-1))$
208$ //boost のバージョンによって挙動が変わるための対策
209$ //http://www.toppers.jp/TOPPERS-USERS/201004/msg00034.html
210 $bitpat_cfgint = 1-1$
211 $FOREACH inhno RANGE(num*32, (num*32)+31)$
212 $IF LENGTH(INH.INHNO[inhno])$
213 $bitpat_cfgint = bitpat_cfgint | (1 << (inhno & 0x01f))$
214 $END$
215 $END$
216 $TAB$UINT32_C($FORMAT("0x%08x", bitpat_cfgint)$), $NL$
217$END$
218
219$NL$};$NL$
220$NL$
221
222
223$
224$ 割込み優å…
225ˆåº¦ãƒ†ãƒ¼ãƒ–ル(内
226部表現)
227$
228const uint32_t _kernel_int_iipm_tbl[] = {$NL$
229$FOREACH excno {0,1,...,14}$
230 $TAB$$FORMAT("UINT32_C(0x%08x), /* 0x%03x */", 0, +excno)$$NL$
231$END$
232
233$FOREACH intno INTNO_VALID$
234 $IF LENGTH(INT.INTNO[intno])$
235 $intpri = (((1 << TBITW_IPRI) + INT.INTPRI[intno]) << (8 - TBITW_IPRI))$
236 $ELSE$
237$ // LSBを1にしているのは,割込み属性が設定されていないことを判
238$ // 別するためである.
239 $intpri = 0 $
240 $END$
241 $TAB$$FORMAT("UINT32_C(0x%08x), /* 0x%03x */", intpri, +intno)$$NL$
242$END$
243$NL$};$NL$
244$NL$
245
Note: See TracBrowser for help on using the repository browser.