Ignore:
Timestamp:
May 22, 2019, 10:03:37 PM (5 years ago)
Author:
coas-nagasima
Message:

ビルドが通るよう更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • azure_iot_hub/trunk/asp3_dcre/kernel/interrupt.trb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r388 r389  
    99#               Graduate School of Information Science, Nagoya Univ., JAPAN
    1010#
    11 #   ä¸Šè¨˜è‘—作権è€
    12 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    13 #   ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
    14 #   å¤‰ãƒ»å†é
    15 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    16 #   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    17 #       æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
    18 #       ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
    19 #   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    20 #       ç”¨ã§ãã‚‹å½¢ã§å†é
    21 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    22 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    23 #       è€
    24 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    25 #       ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
    26 #   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    27 #       ç”¨ã§ããªã„形で再é
    28 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    29 #       ã¨ï¼Ž
    30 #     (a) 再é
    31 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    32 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    33 #         ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
    34 #     (b) 再é
    35 å¸ƒã®å½¢æ
    36 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    37 #         å ±å‘Šã™ã‚‹ã“と.
    38 #   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    39 #       å®³ã‹ã‚‰ã‚‚,上記著作権è€
    40 ãŠã‚ˆã³TOPPERSプロジェクトをå
    41 è²¬ã™ã‚‹ã“と.
    42 #       ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
    43 #       ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
    44 ãŠã‚ˆã³TOPPERSプロジェクトを
    45 #       å
    46 è²¬ã™ã‚‹ã“と.
    47 #
    48 #   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    49 ãŠ
    50 #   ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    51 #   ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    52 #   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    53 #   ã®è²¬ä»»ã‚’負わない.
     11#   上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     12#   ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13#   変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14#   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15#       権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16#       スコード中に含まれていること.
     17#   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18#       用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19#       者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20#       の無保証規定を掲載すること.
     21#   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22#       用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23#       と.
     24#     (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25#         作権表示,この利用条件および下記の無保証規定を掲載すること.
     26#     (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27#         報告すること.
     28#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29#       害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30#       また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31#       由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32#       免責すること.
     33#
     34#   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35#   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36#   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37#   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38#   の責任を負わない.
    5439#
    5540#   $Id$
     
    5742
    5843#
    59 #               å‰²è¾¼ã¿ç®¡ç†æ©Ÿèƒ½ã®ç”Ÿæˆã‚¹ã‚¯ãƒªãƒ—ト
    60 #
    61 
    62 #
    63 #  kernel_cfg.cの生成
     44#               割込み管理機能の生成スクリプト
     45#
     46
     47#
     48#  kernel_cfg.cの生成
    6449#
    6550$kernelCfgC.comment_header("Interrupt Management Functions")
    6651
    6752#
    68 #  CRE_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号のデ
    69 ãƒ•ã‚©ãƒ«ãƒˆå®šç¾©
     53#  CRE_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号のデ
     54フォルト定義
    7055#
    7156if $INTNO_CREISR_VALID.nil?
     
    7762
    7863#
    79 #  CFG_INTで使用できる割込み優å
    80 ˆåº¦ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå®šç¾©
     64#  CFG_INTで使用できる割込み優先度のデフォルト定義
    8165#
    8266if $INTPRI_CFGINT_VALID.nil?
     
    8569
    8670#
    87 å‰²è¾¼ã¿ç•ªå·ã¨å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ç•ªå·ã®å¤‰æ›ãƒ†ãƒ¼ãƒ–ルの作成
     71割込み番号と割込みハンドラ番号の変換テーブルの作成
    8872#
    8973if $INTNO_CREISR_VALID.length != $INHNO_CREISR_VALID.length
     
    10185
    10286#
    103 å‰²è¾¼ã¿è¦æ±‚ラインに関するエラーチェック
     87割込み要求ラインに関するエラーチェック
    10488#
    10589$cfgData[:CFG_INT].each do |key, params|
    106   #     intnoが割込み番号として正しくない場合(E_PAR)[NGKI2972ï¼½
     90  #     intnoが割込み番号として正しくない場合(E_PAR)[NGKI2972]
    10791  if $INTNO_VALID.index(params[:intno]).nil?
    10892    error_illegal("E_PAR", params, :intno)
    10993  end
    11094
    111   #     intatrが無効の場合(E_RSATR)[NGKI2969ï¼½
    112   #(TA_ENAINT,TA_EDGE,TARGET_INTATR以外のビットがセットされている場合)
     95  #     intatrが無効の場合(E_RSATR)[NGKI2969]
     96  #(TA_ENAINT,TA_EDGE,TARGET_INTATR以外のビットがセットされている場合)
    11397  if (params[:intatr] & ~($TA_ENAINT|$TA_EDGE|$TARGET_INTATR)) != 0
    11498    error_illegal_sym("E_RSATR", params, :intatr, :intno)
    11599  end
    116100
    117   #     intpriがCFG_INTに対する割込み優å
    118 ˆåº¦ã¨ã—て正しくない場合(E_PAR)
    119   #     ï¼»NGKI2973ï¼½
     101  #     intpriがCFG_INTに対する割込み優先度として正しくない場合(E_PAR)
     102  #     [NGKI2973]
    120103  if $INTPRI_CFGINT_VALID.index(params[:intpri]).nil?
    121104    error_illegal_sym("E_OBJ", params, :intpri, :intno)
    122105  end
    123106
    124   # カーネル管理外に固定されているintnoに対して,intpriにTMIN_INTPRIよ
    125   #     ã‚Šã‚‚小さい値が指定されなかった場合(E_OBJ)[NGKI2983ï¼½
     107  # カーネル管理外に固定されているintnoに対して,intpriにTMIN_INTPRIよ
     108  #     りも小さい値が指定されなかった場合(E_OBJ)[NGKI2983]
    126109  if !$INTNO_FIX_NONKERNEL.nil?
    127110    if !$INTNO_FIX_NONKERNEL.index(params[:intno]).nil?
     
    133116  end
    134117
    135   #     ã‚«ãƒ¼ãƒãƒ«ç®¡ç†ã«å›ºå®šã•ã‚Œã¦ã„ã‚‹intnoに対して,intpriにTMIN_INTPRIより
    136   #     ã‚‚小さい値が指定された場合(E_OBJ)[NGKI2984ï¼½
     118  #     カーネル管理に固定されているintnoに対して,intpriにTMIN_INTPRIより
     119  #     も小さい値が指定された場合(E_OBJ)[NGKI2984]
    137120  if !$INTNO_FIX_KERNEL.nil?
    138121    if !$INTNO_FIX_KERNEL.index(params[:intno]).nil?
     
    146129
    147130#
    148 å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼ãƒã‚§ãƒƒã‚¯
     131割込みハンドラに関するエラーチェック
    149132#
    150133$cfgData[:DEF_INH].each do |key, params|
    151   # inhnoが割込みハンドラ番号として正しくない場合(E_PAR)[NGKI3055ï¼½
     134  # inhnoが割込みハンドラ番号として正しくない場合(E_PAR)[NGKI3055]
    152135  if $INHNO_VALID.index(params[:inhno]).nil?
    153136    error_illegal("E_PAR", params, :inhno)
    154137  end
    155138
    156   # inhatrが無効の場合(E_RSATR)[NGKI3052ï¼½
    157   #(TARGET_INHATR以外のビットがセットされている場合)
     139  # inhatrが無効の場合(E_RSATR)[NGKI3052]
     140  #(TARGET_INHATR以外のビットがセットされている場合)
    158141  if (params[:inhatr] & ~($TARGET_INHATR)) != 0
    159142    error_illegal_sym("E_RSATR", params, :inhatr, :inhno)
    160143  end
    161144
    162   #     ã‚«ãƒ¼ãƒãƒ«ç®¡ç†å¤–に固定されているinhnoに対して,inhatrにTA_NONKERNELが
    163   #     æŒ‡å®šã•ã‚Œã¦ã„ない場合(E_RSATR)[NGKI3067ï¼½
     145  #     カーネル管理外に固定されているinhnoに対して,inhatrにTA_NONKERNELが
     146  #     指定されていない場合(E_RSATR)[NGKI3067]
    164147  if !$INHNO_FIX_NONKERNEL.nil?
    165148    if !$INHNO_FIX_NONKERNEL.index(params[:inhno]).nil?
     
    171154  end
    172155
    173   #     ã‚«ãƒ¼ãƒãƒ«ç®¡ç†ã«å›ºå®šã•ã‚Œã¦ã„ã‚‹inhnoに対して,inhatrにTA_NONKERNELが指
    174   #     å®šã•ã‚Œã¦ã„る場合(E_RSATR)[NGKI3068ï¼½
     156  #     カーネル管理に固定されているinhnoに対して,inhatrにTA_NONKERNELが指
     157  #     定されている場合(E_RSATR)[NGKI3068]
    175158  if !$INHNO_FIX_KERNEL.nil?
    176159    if !$INHNO_FIX_KERNEL.index(params[:inhno]).nil?
     
    185168    intnoVal = $toIntnoVal[params[:inhno].val]
    186169
    187     # inhnoに対応するintnoに対するCFG_INTがない場合(E_OBJ)[NGKI3062ï¼½
     170    # inhnoに対応するintnoに対するCFG_INTがない場合(E_OBJ)[NGKI3062]
    188171    if !$cfgData[:CFG_INT].has_key?(intnoVal)
    189172      error_ercd("E_OBJ", params, "intno `#{intnoVal}' corresponding to " \
     
    192175      intnoParams = $cfgData[:CFG_INT][intnoVal]
    193176      if (params[:inhatr] & $TA_NONKERNEL) == 0
    194         # inhatrにTA_NONKERNELが指定されておらず,inhnoに対応するintno
    195         # に対してCFG_INTで設定された割込み優å
    196 ˆåº¦ãŒTMIN_INTPRIよりも小
    197         # さい場合(E_OBJ)[NGKI3065ï¼½
     177        # inhatrにTA_NONKERNELが指定されておらず,inhnoに対応するintno
     178        # に対してCFG_INTで設定された割込み優先度がTMIN_INTPRIよりも小
     179        # さい場合(E_OBJ)[NGKI3065]
    198180        if intnoParams[:intpri] < $TMIN_INTPRI
    199181          error_ercd("E_OBJ", params, "intpri `#{intnoParams[:intpri]}' " \
     
    201183        end
    202184      else
    203         # inhatrにTA_NONKERNELが指定されており,inhnoに対応するintnoに
    204         # 対してCFG_INTで設定された割込み優å
    205 ˆåº¦ãŒTMIN_INTPRI以上である
    206         # 場合(E_OBJ)[NGKI3066ï¼½
     185        # inhatrにTA_NONKERNELが指定されており,inhnoに対応するintnoに
     186        # 対してCFG_INTで設定された割込み優先度がTMIN_INTPRI以上である
     187        # 場合(E_OBJ)[NGKI3066]
    207188        if intnoParams[:intpri] >= $TMIN_INTPRI
    208189          error_ercd("E_OBJ", params, "intpri `#{intnoParams[:intpri]}' " \
     
    215196
    216197#
    217 å‰²è¾¼ã¿ã‚µãƒ¼ãƒ“スルーチン(ISR)に関するエラーチェック
     198割込みサービスルーチン(ISR)に関するエラーチェック
    218199#
    219200$cfgData[:CRE_ISR].sort.each do |key, params|
    220   #     isratrが無効の場合(E_RSATR)[NGKI2998ï¼½
    221   #(TARGET_ISRATR以外のビットがセットされている場合)
     201  #     isratrが無効の場合(E_RSATR)[NGKI2998]
     202  #(TARGET_ISRATR以外のビットがセットされている場合)
    222203  if (params[:isratr] & ~($TARGET_ISRATR)) != 0
    223204    error_illegal("E_RSATR", params, "isratr")
    224205  end
    225206
    226   #     intnoがCRE_ISRに対する割込み番号として正しくない場合(E_PAR)
    227   #     ï¼»NGKI3003ï¼½
     207  #     intnoがCRE_ISRに対する割込み番号として正しくない場合(E_PAR)
     208  #     [NGKI3003]
    228209  if $INTNO_CREISR_VALID.index(params[:intno]).nil?
    229210    error_illegal("E_PAR", params, "intno")
    230211  end
    231212
    232   #     (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)でない場合(E_PAR)
    233   #     ï¼»NGKI3005ï¼½
     213  #     (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)でない場合(E_PAR)
     214  #     [NGKI3005]
    234215  if !($TMIN_ISRPRI <= params[:isrpri] && params[:isrpri] <= $TMAX_ISRPRI)
    235216    error_illegal("E_PAR", params, "isrpri")
     
    238219
    239220$INTNO_CREISR_VALID.each do |intnoVal|
    240   # 割込み番号intnoに対して登録されたISRのリストの作成
     221  # 割込み番号intnoに対して登録されたISRのリストの作成
    241222  isrParamsList = []
    242223  $cfgData[:CRE_ISR].sort.each do |key, params|
     
    246227  end
    247228
    248   #     å‰²è¾¼ã¿ç•ªå·intnoに対して登録されたISRが存在する場合
     229  #     割込み番号intnoに対して登録されたISRが存在する場合
    249230  if isrParamsList.size > 0
    250231    inhnoVal = $toInhnoVal[intnoVal]
    251232
    252     # intnoに対応するinhnoに対してDEF_INHがある場合(E_OBJ)[NGKI3013ï¼½
     233    # intnoに対応するinhnoに対してDEF_INHがある場合(E_OBJ)[NGKI3013]
    253234    if $cfgData[:DEF_INH].has_key?(inhnoVal)
    254235      inhnoParams = $cfgData[:DEF_INH][inhnoVal]
     
    257238    end
    258239
    259     # intnoに対するCFG_INTがない場合(E_OBJ)[NGKI3012ï¼½
     240    # intnoに対するCFG_INTがない場合(E_OBJ)[NGKI3012]
    260241    if !$cfgData[:CFG_INT].has_key?(intnoVal)
    261242      error_ercd("E_OBJ", isrParamsList[0], "%%intno in %apiname " \
     
    264245      intnoParams = $cfgData[:CFG_INT][intnoVal]
    265246
    266       # intnoに対してCFG_INTで設定された割込み優å
    267 ˆåº¦ãŒTMIN_INTPRIよりも
    268       # 小さい場合(E_OBJ)[NGKI3014ï¼½
     247      # intnoに対してCFG_INTで設定された割込み優先度がTMIN_INTPRIよりも
     248      # 小さい場合(E_OBJ)[NGKI3014]
    269249      if intnoParams[:intpri] < $TMIN_INTPRI
    270250        error_ercd("E_OBJ", isrParamsList[0],
     
    277257
    278258#
    279 å‰²è¾¼ã¿ã‚µãƒ¼ãƒ“スルーチン(ISR)管理のデータ構造
     259割込みサービスルーチン(ISR)管理のデータ構造
    280260#
    281261intnoIsrList = []
     
    313293
    314294#
    315 å‰²è¾¼ã¿ã‚µãƒ¼ãƒ“スルーチン(ISR)呼出しのための割込みハンドラ
     295割込みサービスルーチン(ISR)呼出しのための割込みハンドラ
    316296#
    317297intnoIsrList.each do |intnoVal|
    318298  inhnoVal = $toInhnoVal[intnoVal]
    319299
    320   # 次のDEF_INHに相当するデータを生成
     300  # 次のDEF_INHに相当するデータを生成
    321301  # DEF_INH(inhno, { TA_NULL, _kernel_inthdr_<intno> } );
    322302  $cfgData[:DEF_INH][inhnoVal] = {
     
    326306  }
    327307
    328   # 割込みサービスルーチン用の割込みハンドラ
     308  # 割込みサービスルーチン用の割込みハンドラ
    329309  $kernelCfgC.add("void")
    330310  $kernelCfgC.add("_kernel_inthdr_#{intnoVal}(void)")
     
    335315
    336316#
    337 #  割込みサービスルーチンに関する一般的なæƒ
    338 å ±ã®ç”Ÿæˆ
     317#  割込みサービスルーチンに関する一般的な情報の生成
    339318#
    340319class IsrObject < KernelObject
     
    344323
    345324  def prepare(key, params)
    346     # エラーチェックは実施済みなので,ここでの処理は不要
     325    # エラーチェックは実施済みなので,ここでの処理は不要
    347326  end
    348327
     
    355334IsrObject.new.generate()
    356335
    357 # 割込みサービスルーチン生成順序テーブルの生成
     336# 割込みサービスルーチン生成順序テーブルの生成
    358337if $cfgData[:CRE_ISR].size != 0
    359338  $kernelCfgC.add("const ID _kernel_isrorder_table[TNUM_SISRID] = { ")
     
    371350
    372351#
    373 #  割込みハンドラのための標準的な初期化æƒ
    374 å ±ã®ç”Ÿæˆ
     352#  割込みハンドラのための標準的な初期化情報の生成
    375353#
    376354if !$OMIT_INITIALIZE_INTERRUPT || $USE_INHINIB_TABLE
    377355  #
    378   #  定義する割込みハンドラの数
     356  #  定義する割込みハンドラの数
    379357  #
    380358  $kernelCfgC.add(<<EOS)
     
    385363  if $cfgData[:DEF_INH].size != 0
    386364    #
    387     #  割込みハンドラのエントリ
     365    #  割込みハンドラのエントリ
    388366    #
    389367    $cfgData[:DEF_INH].each do |key, params|
     
    396374
    397375    #
    398     #  割込みハンドラ初期化ブロック
     376    #  割込みハンドラ初期化ブロック
    399377    #
    400378    $kernelCfgC.add("const INHINIB _kernel_inhinib_table[TNUM_DEF_INHNO] = {")
     
    418396
    419397#
    420 #  割込み要求ラインのための標準的な初期化æƒ
    421 å ±ã®ç”Ÿæˆ
     398#  割込み要求ラインのための標準的な初期化情報の生成
    422399#
    423400if !$OMIT_INITIALIZE_INTERRUPT || $USE_INTINIB_TABLE
    424401  #
    425   #  設定する割込み要求ラインの数
     402  #  設定する割込み要求ラインの数
    426403  #
    427404  $kernelCfgC.add(<<EOS)
     
    431408
    432409  #
    433   #  割込み要求ライン初期化ブロック
     410  #  割込み要求ライン初期化ブロック
    434411  #
    435412  if $cfgData[:CFG_INT].size != 0
     
    449426
    450427#
    451 å‰²è¾¼ã¿ç®¡ç†æ©Ÿèƒ½åˆæœŸåŒ–関数の追加
     428割込み管理機能初期化関数の追加
    452429#
    453430$initializeFunctions.push("_kernel_initialize_interrupt();")
Note: See TracChangeset for help on using the changeset viewer.