source: rubycfg_ssp/prc_kernel.trb@ 283

Last change on this file since 283 was 283, checked in by nmir-saito, 7 years ago

ファイルの追加

File size: 6.2 KB
Line 
1# -*- coding: utf-8 -*-
2#
3# TOPPERS/SSP Kernel
4# Toyohashi Open Platform for Embedded Real-Time Systems/
5# Advanced Standard Profile Kernel
6#
7# Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN
8# Copyright (C) 2015,2016 by Embedded and Real-Time Systems Laboratory
9# Graduate School of Information Science, Nagoya Univ., JAPAN
10# Copyright (C) 2017 by Naoki Saito
11# Nagoya Municipal Industrial Research Institute, JAPAN
12#
13#
14# 上記著作権者
15は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
16# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
17# 変・再é…
18å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
19# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
20# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
21# スコード中に含まれていること.
22# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
23# 用できる形で再é…
24å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
25å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
26# 者
27マニュアルなど)に,上記の著作権表示,この利用条件および下記
28# の無保証規定を掲載すること.
29# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
30# 用できない形で再é…
31å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
32# と.
33# (a) 再é…
34å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
35マニュアルなど)に,上記の著
36# 作権表示,この利用条件および下記の無保証規定を掲載すること.
37# (b) 再é…
38å¸ƒã®å½¢æ…
39‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
40# 報告すること.
41# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
42# 害からも,上記著作権者
43およびTOPPERSプロジェクトをå…
44è²¬ã™ã‚‹ã“と.
45# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
46# 由に基づく請求からも,上記著作権者
47およびTOPPERSプロジェクトを
48# å…
49è²¬ã™ã‚‹ã“と.
50#
51# 本ソフトウェアは,無保証で提供されているものである.上記著作権者
52お
53# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
54# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
55# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
56# の責任を負わない.
57#
58# $Id: core_kernel.trb 662 2016-02-27 02:33:51Z ertl-hiro $
59#
60
61#
62# パス2の生成スクリプトのコア依存部(ARM用)
63#
64
65#
66# 有効な割込み番号,割込みハンドラ番号
67#
68$INTNO_VALID = Array(15..$TMAX_INTNO)
69$INHNO_VALID = $INTNO_VALID
70
71#
72# 有効なCPU例外ハンドラ番号
73#
74$EXCNO_VALID = [ 2, 3, 4, 5, 6, 11, 12, 14 ]
75
76#
77# ATT_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
78#
79$INTNO_ATTISR_VALID = $INTNO_VALID
80$INHNO_ATTISR_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# チェック方法の指定
90#
91$CHECK_STKSZ_ALIGN = 8
92
93#
94# CFG_INTで使用できる割込み番号と割込み優å…
95ˆåº¦
96#
97$INTNO_CFGINT_VALID = $INTNO_VALID
98$INTPRI_CFGINT_VALID = Array(-(1 << $TBITW_IPRI)..-1)
99
100#
101# 割込み属性中のターゲット依存に用いるビット
102#
103#$TARGET_INTATR =
104
105#
106# ターゲット非依存部のインクルード
107#
108IncludeTrb("kernel/kernel.trb")
109
110$kernelCfgC.comment_header("Target-dependent Definitions (ARM-M)")
111
112#
113# 割込みベクタテーブル
114#
115$kernelCfgC.comment_header("Interrupt Vector Table")
116
117$kernelCfgC.add("extern void kernel_svc_handler(void);")
118$kernelCfgC.add
119$kernelCfgC.add("__attribute__ ((section(\".vector\")))")
120$kernelCfgC.add("const FP _kernel_vector_table[] = {")
121$kernelCfgC.add("\t(FP)(TOPPERS_ISTKPT(TOPPERS_STK, TOPPERS_STKSZ)), // 0 The initial stack pointer")
122$kernelCfgC.add("\t(FP)_start, // 1 The reset handler")
123
124(2..14).each do |excno|
125 if excno == 11
126 $kernelCfgC.append("\t(FP)(kernel_svc_handler), // 11 SVCall handler")
127 else
128 $kernelCfgC.append("\t(FP)(_kernel_exc_entry),")
129 end
130 $kernelCfgC.add(" /* #{excno} */")
131end
132
133$INTNO_VALID.each do |inhno|
134 if ($cfgData[:DEF_INH].has_key?(inhno)) && ($cfgData[:CFG_INT][inhno][:intpri] < $TIPM_LOCK)
135 $kernelCfgC.append("\t(FP)(#{$cfgData[:DEF_INH][inhno][:inthdr]})")
136 else
137 $kernelCfgC.append("\t(FP)(_kernel_int_entry)")
138 end
139 $kernelCfgC.add(", /* #{inhno} */")
140end
141
142$kernelCfgC.add
143$kernelCfgC.add2("};")
144
145#
146# CPU例外ハンドラテーブル
147#
148$kernelCfgC.comment_header("CPU Exception Handler Table")
149
150$kernelCfgC.add("const FP _kernel_exc_tbl[] = {")
151(0..14).each do |excno|
152 if $cfgData[:DEF_EXC].has_key?(excno)
153 $kernelCfgC.append("\t(FP)(#{$cfgData[:DEF_EXC][excno][:exchdr]})")
154 else
155 $kernelCfgC.append("\t(FP)(_kernel_default_exc_handler)")
156 end
157 $kernelCfgC.add(", /* #{excno} */")
158end
159
160$INTNO_VALID.each do |inhno|
161 if ($cfgData[:DEF_INH].has_key?(inhno)) && ($cfgData[:CFG_INT][inhno][:intpri] < $TIPM_LOCK)
162 $kernelCfgC.append("\t(FP)(#{$cfgData[:DEF_INH][inhno][:inthdr]})")
163 else
164 $kernelCfgC.append("\t(FP)(_kernel_default_int_handler)")
165 end
166 $kernelCfgC.add(", /* #{inhno} */")
167end
168
169$kernelCfgC.add
170$kernelCfgC.add2("};")
171
172#
173# _kernel_bitpat_cfgintの生成
174#
175
176if ($TMAX_INTNO & 0x0f) == 0
177 bitpat_cfgint_num = ($TMAX_INTNO >> 4)
178else
179 bitpat_cfgint_num = ($TMAX_INTNO >> 4) + 1
180end
181
182$kernelCfgC.add("const uint32_t _kernel_bitpat_cfgint[#{bitpat_cfgint_num}] = {")
183
184(0..(bitpat_cfgint_num-1)).each do |num|
185 bitpat_cfgint = 0
186 ((num*32)..(num*32+31)).each do |inhno|
187 if $cfgData[:DEF_INH].has_key?(inhno)
188 bitpat_cfgint = bitpat_cfgint | (1 << (inhno & 0x01f))
189 end
190 end
191 $kernelCfgC.add("\tUINT32_C(0x#{sprintf("%08x", bitpat_cfgint)}),")
192end
193
194$kernelCfgC.add2("};")
195
Note: See TracBrowser for help on using the repository browser.