source: rubycfg_ssp/trunk/exception.trb@ 285

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

Tracのソース閲覧時に文字化けするためmimetypewo

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