source: rubycfg_ssp/exception.trb@ 283

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

ファイルの追加

File size: 5.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は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
15# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
16# 変・再é…
17å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
18# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
19# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
20# スコード中に含まれていること.
21# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
22# 用できる形で再é…
23å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
24å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
25# 者
26マニュアルなど)に,上記の著作権表示,この利用条件および下記
27# の無保証規定を掲載すること.
28# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
29# 用できない形で再é…
30å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
31# と.
32# (a) 再é…
33å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
34マニュアルなど)に,上記の著
35# 作権表示,この利用条件および下記の無保証規定を掲載すること.
36# (b) 再é…
37å¸ƒã®å½¢æ…
38‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
39# 報告すること.
40# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
41# 害からも,上記著作権者
42およびTOPPERSプロジェクトをå…
43è²¬ã™ã‚‹ã“と.
44# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
45# 由に基づく請求からも,上記著作権者
46およびTOPPERSプロジェクトを
47# å…
48è²¬ã™ã‚‹ã“と.
49#
50# 本ソフトウェアは,無保証で提供されているものである.上記著作権者
51お
52# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
53# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
54# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
55# の責任を負わない.
56#
57# $Id: exception.trb 663 2016-02-27 04:45:50Z ertl-hiro $
58#
59
60#
61# CPU例外管理機能の生成スクリプト
62#
63
64#
65# kernel_cfg.cの生成
66#
67$kernelCfgC.comment_header("CPU Exception Management Functions")
68
69#
70# CPU例外ハンドラに関するエラーチェック
71#
72$cfgData[:DEF_EXC].each do |key, params|
73 # excnoがCPU例外ハンドラ番号として正しくない場合(E_PAR)
74 if $EXCNO_VALID.index(params[:excno]).nil?
75 error_illegal("E_PAR", params, :excno)
76 end
77
78 # excatrが無効の場合(E_RSATR)
79 #(TARGET_EXCATR以外のビットがセットされている場合)
80 if (params[:excatr] & ~($TARGET_EXCATR)) != 0
81 error_illegal_sym("E_RSATR", params, :excatr, :excno)
82 end
83end
84
85#
86# CPU例外ハンドラのための標準的な初期化情
87報の生成
88#
89if !$OMIT_INITIALIZE_EXCEPTION
90 #
91 # 定義するCPU例外ハンドラの数
92 #
93 $kernelCfgC.add(<<EOS)
94#define TNUM_EXCNO #{$cfgData[:DEF_EXC].size}
95const uint_t _kernel_tnum_excno = TNUM_EXCNO;
96EOS
97
98 if $cfgData[:DEF_EXC].size != 0
99 #
100 # CPU例外ハンドラのエントリ
101 #
102 $cfgData[:DEF_EXC].each do |key, params|
103 $kernelCfgC.add("EXCHDR_ENTRY(#{params[:excno]}, " \
104 "#{params[:excno].val}, #{params[:exchdr]})")
105 end
106 $kernelCfgC.add("")
107
108 #
109 # CPU例外ハンドラ初期化ブロック
110 #
111 $kernelCfgC.append("const EXCNO _kernel_excinib_excno[TNUM_EXCNO] = {")
112 $cfgData[:DEF_EXC].each_with_index do |(key, params), index|
113 $kernelCfgC.append(",") if index > 0
114 $kernelCfgC.append("(#{params[:excno]})")
115 end
116 $kernelCfgC.add("};")
117
118 $kernelCfgC.append("const ATR _kernel_excinib_excatr[TNUM_EXCNO] = {")
119 $cfgData[:DEF_EXC].each_with_index do |(key, params), index|
120 $kernelCfgC.append(",") if index > 0
121 $kernelCfgC.append("(#{params[:excatr]})")
122 end
123 $kernelCfgC.add("};")
124
125 $kernelCfgC.append("const FP _kernel_excinib_entry[TNUM_EXCNO] = {")
126 $cfgData[:DEF_EXC].each_with_index do |(key, params), index|
127 $kernelCfgC.append(",") if index > 0
128 $kernelCfgC.append("(FP)(EXC_ENTRY(#{params[:excno]}, #{params[:exchdr]}))")
129 end
130 $kernelCfgC.add2("};")
131
132 else
133 $kernelCfgC.add("TOPPERS_EMPTY_LABEL(const EXCNO, _kernel_excinib_excno);")
134 $kernelCfgC.add("TOPPERS_EMPTY_LABEL(const ATR, _kernel_excinib_excatr);")
135 $kernelCfgC.add2("TOPPERS_EMPTY_LABEL(const FP, _kernel_excinib_entry);")
136 end
137end
138
139#
140# CPU例外管理機能初期化関数の追加
141#
142$initializeFunctions.push("_kernel_initialize_exception();")
Note: See TracBrowser for help on using the repository browser.