Ignore:
Timestamp:
Jul 23, 2017, 2:29:40 PM (7 years ago)
Author:
coas-nagasima
Message:

SVNプロパティを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • rubycfg_asp/trunk/asp_dcre/kernel/kernel.trb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby; charset=UTF-8
    r313 r315  
    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 è²¬ã™ã‚‹ã“と.
     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#       免責すること.
    4733#
    48 #   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    49 ãŠ
    50 #   ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    51 #   ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    52 #   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    53 #   ã®è²¬ä»»ã‚’負わない.
     34#   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35#   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36#   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37#   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38#   の責任を負わない.
    5439#
    5540#   $Id: kernel.trb 716 2016-03-31 06:16:23Z ertl-hiro $
     
    5742
    5843#
    59 #               ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿ã®ãƒ‘ス2の生成スクリプト
    60 #
    61 
    62 #
    63 ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ファイルの指定
     44#               コンフィギュレータのパス2の生成スクリプト
     45#
     46
     47#
     48タイムスタンプファイルの指定
    6449#
    6550$timeStampFileName = "kernel_cfg.timestamp"
    6651
    6752#
    68 #  kernel_cfg.hのå
    69 ˆé ­éƒ¨åˆ†ã®ç”Ÿæˆ
     53#  kernel_cfg.hの先頭部分の生成
    7054#
    7155$kernelCfgH = GenFile.new("kernel_cfg.h")
     
    7761
    7862#
    79 #  kernel_cfg.cのå
    80 ˆé ­éƒ¨åˆ†ã®ç”Ÿæˆ
     63#  kernel_cfg.cの先頭部分の生成
    8164#
    8265$kernelCfgC = GenFile.new("kernel_cfg.c")
     
    9275
    9376#
    94 ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–(#include)
     77インクルードディレクティブ(#include)
    9578#
    9679$kernelCfgC.comment_header("Include Directives (#include)")
     
    10184
    10285#
    103 #  スタック領域の確保関数
    104 #
    105 #  スタック領域の定義分と,スタック領域のサイズ記述をé
    106 åˆ—で返す.
     86#  スタック領域の確保関数
     87#
     88#  スタック領域の定義分と,スタック領域のサイズ記述を配列で返す.
    10789#
    10890unless defined? AllocStack()
    10991  def AllocStack(stack, size)
    110     # 大きい方に丸めたサイズで確保する[NGKI1050][NGKI3220ï¼½
     92    # 大きい方に丸めたサイズで確保する[NGKI1050][NGKI3220]
    11193    $kernelCfgC.add("/*static*/ STK_T #{stack}[COUNT_STK_T(#{size})];")
    11294    return("ROUND_STK_T(#{size})")
     
    11597
    11698#
    117 #  カーネルオブジェクトに関するæƒ
    118 å ±ã®ç”Ÿæˆï¼ˆä»®æƒ³ã‚¯ãƒ©ã‚¹ï¼‰
     99#  カーネルオブジェクトに関する情報の生成(仮想クラス)
    119100#
    120101class KernelObject
     
    131112
    132113  def generate()
    133     # AID_@OBJの処理
     114    # AID_@OBJの処理
    134115    numAutoObjid = 0
    135116    $cfgData["AID_#{@OBJ}".to_sym].each do |key, params|
     
    138119    numObjid = $cfgData[@api].size + numAutoObjid
    139120
    140     # kernel_cfg.hの生成
     121    # kernel_cfg.hの生成
    141122    $kernelCfgH.add("#define TNUM_#{@OBJ}ID\t#{numObjid}")
    142123
    143     # オブジェクトのID番号のマクロ定義の生成
     124    # オブジェクトのID番号のマクロ定義の生成
    144125    $cfgData[@api].sort.each do |key, params|
    145126      if params[@objid]
     
    149130    $kernelCfgH.add()
    150131
    151     # オブジェクトのID番号を保持する変数
     132    # オブジェクトのID番号を保持する変数
    152133    if $USE_EXTERNAL_ID
    153134      $cfgData[@api].sort.each do |key, params|
     
    160141    end
    161142
    162     # 静的に生成されたオブジェクトの数
     143    # 静的に生成されたオブジェクトの数
    163144    $kernelCfgC.add("#define TNUM_S#{@OBJ}ID\t#{$cfgData[@api].size}")
    164145
    165     # オブジェクトID番号の最大値
     146    # オブジェクトID番号の最大値
    166147    $kernelCfgC.add("const ID _kernel_tmax_#{@obj}id" \
    167148                                                        " = (TMIN_#{@OBJ}ID + TNUM_#{@OBJ}ID - 1);")
     
    169150                                                        " = (TMIN_#{@OBJ}ID + TNUM_S#{@OBJ}ID - 1);")
    170151
    171     # データ構造
     152    # データ構造
    172153    if $cfgData[@api].size > 0
    173       # 事前準備(エラーチェック,メモリ領域の生成)
     154      # 事前準備(エラーチェック,メモリ領域の生成)
    174155      $cfgData[@api].sort.each do |key, params|
    175156        prepare(key, params)
    176157      end
    177158
    178       # オブジェクトå
    179 ¨ä½“に対してå¿
    180 è¦ãªãƒ¡ãƒ¢ãƒªé ˜åŸŸã®ç”Ÿæˆï¼ˆã‚ªãƒ—ション)
     159      # オブジェクト全体に対して必要なメモリ領域の生成(オプション)
    181160      if respond_to?(:generateData)
    182161        generateData()
    183162      end
    184163
    185       # オブジェクト初期化ブロックの生成
     164      # オブジェクト初期化ブロックの生成
    186165      $kernelCfgC.add("const #{@OBJ_S}INIB _kernel_#{@obj_s}inib_table" \
    187166                                                                                                        "[TNUM_S#{@OBJ}ID] = {")
     
    197176    end
    198177
    199     # 動的生成オブジェクト用のオブジェクト初期化ブロック
     178    # 動的生成オブジェクト用のオブジェクト初期化ブロック
    200179    @inibList.each do |type, array|
    201180      if numAutoObjid > 0
     
    207186
    208187    if numObjid > 0
    209       # オブジェクト管理ブロックの生成
     188      # オブジェクト管理ブロックの生成
    210189      $kernelCfgC.add2("#{@OBJ_S}CB _kernel_#{@obj_s}cb_table" \
    211190                                                                                                        "[TNUM_#{@OBJ}ID];")
    212191
    213       # オブジェクト初期化関数の追加
     192      # オブジェクト初期化関数の追加
    214193      $initializeFunctions.push("_kernel_initialize_#{@object}();")
    215194    else
     
    221200
    222201#
    223 å„機能モジュールのコンフィギュレーション
     202各機能モジュールのコンフィギュレーション
    224203#
    225204$initializeFunctions = []
     
    237216
    238217#
    239 éžã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆç”¨ã®ã‚¹ã‚¿ãƒƒã‚¯é ˜åŸŸ
     218非タスクコンテキスト用のスタック領域
    240219#
    241220$kernelCfgC.comment_header("Stack Area for Non-task Context")
    242221
    243222if $cfgData[:DEF_ICS].size == 0
    244   # DEF_ICSがない場合のデフォルト値の設定
     223  # DEF_ICSがない場合のデフォルト値の設定
    245224  if $DEFAULT_ISTK.nil?
    246     # スタック領域の自動割付け
     225    # スタック領域の自動割付け
    247226    istksz = AllocStack("_kernel_istack", "DEFAULT_ISTKSZ")
    248227    istk = "_kernel_istack"
     
    252231  end
    253232else
    254   # 静的API「DEF_ICS」が複数ある(E_OBJ)[NGKI3216ï¼½
     233  # 静的API「DEF_ICS」が複数ある(E_OBJ)[NGKI3216]
    255234  if $cfgData[:DEF_ICS].size > 1
    256235    error("E_OBJ: too many DEF_ICS")
    257236  end
    258237
    259   # DEF_ICSがある場合の処理
     238  # DEF_ICSがある場合の処理
    260239  params = $cfgData[:DEF_ICS][1]
    261240
    262   # パラメータが省略された時のデフォルト値の設定
     241  # パラメータが省略された時のデフォルト値の設定
    263242  params[:istk] ||= "NULL"
    264243
    265   # istkszがターゲット定義の最小値(TARGET_MIN_ISTKSZ,未定義の場合は1)
    266   # よりも小さい場合(E_PAR)[NGKI3254ï¼½
     244  # istkszがターゲット定義の最小値(TARGET_MIN_ISTKSZ,未定義の場合は1)
     245  # よりも小さい場合(E_PAR)[NGKI3254]
    267246  if params[:istksz] < $TARGET_MIN_ISTKSZ
    268247    error_wrong("E_PAR", params, :istksz, "too small")
     
    270249
    271250  if params[:istk] == "NULL"
    272     # スタック領域の自動割付け
     251    # スタック領域の自動割付け
    273252    istksz = AllocStack("_kernel_istack", params[:istksz])
    274253    istk = "_kernel_istack"
    275254  else
    276     # istkszがスタック領域のサイズとして正しくない場合(E_PAR)[NGKI3222ï¼½
     255    # istkszがスタック領域のサイズとして正しくない場合(E_PAR)[NGKI3222]
    277256    if (params[:istksz] & ($CHECK_STKSZ_ALIGN - 1)) != 0
    278257      error_wrong("E_PAR", params, :istksz, "not aligned")
     
    294273
    295274#
    296 ã‚«ãƒ¼ãƒãƒ«ãŒå‰²ã‚Šä»˜ã‘るメモリ領域
     275カーネルが割り付けるメモリ領域
    297276#
    298277$kernelCfgC.comment_header("Memory Area Allocated by Kernel")
    299278
    300279if $cfgData[:DEF_KMM].size == 0
    301   # DEF_KMMがない場合のデフォルト値の設定
     280  # DEF_KMMがない場合のデフォルト値の設定
    302281  kmmsz = "0"
    303282  kmm = "NULL"
    304283else
    305   # 静的API「DEF_KMM」が複数ある(E_OBJ)
     284  # 静的API「DEF_KMM」が複数ある(E_OBJ)
    306285  if ($cfgData[:DEF_KMM].size > 1)
    307286    error("E_OBJ: too many DEF_KMM")
    308287  end
    309288
    310   # DEF_KMMがある場合の処理
     289  # DEF_KMMがある場合の処理
    311290  params = $cfgData[:DEF_KMM][1]
    312291
    313   # パラメータが省略された時のデフォルト値の設定
     292  # パラメータが省略された時のデフォルト値の設定
    314293  params[:kmm] ||= "NULL"
    315294
    316   # kmmszが0の場合(E_PAR)
     295  # kmmszが0の場合(E_PAR)
    317296  if params[:kmmsz] == 0
    318297    error_wrong("E_PAR", params, :kmmsz, "zero")
     
    320299
    321300  if params[:kmm] == "NULL"
    322     # カーネルが割り付けるメモリ領域の自動割付け
     301    # カーネルが割り付けるメモリ領域の自動割付け
    323302    $kernelCfgC.add("static MB_T _kernel_memory" \
    324303                                        "[TOPPERS_COUNT_SZ(#{params[:kmmsz]}, sizeof(MB_T))];")
     
    326305    kmm = "_kernel_memory"
    327306  else
    328     # kmmszがカーネルが割り付けるメモリ領域のサイズとして正しくない場合
    329     # (E_PAR)
     307    # kmmszがカーネルが割り付けるメモリ領域のサイズとして正しくない場合
     308    # (E_PAR)
    330309    if (params[:kmmsz] & ($CHECK_MB_ALIGN - 1)) != 0
    331310      error_wrong("E_PAR", params, :kmmsz, "not aligned")
     
    343322
    344323#
    345 ã‚¿ã‚¤ãƒ ã‚¤ãƒ™ãƒ³ãƒˆç®¡ç†
     324タイムイベント管理
    346325#
    347326$kernelCfgC.comment_header("Time Event Management")
     
    351330
    352331#
    353 å„モジュールの初期化関数
     332各モジュールの初期化関数
    354333#
    355334$kernelCfgC.comment_header("Module Initialization Function")
     
    365344
    366345#
    367 åˆæœŸåŒ–ルーチン機能
     346初期化ルーチン機能
    368347#
    369348$kernelCfgC.comment_header("Initialization Routine")
    370349
    371 # エラーチェック
     350# エラーチェック
    372351$cfgData[:ATT_INI].each do |key, params|
    373   # iniatrが無効の場合(E_RSATR)[NGKI3241ï¼½
    374   #(TA_NULLでない場合)
     352  # iniatrが無効の場合(E_RSATR)[NGKI3241]
     353  #(TA_NULLでない場合)
    375354  if (params[:iniatr] != $TA_NULL)
    376355    error_illegal_sym("E_RSATR", params, :iniatr, :inirtn)
     
    378357end
    379358
    380 # 初期化ルーチンの実行関数の生成
     359# 初期化ルーチンの実行関数の生成
    381360$kernelCfgC.append(<<EOS)
    382361void
     
    391370
    392371#
    393 çµ‚了処理ルーチン機能
     372終了処理ルーチン機能
    394373#
    395374$kernelCfgC.comment_header("Termination Routine")
    396375
    397 # エラーチェック
     376# エラーチェック
    398377$cfgData[:ATT_TER].each do |key, params|
    399   # teratrが無効の場合(E_RSATR)[NGKI3248ï¼½
    400   #(TA_NULLでない場合)
     378  # teratrが無効の場合(E_RSATR)[NGKI3248]
     379  #(TA_NULLでない場合)
    401380  if (params[:teratr] != $TA_NULL)
    402381    error_illegal_sym("E_RSATR", params, :teratr, :terrtn)
     
    404383end
    405384
    406 # 終了処理ルーチンの実行関数の生成
     385# 終了処理ルーチンの実行関数の生成
    407386$kernelCfgC.append(<<EOS)
    408387void
     
    417396
    418397#
    419 #  kernel_cfg.hの末尾部分の生成
     398#  kernel_cfg.hの末尾部分の生成
    420399#
    421400$kernelCfgH.append(<<EOS)
Note: See TracChangeset for help on using the changeset viewer.