Changeset 285 for rubycfg_ssp/trunk/interrupt.trb
- Timestamp:
- May 2, 2017, 5:55:20 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
rubycfg_ssp/trunk/interrupt.trb
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r284 r285 11 11 # Nagoya Municipal Industrial Research Institute, JAPAN 12 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 # ã®è²¬ä»»ãè² ããªãï¼ 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 # の責任を負わない. 56 41 # 57 42 # $Id: interrupt.trb 678 2016-03-06 02:36:09Z ertl-hiro $ … … 59 44 60 45 # 61 # å²è¾¼ã¿ç®¡çæ©è½ã®çæã¹ã¯ãªãã46 # 割込み管理機能の生成スクリプト 62 47 # 63 48 … … 65 50 66 51 # 67 # ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©52 # トレースログマクロのデフォルト定義 68 53 # 69 54 $kernelCfgC.add(<<EOS) … … 78 63 79 64 # 80 # CRE_ISR ã§ä½¿ç¨ã§ããå²è¾¼ã¿çªå·ã¨ããã«å¯¾å¿ããå²è¾¼ã¿ãã³ãã©çªå·ã®ã81 # ãã©ã«ãå®ç¾©65 # CRE_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号のデ 66 # フォルト定義 82 67 # 83 68 if $INTNO_CREISR_VALID.nil? … … 89 74 90 75 # 91 # CFG_INTã§ä½¿ç¨ã§ããå²è¾¼ã¿åªå 92 度ã®ããã©ã«ãå®ç¾© 76 # CFG_INTで使用できる割込み優先度のデフォルト定義 93 77 # 94 78 if $INTPRI_CFGINT_VALID.nil? … … 97 81 98 82 # 99 # å²è¾¼ã¿çªå·ã¨å²è¾¼ã¿ãã³ãã©çªå·ã®å¤æãã¼ãã«ã®ä½æ83 # 割込み番号と割込みハンドラ番号の変換テーブルの作成 100 84 # 101 85 if $INTNO_CREISR_VALID.length != $INHNO_CREISR_VALID.length … … 113 97 114 98 # 115 # å²è¾¼ã¿è¦æ±ã©ã¤ã³ã«é¢ããã¨ã©ã¼ãã§ãã¯99 # 割込み要求ラインに関するエラーチェック 116 100 # 117 101 $cfgData[:CFG_INT].each do |key, params| 118 # intno ãå²è¾¼ã¿çªå·ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼102 # intnoが割込み番号として正しくない場合(E_PAR) 119 103 if $INTNO_VALID.index(params[:intno]).nil? 120 104 error_illegal("E_PAR", params, :intno) 121 105 end 122 106 123 # intatr ãç¡å¹ã®å ´åï¼E_RSATRï¼124 # ï¼TA_ENAINTï¼TA_EDGEï¼TARGET_INTATR以å¤ã®ããããã»ããããã¦ããå ´åï¼107 # intatrが無効の場合(E_RSATR) 108 #(TA_ENAINT,TA_EDGE,TARGET_INTATR以外のビットがセットされている場合) 125 109 if (params[:intatr] & ~($TA_ENAINT|$TA_EDGE|$TARGET_INTATR)) != 0 126 110 error_illegal_sym("E_RSATR", params, :intatr, :intno) 127 111 end 128 112 129 # intpriãCFG_INTã«å¯¾ããå²è¾¼ã¿åªå 130 度ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 113 # intpriがCFG_INTに対する割込み優先度として正しくない場合(E_PAR) 131 114 if $INTPRI_CFGINT_VALID.index(params[:intpri]).nil? 132 115 error_illegal_sym("E_PAR", params, :intpri, :intno) 133 116 end 134 117 135 # ã«ã¼ãã«ç®¡çå¤ã«åºå®ããã¦ããintnoã«å¯¾ãã¦ï¼intpriã«TMIN_INTPRIã136 # ããå°ããå¤ãæå®ãããªãã£ãå ´åï¼E_OBJï¼118 # カーネル管理外に固定されているintnoに対して,intpriにTMIN_INTPRIよ 119 # りも小さい値が指定されなかった場合(E_OBJ) 137 120 if !$INTNO_FIX_NONKERNEL.nil? 138 121 if !$INTNO_FIX_NONKERNEL.index(params[:intno]).nil? … … 144 127 end 145 128 146 # ã«ã¼ãã«ç®¡çã«åºå®ããã¦ããintnoã«å¯¾ãã¦ï¼intpriã«TMIN_INTPRIãã147 # ãå°ããå¤ãæå®ãããå ´åï¼E_OBJï¼129 # カーネル管理に固定されているintnoに対して,intpriにTMIN_INTPRIより 130 # も小さい値が指定された場合(E_OBJ) 148 131 if !$INTNO_FIX_KERNEL.nil? 149 132 if !$INTNO_FIX_KERNEL.index(params[:intno]).nil? … … 157 140 158 141 # 159 # å²è¾¼ã¿ãã³ãã©ã«é¢ããã¨ã©ã¼ãã§ãã¯142 # 割込みハンドラに関するエラーチェック 160 143 # 161 144 $cfgData[:DEF_INH].each do |key, params| 162 # inhno ãå²è¾¼ã¿ãã³ãã©çªå·ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼145 # inhnoが割込みハンドラ番号として正しくない場合(E_PAR) 163 146 if $INHNO_VALID.index(params[:inhno]).nil? 164 147 error_illegal("E_PAR", params, :inhno) 165 148 end 166 149 167 # inhatr ãç¡å¹ã®å ´åï¼E_RSATRï¼168 # ï¼TARGET_INHATR以å¤ã®ããããã»ããããã¦ããå ´åï¼150 # inhatrが無効の場合(E_RSATR) 151 #(TARGET_INHATR以外のビットがセットされている場合) 169 152 if (params[:inhatr] & ~($TARGET_INHATR)) != 0 170 153 error_illegal_sym("E_RSATR", params, :inhatr, :inhno) 171 154 end 172 155 173 # ã«ã¼ãã«ç®¡çå¤ã«åºå®ããã¦ããinhnoã«å¯¾ãã¦ï¼inhatrã«TA_NONKERNELã174 # æå®ããã¦ããªãå ´åï¼E_RSATRï¼156 # カーネル管理外に固定されているinhnoに対して,inhatrにTA_NONKERNELが 157 # 指定されていない場合(E_RSATR) 175 158 if !$INHNO_FIX_NONKERNEL.nil? 176 159 if !$INHNO_FIX_NONKERNEL.index(params[:inhno]).nil? … … 182 165 end 183 166 184 # ã«ã¼ãã«ç®¡çã«åºå®ããã¦ããinhnoã«å¯¾ãã¦ï¼inhatrã«TA_NONKERNELãæ185 # å®ããã¦ããå ´åï¼E_RSATRï¼167 # カーネル管理に固定されているinhnoに対して,inhatrにTA_NONKERNELが指 168 # 定されている場合(E_RSATR) 186 169 if !$INHNO_FIX_KERNEL.nil? 187 170 if !$INHNO_FIX_KERNEL.index(params[:inhno]).nil? … … 196 179 intnoVal = $toIntnoVal[params[:inhno].val] 197 180 198 # inhno ã«å¯¾å¿ããintnoã«å¯¾ããCFG_INTããªãå ´åï¼E_OBJï¼181 # inhnoに対応するintnoに対するCFG_INTがない場合(E_OBJ) 199 182 if !$cfgData[:CFG_INT].has_key?(intnoVal) 200 183 error_ercd("E_OBJ", params, "intno `#{intnoVal}' corresponding to " \ … … 203 186 intnoParams = $cfgData[:CFG_INT][intnoVal] 204 187 if (params[:inhatr] & $TA_NONKERNEL) == 0 205 # inhatrã«TA_NONKERNELãæå®ããã¦ãããï¼inhnoã«å¯¾å¿ããintno 206 # ã«å¯¾ãã¦CFG_INTã§è¨å®ãããå²è¾¼ã¿åªå 207 度ãTMIN_INTPRIãããå° 208 # ããå ´åï¼E_OBJï¼ 188 # inhatrにTA_NONKERNELが指定されておらず,inhnoに対応するintno 189 # に対してCFG_INTで設定された割込み優先度がTMIN_INTPRIよりも小 190 # さい場合(E_OBJ) 209 191 if intnoParams[:intpri] < $TMIN_INTPRI 210 192 error_ercd("E_OBJ", params, "intpri `#{intnoParams[:intpri]}' " \ … … 212 194 end 213 195 else 214 # inhatrã«TA_NONKERNELãæå®ããã¦ããï¼inhnoã«å¯¾å¿ããintnoã« 215 # 対ãã¦CFG_INTã§è¨å®ãããå²è¾¼ã¿åªå 216 度ãTMIN_INTPRI以ä¸ã§ãã 217 # å ´åï¼E_OBJï¼ 196 # inhatrにTA_NONKERNELが指定されており,inhnoに対応するintnoに 197 # 対してCFG_INTで設定された割込み優先度がTMIN_INTPRI以上である 198 # 場合(E_OBJ) 218 199 if intnoParams[:intpri] >= $TMIN_INTPRI 219 200 error_ercd("E_OBJ", params, "intpri `#{intnoParams[:intpri]}' " \ … … 226 207 227 208 # 228 # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ï¼ISRï¼ã«é¢ããã¨ã©ã¼ãã§ãã¯ã¨å²è¾¼ã¿ãã³ãã©ã®çæ209 # 割込みサービスルーチン(ISR)に関するエラーチェックと割込みハンドラの生成 229 210 # 230 211 $cfgData[:ATT_ISR].sort.each do |key, params| 231 # isratr ãç¡å¹ã®å ´åï¼E_RSATRï¼232 # ï¼TARGET_ISRATR以å¤ã®ããããã»ããããã¦ããå ´åï¼212 # isratrが無効の場合(E_RSATR) 213 #(TARGET_ISRATR以外のビットがセットされている場合) 233 214 if (params[:isratr] & ~($TARGET_ISRATR)) != 0 234 215 error_illegal("E_RSATR", params, "isratr") 235 216 end 236 217 237 # intno ãATT_ISRã«å¯¾ããå²è¾¼ã¿çªå·ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼218 # intnoがATT_ISRに対する割込み番号として正しくない場合(E_PAR) 238 219 if $INTNO_ATTISR_VALID.index(params[:intno]).nil? 239 220 error_illegal("E_PAR", params, "intno") 240 221 end 241 222 242 # (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI) ã§ãªãå ´åï¼E_PARï¼223 # (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)でない場合(E_PAR) 243 224 if !($TMIN_ISRPRI <= params[:isrpri] && params[:isrpri] <= $TMAX_ISRPRI) 244 225 error_illegal("E_PAR", params, "isrpri") … … 247 228 248 229 $INTNO_ATTISR_VALID.each do |intnoVal| 249 # å²è¾¼ã¿çªå·intnoã«å¯¾ãã¦ç»é²ãããISRã®ãªã¹ãã®ä½æ230 # 割込み番号intnoに対して登録されたISRのリストの作成 250 231 isrParamsList = [] 251 232 $cfgData[:ATT_ISR].sort.each do |key, params| … … 255 236 end 256 237 257 # å²è¾¼ã¿çªå·intnoã«å¯¾ãã¦ç»é²ãããISRãåå¨ããå ´å238 # 割込み番号intnoに対して登録されたISRが存在する場合 258 239 if isrParamsList.size > 0 259 240 inhnoVal = $toInhnoVal[intnoVal] 260 241 261 # intno ã«å¯¾å¿ããinhnoã«å¯¾ãã¦DEF_INHãããå ´åï¼E_OBJï¼242 # intnoに対応するinhnoに対してDEF_INHがある場合(E_OBJ) 262 243 if $cfgData[:DEF_INH].has_key?(inhnoVal) 263 244 inhnoParams = $cfgData[:DEF_INH][inhnoVal] … … 266 247 end 267 248 268 # intno ã«å¯¾ããCFG_INTããªãå ´åï¼E_OBJï¼249 # intnoに対するCFG_INTがない場合(E_OBJ) 269 250 if !$cfgData[:CFG_INT].has_key?(intnoVal) 270 251 error_ercd("E_OBJ", isrParamsList[0], "%%intno in %apiname " \ … … 273 254 intnoParams = $cfgData[:CFG_INT][intnoVal] 274 255 275 # intnoã«å¯¾ãã¦CFG_INTã§è¨å®ãããå²è¾¼ã¿åªå 276 度ãTMIN_INTPRIããã 277 # å°ããå ´åï¼E_OBJï¼ 256 # intnoに対してCFG_INTで設定された割込み優先度がTMIN_INTPRIよりも 257 # 小さい場合(E_OBJ) 278 258 if intnoParams[:intpri] < $TMIN_INTPRI 279 259 error_ercd("E_OBJ", isrParamsList[0], … … 283 263 end 284 264 285 # 次ã®DEF_INHã«ç¸å½ãããã¼ã¿ãçæ265 # 次のDEF_INHに相当するデータを生成 286 266 # DEF_INH(inhno, { TA_NULL, _kernel_inthdr_<intno> } ); 287 267 $cfgData[:DEF_INH][inhnoVal] = { … … 291 271 } 292 272 293 # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç¨ã®å²è¾¼ã¿ãã³ãã©273 # 割込みサービスルーチン用の割込みハンドラ 294 274 $kernelCfgC.add("void") 295 275 $kernelCfgC.add("_kernel_inthdr_#{intnoVal}(void)") … … 305 285 end 306 286 307 # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ãåªå 308 度é ã«å¼ã³åºã 309 i = 0 # stable sortãè¡ãããã®å¤æ° 287 # 割込みサービスルーチンを優先度順に呼び出す 288 i = 0 # stable sortを行うための変数 310 289 isrParamsList.sort_by {|params| [ params[:isrpri].val, i += 1 ]} \ 311 290 .each_with_index do |params, index| … … 328 307 329 308 # 330 # å²è¾¼ã¿ãã³ãã©ã®ããã®æ¨æºçãªåæåæ 331 å ±ã®çæ 309 # 割込みハンドラのための標準的な初期化情報の生成 332 310 # 333 311 if !$OMIT_INITIALIZE_INTERRUPT || $USE_INHINIB_TABLE 334 312 # 335 # å®ç¾©ããå²è¾¼ã¿ãã³ãã©ã®æ°313 # 定義する割込みハンドラの数 336 314 # 337 315 $kernelCfgC.add(<<EOS) … … 342 320 if $cfgData[:DEF_INH].size != 0 343 321 # 344 # å²è¾¼ã¿ãã³ãã©ã®ã¨ã³ããª322 # 割込みハンドラのエントリ 345 323 # 346 324 $cfgData[:DEF_INH].each do |key, params| … … 351 329 352 330 # 353 # å²è¾¼ã¿ãã³ãã©åæåãããã¯331 # 割込みハンドラ初期化ブロック 354 332 # 355 333 $kernelCfgC.append("const INHNO\t_kernel_inhinib_inhno[TNUM_INHNO] = {") … … 381 359 382 360 # 383 # å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®ããã®æ¨æºçãªåæåæ 384 å ±ã®çæ 361 # 割込み要求ラインのための標準的な初期化情報の生成 385 362 # 386 363 if !$OMIT_INITIALIZE_INTERRUPT || $USE_INTINIB_TABLE 387 364 388 365 # 389 # è¨å®ããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã®æ°366 # 設定する割込み要求ラインの数 390 367 # 391 368 $kernelCfgC.add(<<EOS) … … 395 372 396 373 # 397 # å²è¾¼ã¿è¦æ±ã©ã¤ã³åæåãããã¯374 # 割込み要求ライン初期化ブロック 398 375 # 399 376 if $cfgData[:CFG_INT].size != 0 … … 427 404 428 405 # 429 # å²è¾¼ã¿ç®¡çæ©è½åæåé¢æ°ã®è¿½å406 # 割込み管理機能初期化関数の追加 430 407 # 431 408 $initializeFunctions.push("_kernel_initialize_interrupt();") -
Property svn:mime-type
set to
Note:
See TracChangeset
for help on using the changeset viewer.